Linux
通過 VPN 進行埠重定向
我想通過 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 介面,因為在連結的另一端聯繫哪個主機沒有歧義。