我为 VPN 访问提出的解决方案遇到了一些麻烦。
这就是我想要的:
- 来自 deluge 的所有流量始终通过 VPN
- 当 VPN 断开连接时,deluge 的互联网连接就会被切断
- 当 VPN 断开连接时,我仍然可以通过 SSH 和瘦客户端在本地访问守护程序
- 当 VPN 重新连接时,我希望 deluge 重新建立连接。
这是我目前拥有的 iptables:
sudo iptables -A OUTPUT -m owner --gid-owner pi -o lo -j ACCEPT
sudo iptables -A OUTPUT -m owner --gid-owner pi -d 10.0.0.0/16 \! -o tun0 -j ACCEPT
sudo iptables -A OUTPUT -m owner --gid-owner pi \! -o tun0 -j REJECT
这有点有效。它确实存在一些问题:
- VPN 断开连接后,由于我的第二条规则,它无法重新连接(我假设)
经过一番研究,iptables 中似乎没有基于进程/应用程序应用规则的功能,只能通过 gid 或 uid 来应用规则。那是对的吗?
那么我的想法是否正确,唯一的解决方案是以不同的用户身份运行 deluged,然后在 iptable 规则中定位该特定用户?这样 VPN(当前由与 deluged 相同的用户运行)可以重新连接。
附言。对我当前的 iptables 进行审核将不胜感激!
谢谢大家,我很感谢帮助!
答案1
您的 Netfilter 规则的顺序错误:第三个规则永远不会被命中,因为它是第二个规则的特殊情况。
openvpn
正常情况下,由于需要超级用户权限来设置接口和路由,所以发送的数据包属于root。因此,特定于用户的规则不应匹配。
您可以用于tcpdump
检查新 OpenVPN 连接的数据包是否离开您的系统。如果没有,那么您可以使用 Netfilter 目标 TRACE 来查看它们发生了什么。