Openvpn

如何繞過/排除 OpenVPN 客戶端上的埠而不繞過所有傳入流量?

  • January 9, 2019

我事先閱讀了這個答案,它說:

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

這會:

  1. 將 fwmark 2 設置為您的路由表 100
  2. 刷新路由記憶體以避免干擾
  3. 為所有到目標埠 22 (SSH) 的數據包設置標記 2
  4. 將所有從 ethX 發出的數據包 SNAT 到您的公共 IP

我不知道您是否需要所有這些或必須將其轉過來,這取決於您要以哪種方式查看它(除 xxx 外的所有流量都通過 OpenVPN,或者除 xxx 外沒有通過 OpenVPN 的流量)。

例如,您甚至不必使用路由表,但這種方式肯定更乾淨,或者您不需要 SNAT / 偽裝等。

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