Ubuntu
防止 OpenVPN systemd 服務在家中啟動
在我的筆記型電腦中,我設置了一個與我家建立 OpenVPN 連接的 systemd 服務,並讓它在啟動時自動啟動,這樣我就可以在任何地方訪問我的家庭伺服器。
問題是我已經在家的時候,它仍然連接到VPN,並且筆記型電腦的路由表混亂,因此我在家時無法訪問伺服器。
有沒有辦法讓systemd服務有條件地啟動?
謝謝!
我在這裡發布我的解決方案,也許它可以幫助某人。
我編寫了一個腳本,它會嘗試查詢我家路由器的 MAC 地址,如果成功(意味著我在家),則停止連接 VPN。然後修改systemd服務文件(vpn-to-home.service),增加一行
ExecStartPre=/usr/local/bin/stop-if-lan.sh
。腳本 stop-if-lan.sh:
#!/bin/bash /usr/bin/ping -4n -c 1 -q -W 1 IP_OF_ROUTER > /dev/null MAC_ADDRESS=`arp -n | awk '/IP_OF_ROUTER/{print $3;exit}'` if [ "$MAC_ADDRESS" == "MAC_OF_ROUTER" ] ; then # echo "We are already at home." exit 1 fi exit 0
systemd 的 vpn-to-home.service:
[Unit] Requisite=network-online.target After=syslog.target network-online.target [Service] Type=idle RuntimeDirectory=openvpn-client WorkingDirectory=/run/openvpn-client PrivateTmp=true CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE ExecStartPre=/usr/local/bin/check-if-lan.sh ExecStart=/usr/sbin/openvpn --config /etc/openvpn/client/client-to-home.ovpn LimitNPROC=10 DeviceAllow=/dev/null rw DeviceAllow=/dev/net/tun rw ProtectSystem=true ProtectHome=true KillMode=process [Install] WantedBy=multi-user.target
我不是網路專家,但我認為如果您在家中使用乙太網並在其他地方使用 WiFi,則可以做到這一點。在這種情況下,您應該能夠通過 VPN 連接路由您的 WiFi 介面。