目标:确保所有网络接口(wlan0、rmnet0、rmnet1)的所有流量都强制通过 VPN 隧道,也就是说所有流量都是已丢弃未连接到 VPN 时。换句话说,不应允许 Internet 流量,而只接受通过 VPN 的流量。
到目前为止... Android 设备带有 iptables 二进制文件、wlan 和 3g 连接 VPN 网关@10.10.10.10(不是真实地址)。
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i tun0 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o tun0 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -d 10.10.10.10 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -j DROP
结果:
流量似乎被阻止了 - 但 VPN 连接也被阻止了。
有什么想法吗?感谢这只是移动数据 rmnet0 接口,这里还没有 WiFi。
答案1
在这种情况下,我不会使用 conntrack,而是使用更简单的设置
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A INPUT -s 10.10.10.10 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT
iptables -A OUTPUT -d 10.10.10.10 -j ACCEPT
无需任何连接跟踪。DROP
顺便说一句,您也不需要最后的规则,它-P ... DROP
会处理好这些。
您还需要确保在配置中使用 VPN 服务器的 IP,否则,您还必须将 DNS 列入白名单:
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT