NetworkManager で L2TP/IPsec VPN を使えるようにした

Linux

Linux ラップトップからクライアントとして, NetworkManager を使った VPN 接続をできるようにした備忘録です.私の環境は次の通りです.

OS : Gentoo Linux
Kernel : 5.15.52
KDE Plasma : 5.24.5

strongSwan のインストール

Linux 向け IPsec 実装である strongSwan を導入します.まずは strongSwan の公式ドキュメントを参考にカーネルコンフィグをセットします.

Required Kernel Modules :: strongSwan Documentation

カーネルコンフィグのチェックにはドキュメント内にあるシェルスクリプトが便利です.下のスクリプトは現在使用中のカーネルソースのコンフィグから対応する値を出力してくれるようにパスを改変したものです.

#!/bin/sh
grep '\<CONFIG_XFRM_USER\>' /usr/src/linux/.config
grep '\<CONFIG_NET_KEY\>' /usr/src/linux/.config
grep '\<CONFIG_INET\>' /usr/src/linux/.config
grep '\<CONFIG_IP_ADVANCED_ROUTER\>' /usr/src/linux/.config
grep '\<CONFIG_IP_MULTIPLE_TABLES\>' /usr/src/linux/.config
grep '\<CONFIG_INET_AH\>' /usr/src/linux/.config
grep '\<CONFIG_INET_ESP\>' /usr/src/linux/.config
grep '\<CONFIG_INET_IPCOMP\>' /usr/src/linux/.config
grep '\<CONFIG_INET_XFRM_MODE_TRANSPORT\>' /usr/src/linux/.config
grep '\<CONFIG_INET_XFRM_MODE_TUNNEL\>' /usr/src/linux/.config
grep '\<CONFIG_INET_XFRM_MODE_BEET\>' /usr/src/linux/.config
grep '\<CONFIG_IPV6\>' /usr/src/linux/.config
grep '\<CONFIG_INET6_AH\>' /usr/src/linux/.config
grep '\<CONFIG_INET6_ESP\>' /usr/src/linux/.config
grep '\<CONFIG_INET6_IPCOMP\>' /usr/src/linux/.config
grep '\<CONFIG_INET6_XFRM_MODE_TRANSPORT\>' /usr/src/linux/.config
grep '\<CONFIG_INET6_XFRM_MODE_TUNNEL\>' /usr/src/linux/.config
grep '\<CONFIG_INET6_XFRM_MODE_BEET\>' /usr/src/linux/.config
grep '\<CONFIG_IPV6_MULTIPLE_TABLES\>' /usr/src/linux/.config
grep '\<CONFIG_NETFILTER\>' /usr/src/linux/.config
grep '\<CONFIG_NETFILTER_XTABLES\>' /usr/src/linux/.config
grep '\<CONFIG_NETFILTER_XT_MATCH_POLICY\>' /usr/src/linux/.config

コンフィグレーションが終わったらカーネルをビルド,インストール,再起動します.

strongSwan をインストールします.

# emerge net-vpn/strongswan

NetworkManager の VPN サポート

NetworkManager の L2TP プラグインをインストールします.

# emerge net-vpn/networkmanager-l2tp

この段階で VPN に繋いでみたところ,接続に失敗しました.

journalctl でログを見てみるとケーパビリティの削除に失敗していたようです.

$ journalctl -u NetworkManager --since today
...
charon[1462]: 00[LIB] dropping capabilities failed: Operation not permitted
charon[1462]: 00[DMN] capability dropping failed - aborting charon
...

NetworkManager のバウンディングセットに CAP_SETPCAP を追加して,ケーパビリティの継承・削除ができるようにします.

FYI:

732708 – net-vpn/strongswan charon program complains about missing caps (net-misc/networkmanager needs CAP_SETPCAP?)

systemd の NetworkManager.service の設定をオーバライドさせます. /etc/systemd/system/NetworkManager.service.d/override.conf を作成し,次のように編集します.

[Service] 
CapabilityBoundingSet=CAP_SETPCAP

NetworkManager を再起動します.

# systemctl restart NetworkManager

VPN 接続ができるようになりました.

コメント

タイトルとURLをコピーしました