使用 iptables 将流量从接口重定向到 VPN tun 接口

使用 iptables 将流量从接口重定向到 VPN tun 接口

我正在尝试实现一些简单的事情但显然我错过了一些东西。

我的盒子里有一个正在运行的 VPN 客户端,它创建了一个tun0接口。盒子有来自 的外部流量eth0

我想要将流量从 转发eth0tun0。我运行以下命令:

iptables -A FORWARD -i eth0 -o tun0 -s 192.168.100.0/28 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.100.0/28 -o tun0 -j MASQUERADE

请注意,我选择源 IP 范围是因为我只想转发特定范围。

tcpdump在界面上运行,eth0我可以看到来自范围内的机器的流量,192.168.100.0/28但我看不到进入的流量tun0

IP转发自然是开启的。

我不确定我在这里真正缺少什么。

IP 配置为eth0192.168.10.93/24tun010.8.8.15/24

➜  ~ ip r
default via 192.168.10.1 dev eth0  metric 100
10.8.8.0/24 dev tun0 scope link  src 10.8.8.15
172.17.0.0/16 dev docker0 scope link  src 172.17.0.1
172.30.32.0/23 dev hassio scope link  src 172.30.32.1
192.168.10.0/24 dev eth0 scope link  src 192.168.10.93  metric 100

答案1

由于这最终可能是关于从192.168.100.0/28出站流量tun0 ,因此可以通过以下方式解决:

ip rule add from 192.168.100.0/28 lookup 10000
ip route add default via ${tun0gwip} table 10000

另外,请保留所需的 iptables MASQUERADE,除非 tun0 gw 可以路由回您的其他网络。

答案2

这是解决该问题的命令的精确组合:

创建vpn名为

➜  ~ cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0   unspec
#
# local
#
#1  inr.ruhep
1 vpn

然后运行:

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

iptables -A FORWARD -i eth0 -o tun0 -s 192.168.100.0/28 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT

iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT

ip route add default dev tun0 table vpn
ip route add 192.168.100.0/28 dev eth0 table vpn

ip rule add from 192.168.100.0/28 table vpn

相关内容