systemctlで実行するとopenvpnルーティングスクリプトが失敗する

systemctlで実行するとopenvpnルーティングスクリプトが失敗する

VPNを介して実行する必要があり、Arch LinuxがVPNに接続していない場合、インターネットにアクセスできないプログラムのセットがあります。これを行うには、インターネットにアクセスする唯一の方法として、VPNネットワークインターフェイスを含むネットワーク名前空間を作成し、そのネットワーク名前空間でこれらのプロセスを実行します。

私が直面している問題は、openvpnrootとして実行すると正常に動作しますがsystemctl

OpenVPN設定:

client
route-noexec
script-security 2
dev tun42
proto udp
remote <remotehost> <remoteport>
resolv-retry infinite
nobind
persist-key
persist-tun
ca /etc/openvpn/client/ca.crt
tls-client
remote-cert-tls server
auth-user-pass /etc/openvpn/client/vpn-creds
comp-lzo
verb 1
reneg-sec 0
crl-verify /etc/openvpn/client/crl.pem
route-up /etc/openvpn/client/route-up.sh

ルートアップ.sh:

#!/bin/bash
/bin/whoami

NS=ns

if [ ! -f /var/run/netns/$NS ]; then
    /sbin/ip netns add $NS
fi

/sbin/ip link set $dev netns $NS
/sbin/ip netns exec $NS /sbin/ifconfig lo up
/sbin/ip netns exec $NS /sbin/ifconfig $dev $ifconfig_local pointopoint $ifconfig_remote up
/sbin/ip netns exec $NS /sbin/route add default gw $ifconfig_remote metric 1024

systemctl status openvpn-clien@vpn試した後の出力start

Feb 18 11:57:22 arch openvpn[5216]: root
Feb 18 11:57:22 arch openvpn[5216]: mount --make-shared /var/run/netns failed: Operation not permitted
Feb 18 11:57:22 arch openvpn[5216]: Error: argument "ns" is wrong: Invalid "netns" value
Feb 18 11:57:22 arch openvpn[5216]: Cannot open network namespace "ns": No such file or directory
Feb 18 11:57:22 arch openvpn[5216]: Cannot open network namespace "ns": No such file or directory
Feb 18 11:57:22 arch openvpn[5216]: Cannot open network namespace "ns": No such file or directory
Feb 18 11:57:22 arch openvpn[5216]: WARNING: Failed running command (--route-up): external program exited with error status: 1
Feb 18 11:57:22 arch openvpn[5216]: Initialization Sequence Completed

手動で実行するかシステム起動時に自動的に実行するか(サービスを有効にした場合)、同じ動作を示します。

systemctl cat [email protected]出力:

# /usr/lib/systemd/system/[email protected]
[Unit]
Description=OpenVPN tunnel for %I
After=syslog.target network-online.target
Wants=network-online.target
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO

[Service]
Type=notify
PrivateTmp=true
WorkingDirectory=/etc/openvpn/client
ExecStart=/usr/bin/openvpn --suppress-timestamps --nobind --config %i.conf
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
ProtectSystem=true
ProtectHome=true
KillMode=process

[Install]
WantedBy=multi-user.target

実行時にネットワークネームスペースを正しく設定するにはどうすればよいですかsystemctl

ベストアンサー1

この問題が見つかるまで、ssh up / downスクリプト(selinuxを使用しない)と同様の問題がありました。

この質問は古いですが、サービス定義で次のサンドボックスオプションを変更して解決しました。

ProtectSystem=true
#ProtectHome=true
ProtectHome=read-only

おそらく、これは他の人に役立ちます。より多くの情報を見ることができますここ

おすすめ記事