经过多次搜索,我能够使用以下命令将大量网络流量限制到仅 VPN 接口 tun0:
sudo iptables -A OUTPUT -m owner --uid-owner deluge \! -o tun0 -j REJECT
但现在我无法通过端口 8112 上的 eth0 访问 WebUI(即 192.168.0.23:8112)
我可以使用另一个 iptables 规则来提供对本地网络上的 WebUI 的访问吗?
答案1
这将强制 deluge 仅使用 vpn 隧道,但本地子网除外。
iptables -A OUTPUT -m owner --uid-owner deluge ! -d 192.168.1.0/24 \! -o tun0 -j REJECT
其逻辑是,它会阻止所有非 VPN 隧道的输出,但本地子网除外。
确保验证 deluge 使用的用户。并调整子网以匹配您的子网。还要在 ifconfig 中验证您的隧道名称,在我的示例中为 tun0
答案2
另一种方法是仅允许 VPN 连接和 Web 界面通过 eth0,并阻止其他所有内容:
-A INPUT -s my.vpn.net -i eth0 -p udp -m udp --sport 1194 -j ACCEPT
-A INPUT -s my.local.ip -i eth0 -p udp -m udp --sport 8112 -j ACCEPT
-A INPUT ! -i tun0 -j DROP
-A OUTPUT -d my.vpn.net -o eth0 -p udp -m udp --dport 1194 -j ACCEPT
-A OUTPUT -d my.local.ip -i eth0 -p udp -m udp --sport 8112 -j ACCEPT
-A OUTPUT ! -o tun0 -j DROP
答案3
使用容器(LXC/LXD/Docker):
如果您在主机上启动 wireguard 接口,然后将该接口添加到运行 deluge 的容器中作为唯一接口,则访问仅限于 wireguard 接口。
您可以添加一个代理设备,该设备绑定到容器内 localhost 上的 webui 端口并监听主机上的任何地址。
不需要 iptables。