2020年9月6日日曜日

Gentoo LinuxでL2TP/IPsecを使う方法

Gentoo LinuxでVPNを繋ぐときにちょっとハマったので、忘れないようにメモ。

以前(一年以上前)からこの問題には気づいていたのですが、それまではGentooでVPN接続をする切実な理由が特になかったので放置していました。

要するに今は切実な理由があるということです。

3行で

よくわかる解説

まず、network-manager-l2tpのUSEフラグにgnomeを設定しておかないとIPsecやPPPの設定画面が出てきません。あと現時点ではamd64x86もstable状態ではないので、使うならpackage.accept-keywordsにも指定が必要です。
# package.use
net-vpn/networkmanager-l2tp gnome
# package.accept-keywords
net-vpn/networkmanager-l2tp

しかし、上記の設定を入れてもそのままでは接続に失敗しました。

journalctl -u NetworkManagerでログを確認したところ、以下のエラーが出てIPsec接続ができていませんでした。

g_dbus_method_invocation_take_error: assertion 'error != NULL' failed

このエラーメッセージで検索したら、strongswanではなくlibreswanを使えとのこと。

そこで、一旦network-manager-l2tpと、それが依存しているstrongswanをアンインストール。

emerge -c net-vpn/networkmanager-l2tp net-vpn/strongswan

次にlibreswanに入れ替えて再インストール。

emerge net-vpn/libreswan net-vpn/networkmanager-l2tp

それでも接続できませんでした。今度はjournalctl -xeでログを確認したら、以下のようなメッセージが出ていました。

ABORT: ASSERTION FAILED: test_gcm_vectors(&ike_alg_encrypt_aes_gcm_16, aes_gcm_tests) (in test_ike_alg() at ike_alg_test.c:41)
またエラーメッセージで検索したら、libreswanは、依存ライブラリ(nss)のバージョンが新しいと互換性の問題でIPsecが動かないという内容を見つけました。

そしてこの記事中に解決方法も書いてありました。以下のコードを入れたら動くとのこと。
#define NSS_PKCS11_2_0_COMPAT 1

よっしゃ、いっちょパッチを作ってGentooチームに送ってやろう・・・と思ったら、すでに3.32-r1でこのパッチが入っていました

ただし、現時点では3.32-r1はまだstableではないので、network-manager-l2tpと同様にpackage.accept-keywordsの指定が必要です。

# package.accept-keywords
net-vpn/networkmanager-l2tp
=net-vpn/libreswan-3.32-r1

最新版のソースにはすでに上記のパッチが入っている(正確には順序が逆で、最新版に含まれている上記の定義をGentooチームが3.32-r1でパッチとしてバックポートしたというのが正解)ので、3.33以降ではパッチなしで普通に使えるようになるでしょう。

これで、libreswanを更新したらVPN接続できるようになりました。

0 件のコメント:

コメントを投稿