Openvpn
如何繞過/排除 OpenVPN 客戶端上的埠而不繞過所有傳入流量?
我事先閱讀了這個答案,它說:
ip rule add from x.x.x.x table 100 ip route add table 100 to y.y.y.y/y dev ethX ip route add table 100 default via z.z.z.z
問題是,這將適用於所有埠,然後我可以使用 iptables 來刪除某些連接,但這不是我想要的。
我希望 OpenVPN…
- 排除一些埠,如 SSH、TeamViewer 等。
- 隧道所有其他埠,而不是丟棄它們。
客戶端是 Mac Mini。如果需要,我可以更改伺服器配置。
這可以使用 iptables mangle 來實現。您的路由表很好,您只需添加一些規則來排除/包含特定流量。
在您的情況下,SSH 將是這樣的:
ip rule add fwmark 2 table 100 ip route flush cache iptables -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark 2 iptables -t nat -A POSTROUTING -o ethX -j SNAT --to-source z.z.z.z ^ ^ your public interface your public IP
這會:
- 將 fwmark 2 設置為您的路由表 100
- 刷新路由記憶體以避免干擾
- 為所有到目標埠 22 (SSH) 的數據包設置標記 2
- 將所有從 ethX 發出的數據包 SNAT 到您的公共 IP
我不知道您是否需要所有這些或必須將其轉過來,這取決於您要以哪種方式查看它(除 xxx 外的所有流量都通過 OpenVPN,或者除 xxx 外沒有通過 OpenVPN 的流量)。
例如,您甚至不必使用路由表,但這種方式肯定更乾淨,或者您不需要 SNAT / 偽裝等。