我正在尝试实现一些简单的事情但显然我错过了一些东西。
我的盒子里有一个正在运行的 VPN 客户端,它创建了一个tun0
接口。盒子有来自 的外部流量eth0
。
我想要将流量从 转发eth0
到tun0
。我运行以下命令:
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 配置为eth0
而192.168.10.93/24
是tun0
10.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