自宅のネットワークにアクセスできるようにIPSec/L2TPのVPNサーバーを使っていた。strongswanとxl2tpdを利用している。
Debian JessieだったかStretchで使っていた設定ファイルをArch Linux ARMにそのまま移した。最新版では使えなくなった設定があるのでsudo journalctl -fで出てくるエラーをつぶして、サービスが動くようにした。
しかし、パケットが通らない。サーバーからpingを打っても、Destination Host Unreachableだった。
LANのip address rangeが192.168.0.0/24で、xl2tpdのip range = 192.168.0.200-192.168.0.220 から 192.168.2.200-192.168.2.220 sudo iptables に変えた。(local ipも合わせる)そして、sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
でNAT通すようにしたら、LANにアクセスできるようになった。
しかし、昔の設定が使えないのは謎なので、さらに調べていたら、どうもルーティングテーブルがおかしい。ip rangeを192.168.0.0/24にしている状態で、VPN接続を行う。そして、ip route get 192.168.0.200を実行すると
$ ip route get 192.168.0.200 192.168.0.200 dev eth0 table 220 src 192.168.0.25 uid 1001 cache
このようになる。
なんかよくわからないtable 220にppp0ではなくeth0経由で通信しようするように設定されている。とりあえず、ip route flush table 220(違ったかも)でルーティングテーブルのこのエントリを消すことで正しくVPNで接続したiPhoneにpingが通るようになった。
https://wiki.strongswan.org/issues/248
If I let charon (and not updown.sh) install the routes (install_routes=yes), this is what happens (10.32.32.200 is the ‘other side’):
とあるので、install_routesというキーワードをヒントに検索したら、次のような設定があることが判明した。
https://wiki.strongswan.org/projects/strongswan/wiki/StrongswanConf
charon.install_routes | yes | Install routes into a separate routing table for established IPsec tunnels. If disabled a more efficient lookup for source and next-hop addresses is used since 5.5.2. |
デフォルトではyesになっているのをnoに変更したら直った。設定ファイルは /etc/strongswan.d/charon.confにあった。
これで、なんとか使えるようになった。