OpenBSDでPPTPサーバつくってiPhoneからつなげるようにしてみたり、そのiPhoneをひかり電話の端末にしてみたり
そんなことをやってたらこんな時間。例によって後でやりかた忘れたときのためにメモ。
そもそもの経緯
たまたまhttp://journal.mycom.co.jp/column/osx/321/なんていう記事が出てたので、同じようなことをやってみようと思ったわけで。
わが家はBフレッツマンションタイプの回線で、ひかり電話もつかってるので、NTT東日本からRV-230SEっていうVDSLモデム内蔵のひかり電話対応ルータが送られてきてる。こいつは物理的につないだアナログ電話のほかに、SIP対応のソフトフォンとか電話機とかがつなげるようになってる。
OpenBSDでPPTPサーバをつくって、VPN接続できるようにする
↑の記事にあるようなVPNルータを買うような予算はないので、ふだん家で動いてるOpenBSD 4.5のPCをPPTPのサーバにする。
サーバ側のインストール前準備
PPTPで接続してきた端末には、このサーバがルータになってつながるようにしたいのだけど、パケットフォワーディングが有効になってない。なので、sysctl(8)を使って有効にする。
$ sudo sysctl net.inet.ip.forwarding=1
GRE*1が通るようにする必要があるので、これもsysctl(8)で設定する。
$ sudo sysctl net.inet.gre.allow=1
再起動しても同じ設定になるように、/etc/sysctl.conf(5)にも追記。
$ sudo vi /etc/sysctl.conf
下記を追記。
net.inet.ip.forwarding=1 net.inet.gre.allow=1
net.inet.ip.forwardingに関しては、/etc/sysctl.conf(5)の上のほうでコメントアウトされてる行があるので、そこのコメントをはずすだけでOK。
このサーバでいろいろやってる関係で、pf(4)でパケットフィルタをやってるので、/etc/pf.conf(5)に追加設定。これに関しては、直接ここに書いちゃうと、うちの構成がバレちゃうので概要だけ。必要なのは下記の設定
- サーバ自身に対するPPTP(TCP 1723番)での接続許可
- PPTPで接続してくる端末に割り当てるネットワークに対する通信許可
- GREの通過許可(最初これを忘れてて、全然つながらなくなってはまった)
パケットフィルタやってなければ、これは不要。
/etc/pf.conf(5)をかきかえたら、忘れずに有効にしておくこと。
syslogを/var/log/ppp.logに吐いてほしいので、それも有効にしておく。これは/etc/syslog.conf(5)を編集。
$ sudo vi /etc/syslog.conf
こんな感じの行を追加。
!ppp *.* /var/log/ppp.log
ひかり電話ルータの設定
まず、静的NATの設定。TCP 1723番(=PPTP)に対する通信の宛先を、さっきから設定してるサーバにする。
次に、ルータ側のルーティング設定。端末に割り当てるネットワークのゲートウェイを、さっきから設定してるサーバにする。これを忘れると、VPNはつながるのに電話が使えないとか、外に出られないとかいうことになる。
電話機能の設定は、デフォルトのままで使ってればとくに何もしなくてよさそうなのでそのまま。
PPTPサーバの設定
portsから、PPTPサーバのPoptopをインストールする。packagesからでもいいかもしれないけどやってない。
$ cd /usr/ports/net/poptop
$ sudo make install-all
インストールしたら、設定。これに関しては、汝の隣人のブログを愛せよ | LOVELOGに書いてあることをそのまま。設定自体はFreeBSDでもOpenBSDでも同じみたいなんで。リンク先が消えたときのことを考慮して、自分のもさらしておく。まず/etc/ppp/ppp.conf。/etc/ppp/にサンプルがあるけど無視。
$ sudo vi /etc/ppp/ppp.conf
内容はこちら。
loop: set timeout 0 set log phase chat connect lcp ipcp command set device localhost:pptp set dial set login set ifaddr 192.168.2.1 192.168.2.2-192.168.2.100 255.255.255.0 set server /tmp/loop "" 0177 loop-in: set timeout 0 set log phase lcp ipcp command allow mode direct pptp: load loop disable CHAP MSCHAP PAP enable MSCHAPv2 disable deflate pred1 deny deflate pred1 set mppe 128 stateless enable MPPE accept MPPE enable chap81 enable proxy set device !/etc/ppp/secure accept dns set dns 192.168.0.1
リンク先にも書いてあるけど、「set ifaddr 192.168.2.1 192.168.2.2-192.168.2.100 255.255.255.0」はPPTPでつなぐ端末に192.168.2.0/24を割り当てるということ。
次に、/etc/ppp/ppp.confに書いてあって呼ばれる/etc/ppp/secure。
$ sudo vi /etc/ppp/secure
内容はこちら。
#!/bin/sh exec /usr/sbin/ppp -direct loop-in
つくったら、実行属性つけておく。
$ sudo chmod 700 /etc/ppp/secure
最後に、ユーザ名とパスワードを書いたファイルである/etc/ppp/ppp.secretをつくる。
$ sudo vi /etc/ppp/ppp.secret
内容は、ユーザ名とパスワードをタブ区切りで、1行に1ユーザずつ書いていく。つまり、
user1 password1 user2 password2
こんな感じ。ちゃんとタブで区切る。つくったら、忘れずにroot以外が読めないようにしておく。
$ sudo chmod 500 /etc/ppp/ppp.secret
あとは、/etc/pptpd.confの編集。
$ sudo /etc/pptpd.conf
ここでは、
option /etc/ppp/options.pptpd
という行を見つけて、頭に#を入れてコメントアウト。
設定ファイルをひととおり作ったら、pptpdを起動。
$ sudo /usr/local/sbin/pptpd -d
起動時のログは、/var/log/daemonあたりに出てるようなので、そちらを参照。うまくいけば、
$ netstat -an | fgrep 1723
とやると
tcp 0 0 *.1723 *.* LISTEN
こんな感じで、TCP 1723番でListenしてることになってるはず。
ちゃんと起動したら、サーバを再起動したときに自動で起動するようにしておく。
$ sudo /etc/rc.local
こんな感じの内容を追加。
if [ -x /usr/local/sbin/pptpd ]; then echo -n " pptpd"; /usr/local/sbin/pptpd -d fi
iPhoneの設定
iPhoneでVPNの設定。設定アプリを起動して、「一般」-「ネットワーク」-「VPN」-「VPN構成を追加」-「PPTP」の順に選んで、下記のような感じで設定して保存。
- 説明
- 適当な名前
- サーバ
- インターネット側からみたときのサーバのIPアドレスとかFQDN名とか。つまり、サーバのアドレス。
- アカウント
- /etc/ppp/ppp.secretに書いたユーザ名
- RSA SecurID
- オフ
- パスワード
- /etc/ppp/ppp.secretに書いたパスワード
- 暗号化レベル
- 自動
- すべての信号を送信
- オン
ここまで設定したら、VPNをオンにしてみるとつながるはず。Wi-Fiでサーバと同じ内部ネットワークにいるとテストにならんので、一時的にWi-Fiを切って3Gだけにしてからつないでみるとよさげ。
このときのログは、/var/log/daemonや、さっきつくった/var/log/ppp.logあたりに出てるので、トラブルシューティングにはそれを使うとよさげ。あとはtcpdump(8)とか:-p
iPhoneでひかり電話
無料のfringがSIP対応で、以前アカウントを作ってたので使いたかったのだけど、うまくいかなくて、原因もよくわからなかったので、不本意ながら有料のSipPhone on iPhone(本日時点で800円)を使用。
設定方法はhttp://journal.mycom.co.jp/column/osx/321/に書いてあるのと同じ。「Accounts」タブを開いて、[Add new SIP acco...]を選んで、
をそれぞれ入力。さらに「Advanced」を選んで、
- Auth User
- ユーザID
- Proxy Server
- 空白
- Reg.Timeout
- リンク先に3600って書いてあるから3600にしてみた。デフォルトは0。
を入力して、「SIP Account」に戻ってSave。
アカウントができたら、そのアカウントをONにする。3Gでの接続だと、VPNでつないでいても落ちるみたいなので注意。問題なければ、何も言わずにONになってくれる。設定がまちがってると怒られる。
この状態で、「Dialer」タブにして電話番号を入れて、「SIP」ボタンを押すと、ひかり電話経由で外に電話がかけられる。アナログ電話の内線番号(1 or 2)をダイヤルすると、そっちをコールできる。逆に、アナログ電話からiPhoneを呼びだすことも可能。
ただし、さすがに3GでVPN接続してると、SIP経由で電話をかけさせてくれないみたい。公衆無線LANだと使えるらしいので、BBモバイルポイントとかでやってみよう。
このほか、参考にしたサイト
- Search | com.com
- http://www.ipoday.com/misc/xlite.html(最初iMacとX-Liteで試してたのだけど、まったく実用性がなかった・・・)
*1:どうでもいいけど、日本語のWikipediaって、GREで引くとGraduate Record Examinationのことしか載ってないのね。ここでのGREはGeneric Routing Encapsulationのこと。