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 接続ができるようになりました.
コメント