iptables:无需 VPN 即可访问单个目标主机

iptables:无需 VPN 即可访问单个目标主机

我有一台eth0连接到互联网的设备,一个通过 运行的 VPN tun0eth0并且所有连接到 的设备的所有流量wlan0都通过 进行路由tun0

适用于:

# echo "Main"; sudo iptables -S; echo "NAT"; sudo iptables -t nat -S
Main
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o tun0 -j ACCEPT
NAT
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o tun0 -j MASQUERADE 

我现在想做的是将流量路由到 VPN 之外的一个外部地址。例如:

wlan0 -> A.B.C.D -> eth0
wlan0 -> ALL OTHER HOSTS -> tun0

我该如何做这件事?

答案1

Iptables(Netfilter)不管理路由,它管理过滤或改变数据包。

您需要修改您的内核路由表。

如果 VPN 已启动,则会添加一条默认路由tun0,所以解决方案是添加另一个静态路由A B C D

答案2

最终答案是:

sudo ip route add A.B.C.D dev eth0
sudo ip route add default via A.B.C.D dev eth0 table 3
sudo ip rule add fwmark 0x1 table 3
sudo iptables -A OUTPUT -t mangle -o tun0 -d A.B.C.D -j MARK --set-mark 1
sudo iptables -A POSTROUTING -t nat -o eth0 -d A.B.C.D -j SNAT --to <IP_OF_ETH0>
sudo ip route flush cache

这将创建路线,生成一个标记表,并设置标记的流量以便路由回来。

相关内容