MinaTech

innocent at every scene

Rapsberry PiをVPNサーバーにする

日経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では動かないという罠にハマって、土日を無駄にしてしまった。はっはっは。

コメントを残す

メールアドレスが公開されることはありません。

*