LinuxでVPN接続

LinuxをVPNクライアントにするのはやたらと面倒くさいことで有名【要出典】ですが、また延々と接続できずに困っていたのでどうやって解決したかメモ。

今回のセットアップ

サーバー側は光でんわのONU。VPNはipsec/l2tp。クライアント側はubuntu 20.04。strongSwan とxl2tpdといういつもの構成。まあubuntuだしねと思ってNetworkManagerとそのl2tp pluginを使ったため分かりづらいトラブルになった。

結論

端的に言うと、xl2tpdがマシンブート時に起動しないようにしないといけない。具体的には

sudo systemctl disable xl2tpd.service

しておく必要がある。起動していたらstopすること。

原因とどうやって見つけたか

GUIだから小学生でもできるでしょ、と思っておもむろに設定してみるが、とにかくチェックボックスとかをどういじってもつながらない。どうやらxl2tpdがfailしているようなので、xl2tpdの設定が行けないのかしらとかそもそもipsecがうまく接続できてない?とか悩む。ログには何かのエラーが出ているがsudo ipsec statusするとつながっているというのでipsecはつながっているらしい。うーん?

と、こんな感じでしばらくこの状態で諦めていたのだが、一念発起してwiresharkでモニタしてみる。するとポート500, 4500番での通信はサーバ側からも返事が返ってきているのでまあなんかうまく行ってるっぽい。ということでおそらくstrongSwanはうまく行っている。じゃあl2tpは?と思ってモニタを見ると、1701番の通信でサーバ側から一切返事が返ってきていない。うーん、何がおかしいんだろう。

…。ん?!1701番?なんでwiresharkでUDP1701番の通信が見えるんだ?!…はい。そういうことです。l2tpの通信がipsec tunnelを通っていなかったようです。そりゃ返事も返ってこないね。(ipsecはUDP/TCPよりも上位のレイヤなので、そもそもポートとかそういう話は存在しない)

なんでか、というのは実のところうまく理解していない。現象論的にはxl2tpdをstopするとうまくいったので、ipsec connectionが張られるまえにxl2tpdが起動しているとうまく行かない、ということは確かなよう。ipsecコネクションを貼る前から生きている・connect(2)を呼んだプロセスはipsecコネクションの上に乗れない?まあ実際それが問題になるケースは少なさそうなので、普通はそれでよいということかもしれない。

その他

おかげさまでN○Kはネットで見られるようになりました。プ○イム○デオはfxとchromeのincognito windowでのみ見られました。cookie消しても非incognitoだと見られないのなぜ…?まあ素直にfxで見ればいいんですが。

Comments

comments powered by Disqus