我有 wlan0 和 eth0。 Eth0 连接到互联网,wlan0 是接入点。我使用“--pull-filterignoreredirect-gateway”选项连接到 OpenVPN 服务器,这样它就不会自动通过 VPN 路由所有流量,这不是我想要做的。
我正在尝试将所有流量从 wlan0 (接入点)路由到 tun0。这样,任何连接到我的接入点的客户端都将使用 VPN。我尝试使用 iptables 执行此操作:
iptables -A POSTROUTING -t nat -o wlan0 -j MASQUERADE
iptables -A POSTROUTING -t nat -o tun0 -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o tun0 -j ACCEPT
这不起作用(并且计数器也不会更新)。我尝试用 eth0 替换 tun0,这确实有效(但 ofc 完全绕过了 VPN),所以我假设问题出在 tun0 上。我还在某处读到 IP 路由表更适合于此。如果这是真的,我该怎么办?
答案1
假设您的 wlan 子网为 192.168.1.0/24,tun0 IP 为 10.10.10.99:
在VPN网关上执行以下命令
启用路由(如果尚未启用):
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
删除已有的前两条 NAT 规则,同时保留 FORWARD 规则:
sudo iptables -t nat -L -n --line-numbers
sudo iptables -t nat -D POSTROUTING 1
删除 NAT 规则后,以正确的格式重新添加一条 NAT 规则。
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -o tun0 -j MASQUERADE
最后一步是使用“策略路由”处理路由表:
sudo ip rule add from 192.168.1.0/24 table 99
sudo ip route add 0.0.0.0/0 via 10.10.10.99 dev tun0 table 99