防止 OpenVPN systemd 服务在家中启动

防止 OpenVPN systemd 服务在家中启动

在我的笔记本电脑中,我设置了一个 systemd 服务,建立到我家的 OpenVPN 连接,并让它在启动时自动启动,这样我就可以在任何地方访问我的家庭服务器。

问题是,当我回到家时,它仍然连接到 VPN,并混淆笔记本电脑的路由表,因此我在家时无法访问服务器。

有什么办法吗,我可以让 systemd 服务有条件地启动?

谢谢!

答案1

我不是网络专家,但我认为如果您在家中使用以太网并在其他地方使用 WiFi,则可以做到这一点。在这种情况下,您应该能够通过 VPN 连接路由 WiFi 接口。

答案2

我在这里发布我的解决方案,也许它可以帮助某些人。

我写了一个脚本,会尝试查询我家路由器的 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

相关内容