Linux

通過 VPN 進行埠重定向

  • December 29, 2011

我想通過 VPN 將我的 tcp 流量重定向到 IRC。

我用 iptables 標記數據包並為此數據包創建一個新路由:

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/tun0/rp_filter

iptables -t mangle -A OUTPUT ! -d 192.168.0.0/16 -p tcp --dport 6667 -j MARK --set-mark 0x42

ip route add default dev tun0 src 10.5.82.5 table VPN
ip rule add fwmark 0x42 table VPN

VPN連接:

# ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
         inet adr:10.5.82.5  P-t-P:10.5.82.6  Masque:255.255.255.255
         UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
         RX packets:2898 errors:0 dropped:0 overruns:0 frame:0
         TX packets:3163 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:100 
         RX bytes:159644 (155.9 KiB)  TX bytes:257601 (251.5 KiB)

數據包被重定向到本地機器上的 tun0(iptables 標記和 ip 規則都可以),但沒有數據包到達 VPN 的 tun0 介面。

你有想法嗎?

提前致謝。

如果您的 IRC 流量源自您創建規則的同一主機,您可能會在傳出數據包上看到“錯誤”源 IP 地址的問題 - 檢查源地址是否為 10.5.82.5 使用tcpdump -i tun0 -v -n. 如果不是,只需附加src 10.5.82.5到您的ip route add命令。

如果流量來自其他地方,請考慮使用 NAT 規則:iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

此外,您的路由應該通過 10.5.82.6(遠端網關 IP 地址),而不是您的本地介面。儘管它應該在任何情況下都可以工作,因為它是一個 PtP 介面,但感覺不太對勁。通過腳本添加路由時,您可以簡單地省略“via”參數並使用dev tun0. 這適用於 PtP 介面,因為在連結的另一端聯繫哪個主機沒有歧義。

引用自:https://serverfault.com/questions/342472