systemctl에서 실행할 때 openvpn 라우팅 스크립트가 실패함

systemctl에서 실행할 때 openvpn 라우팅 스크립트가 실패함

VPN을 통해 실행해야 하고 Arch Linux에서 VPN에 연결되지 않은 경우 인터넷에 액세스할 수 없는 프로그램 세트가 있습니다. 이를 위해 인터넷에 액세스하는 유일한 방법으로 VPN 네트워크 인터페이스를 포함하는 네트워크 네임스페이스를 만들고 해당 네트워크 네임스페이스에서 이러한 프로세스를 실행합니다.

내가 직면한 문제는 openvpn루트로 실행하면 제대로 작동 하지만 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

아마도 이것은 다른 사람에게 도움이 될 것입니다. 더 많은 정보를 확인하실 수 있습니다여기.

답변2

저도 최근에 이 문제에 직면했는데 그 결과는 selinux. 다음 단계를 수행하여 완화할 수 있습니다.

cd /etc/openvpn
mkdir -p scripts
chown -R root:root scripts
chmod 0700 scripts
cd scripts
# create up and down scripts here
# placing scripts in this directory is important!!
# restorecon must be run 
restorecon -R /etc/openvpn/scripts/
setsebool openvpn_run_unconfined on

간단히 말해서, selinux에는 /etc/openvpn/scripts에 배치하기만 하면 up 및 down 스크립트를 실행할 수 있는 사전 설치된 구성이 있습니다. 스크립트가 이 디렉토리에 배치되면, Restorecon을 실행하면 스크립트에 올바른 selinux 플래그가 설정되어 있는지 확인하고 sebool을 on으로 설정하면 up 및 down 스크립트가 모두 실행될 수 있습니다.

관련 정보