Ubuntu

防止 OpenVPN systemd 服務在家中啟動

  • December 25, 2021

在我的筆記型電腦中,我設置了一個與我家建立 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 介面。

引用自:https://serverfault.com/questions/1081024