NetworkManager-l2tpでL2TP/IPsecを繋ぐときのTips

お久しぶりです。今年初めての更新ですかね?

今回はNetworkManager-l2tpでいい感じにL2TP/IPsecを繋ぐための方法を書いていきたいと思います。

まずNetworkManager-l2tpとは、NetworkManagerから簡単にL2TP/IPsecなVPNを繋ぐためのプラグインです。
ちなみにvtiを使ったナウいトンネルを掘ってくれたりします。
nm-l2tp/NetworkManager-l2tpのGithub

ArchLinuxではAURに有志の方が登録してくれているため簡単にインストールできます。
またインストールするときにはIPsecの機能をサポートするlibreswanも一緒にインストールします。
L2TPをサポートするxl2tpdは依存関係で勝手にインストールされます。

$ yay -S networkmanager-l2tp libreswan
$ sudo systemctl restart NetworkManager

こうするとnm-connection-editorの新規接続の追加にLayer 2 Tunneling Protocol (L2TP)なるものが追加されていると思います。

ここから新しい接続先を追加していきます。
作成をクリックし、次の情報を入力していきます。

  • 接続名 (N) → 接続先名として表示される名前
  • ゲートウェイ (G) → 接続先のホスト名やIPアドレス
  • ユーザー名・パスワード → 言わずもがな

ここまで入力できたらIPsec Settings…を開きます。
ここでIPsecに関する設定を入れていきます。

  • Enable IPsec tunnel to L2TP Host → チェックをつける
  • Pre-shared key → PSK(事前共有キー)を入れる
  • Advanced → 開く
  • Enforce UDP encapsulation → チェックをつける

ここまでで、基本的な設定は終了なのでOKとか保存とかクリックした後、実際に接続してみて無事繋がってくれれば良いのですが、世の中そんな甘くありません。大体こんな通知が出て接続は失敗します。

認証情報入れ間違い以外の主な理由としては、IPsecの細かい設定がサーバ側とクライアント側で一致しておらず、うまく接続できないといったものです。(IPsecトンネルの異ベンダー間接続をしたことがある人なら頭抱えたくなると思う)

なのでその細かい設定とやらを入れていきます。
nm-connection-editorから接続プロファイルを開いて、IPsec Settings…を開きます。
Advancedの中にある項目のPhase1 AlgorithmsとPhase2 Algorithmsを記入していきます。
ちなみにPhase1はIKEのプロポーザルを、Phase2はESPのプロポーザルを設定する欄になります。
NetworkManagerのログを漁って地道に繋がる設定を探していっても良いのですが、そんなちまちましたことはやってらんないので、ここでは大体のサーバに繋がる設定を入れていきたいと思います。
一般的なプロポーザルから脆弱なものを除いたモノを下に置いておくのでコピペして下さい。

Phase1 Algorithms: aes256-sha2_512-modp2048,aes256-sha2_384-modp2048,aes256-sha2_256-modp2048,aes192-sha2_512-modp2048,aes192-sha2_384-modp2048,aes192-sha2_256-modp2048
Phase2 Algorithms: aes256-sha2_512,aes256-sha2_384,aes256-sha2_256,aes192-sha2_512,aes192-sha2_384,aes192-sha2_256,aes128-sha2_512,aes128-sha2_384,aes128-sha2_256

これで接続できると思います。
もしできなかったら、

$ journalctl -xe -u NetworkManager.service

でログを漁るとか

$ sudo /usr/lib/NetworkManager/nm-l2tp-service --debug

を実行しながら接続を開始してデバッグ情報を読むとかしてみて下さい。
よくあるのはRemote IDが未入力で弾かれるとかですかね。
大体の場合は未入力でも繋がるのですが、これが原因で弾かれる場合は 0.0.0.0 やサーバのIPアドレスを入れるなどしてみて下さい。
とりあえずログを漁れば解決策は見えてくるはずです。(Linux使いだったらログを読むのは当たり前だよなぁ?)