日経Linux 2014年3月号の「スマホで自宅のひかり電話から発信する」を見ながら、Rapsberry PiでVPNサーバーを構築してみた。その記事だけでは情報が足りなかったので、ここに補足を書いてみる。
無線LANアダプターとの相性(?)
PLANEXの無線LAN USBアダプターGW-USNano2を使っていたが、何故かこれがVPNでは使えない。接続を試みるとUSBアダプターがハングアップしてしまう。設定の問題かと思ったが、試しに有線に切り替えたらすんなり動くという… 無線LANでの運用はあきらめ。
各設定ファイルについて
紙面に ipsec.conf, xl2tpd.conf, options.l2tpd.lns のサンプルが載っている。これはこのまま使えるようだ。(前述の通り、無線LANで動かない際にネット上の情報を元にいろいろ追加みたが結局不要だった。)
/etc/sysctl.conf に対しては、ipsec verifyでの’FAILED’を消すために各send_redirects, accept_redirectsの設定も必要だった。
net.ipv4.ip_forward=1 net.ipv4.conf.all.send_redirects=0 net.ipv4.conf.all.accept_redirects=0 net.ipv4.conf.default.send_redirects=0 net.ipv4.conf.default.accept_redirects=0 net.ipv4.conf.eth0.send_redirects=0 net.ipv4.conf.eth0.accept_redirects=0 net.ipv4.conf.lo.send_redirects=0 net.ipv4.conf.lo.accept_redirects=0
追加パッケージ
lsofもいるじゃん…
$ sudo apt-get install lsof
ufwに対する設定
ファイアーウォールを有効にしている場合は、Openswan, xl2tpdが使うポートを開ける。
$ sudo ufw allow 4500/udp $ sudo ufw allow 500/udp $ sudo ufw allow 1701/udp $ sudo ufw allow to 192.168.0.3 proto esp
ちなみに、上記192.168.0.3の部分はVPNサーバーになるRapsberry PiのIPアドレスにする。
ルーターの設定
ポートマッピングの設定は、UDP/1701, UDP/4500, UDP/500でOK。「ESPも設定する」という情報もあったが、これは必要なかった。
Android側の設定
外のネットワークから接続テストをするので、Android + b-mobile + Acer S500を使用。VPN profileは
Name | 適当 |
Type | L2TP/IPSec PSK |
Server address | 自宅ネットワークのグローバルIP (無料のDDNSサービスのMyDNSを使うのがオススメ) |
L2TP secret | (空) |
IPSec identifier | (空) |
IPSec pre-shared key | /etc/ipsec.secrets で設定した値 |
接続時に開くダイアログに対しては
Username | /etc/ppp/chap-secrets で設定したユーザー名 |
Password | /etc/ppp/chap-secrets で設定したパスワード |
各種設定ファイル変更の反映
/etc/sysctl.conf に対する変更
sudo sysctl -p
/etc/ipsec.conf に対する変更
sudo /etc/init.d/ipsec restart
/etc/xl2tpd/xl2tpd.conf, /etc/ppp/options.l2tpd.lns に対する変更
sudo /etc/init.d/xl2tpd restart
動作確認
ipsecの状況は下記のように確認できる。 N/A, WARNING, DISABLED があるが問題ないみたい。
/home/pi% sudo ipsec verify Checking your system to see if IPsec got installed and started correctly: Version check and ipsec on-path [OK] Linux Openswan U2.6.37/K3.10.27+ (netkey) Checking for IPsec support in kernel [OK] SAref kernel support [N/A] NETKEY: Testing XFRM related proc values [OK] [OK] [OK] Checking that pluto is running [OK] Pluto listening for IKE on udp 500 [OK] Pluto listening for NAT-T on udp 4500 [OK] Checking for 'ip' command [OK] Checking /bin/sh is not /bin/dash [WARNING] Checking for 'iptables' command [OK] Opportunistic Encryption Support [DISABLED]
下記のようにログファイルを表示し、Android側から接続して反応を見る。何も出力されない場合は、ポートマッピング等のネットワーク設定が間違っていると思われる。このログファイルは /etc/ppp/options.l2tpd.lns 内で指定したもの。(更に左記ファイルは /etc/xl2tpd/xl2tpd.conf で指定されている)
$ tail -f /var/log/xl2tpd.log
syslogにも反応あるはずなので、以下のように見てみるのも手。
$ tail -f /var/log/syslog
無線LANでは動かないという罠にハマって、土日を無駄にしてしまった。はっはっは。