표적
VPN 사용을 위해 네트워크 네임스페이스에서 서비스(전송 데몬)를 실행하려고 합니다. 서비스는 systemd를 사용하여 자동으로 시작되어야 합니다.
구현 세부정보
나는 사용하고있다네임스페이스-openvpn네트워크 네임스페이스를 만듭니다. 이를 위해 systemd 단위 파일 /lib/systemd/system/namespaced-openvpn.service를 만들었습니다.
[Unit]
Description=Namespaced OpenVPN
After=network.target
[Service]
User=root
Type=notify
ExecStart=/usr/local/sbin/namespaced-openvpn --config /etc/openvpn/myconfig.conf
ExecStop=/bin/kill -s STOP $MAINPID
ExecReload=/bin/kill -s HUP $MAINPID
[Install]
WantedBy=multi-user.target
이는 예상대로 작동합니다. 서비스를 시작한 후 다음을 사용하여 네트워크 네임스페이스에서 셸을 열 수 있습니다.
sudo ip netns exec protected sudo -u myuser -i
이 셸에서 Transmission-daemon을 실행해도 작동합니다.
이 프로세스를 자동화하기 위해 단위 파일 /lib/systemd/system/transmission-daemon-vpn.service를 만들었습니다.
[Unit]
Description=Transmission BitTorrent Daemon in VPN Tunnel
After=namespaced-openvpn.service
[Service]
User=root
Type=notify
ExecStart=ip netns exec protected /usr/bin/sudo -u myuser /usr/bin/transmission-daemon -f --log-error
#ExecStart=/usr/bin/transmission-daemon -f --log-error
ExecStop=/bin/kill -s STOP $MAINPID
ExecReload=/bin/kill -s HUP $MAINPID
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
주석 처리된 줄을 사용하면 ExecStart
작동하지만 물론 VPN을 사용하지 않아도 됩니다. 생략 /usr/bin/sudo -u myuser
해도 작동하지만 특정 사용자로 실행하려면 데몬이 필요합니다.
질문
다음 오류로 인해 Transmission-daemon-vpn 시작이 실패합니다.
Job for transmission-daemon-vpn.service failed because a timeout was exceeded.
See "systemctl status transmission-daemon-vpn.service" and "journalctl -xe" for details.
# systemctl status transmission-daemon-vpn.service
● transmission-daemon-vpn.service - Transmission BitTorrent Daemon in VPN Tunnel
Loaded: loaded (/lib/systemd/system/transmission-daemon-vpn.service; disabled; vendor preset: enabled)
Active: failed (Result: timeout) since Wed 2023-01-04 16:13:16 CET; 7min ago
Process: 8116 ExecStart=ip netns exec protected /usr/bin/sudo -u myuser /usr/bin/transmission-daemon -f --log-error (code=exited, status=0/SUCCESS)
Main PID: 8116 (code=exited, status=0/SUCCESS)
CPU: 6.936s
Jan 04 16:11:42 nas systemd[1]: Starting Transmission BitTorrent Daemon in VPN Tunnel...
Jan 04 16:11:42 nas sudo[8116]: root : PWD=/ ; USER=myuser ; COMMAND=/usr/bin/transmission-daemon -f --log-error
Jan 04 16:11:42 nas sudo[8116]: pam_unix(sudo:session): session opened for user myuser(uid=1000) by (uid=0)
Jan 04 16:13:12 nas systemd[1]: transmission-daemon-vpn.service: start operation timed out. Terminating.
Jan 04 16:13:16 nas ip[8117]: Closing transmission session... done.
Jan 04 16:13:16 nas sudo[8116]: pam_unix(sudo:session): session closed for user myuser
Jan 04 16:13:16 nas systemd[1]: transmission-daemon-vpn.service: Failed with result 'timeout'.
Jan 04 16:13:16 nas systemd[1]: Failed to start Transmission BitTorrent Daemon in VPN Tunnel.
Jan 04 16:13:16 nas systemd[1]: transmission-daemon-vpn.service: Consumed 6.936s CPU time.
답변1
권리를 주신 Tom Yan에게 감사드립니다.힌트, 즉, 사용NetworkNamespacePath=
. 이제
다음과 같습니다 /lib/systemd/system/transmission-daemon-vpn.service
.
[Unit]
Description=Transmission BitTorrent Daemon in VPN Tunnel
After=namespaced-openvpn.service
[Service]
User=myuser
Type=notify
NetworkNamespacePath=/var/run/netns/protected
ExecStart=/usr/bin/transmission-daemon -f --log-error
ExecStop=/bin/kill -s STOP $MAINPID
ExecReload=/bin/kill -s HUP $MAINPID
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target