使用 iptables 將流量從介面重新導向到 VPN tun 介面

使用 iptables 將流量從介面重新導向到 VPN tun 介面

我試圖實現一些簡單的事情,但顯然我錯過了一些東西。

在我的盒子裡,我有一個正在運行的 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轉送自然就開啟了。

我不確定我在這裡真正缺少什麼。

eth0is的IP配置192.168.10.93/24同時tun010.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

相關內容