我有一台 Ubuntu 14.04 機器,它的所有傳出流量都通過 VPN,我需要確保 HTTP 和 HTTPS 流量不會通過 VPN。
我研究過靜態路由,但它似乎只處理第 3 層
。謝謝。
答案1
為了透過不同的預設閘道將發送到特定連接埠的封包路由到您需要使用 iptables 標記這些封包,然後透過不同的路由表路由它們。
因此,首先使用本地網關(而不是 VPN 網關)的預設網關來建立一個新的路由表
ip route add table 4 default via 192.168.0.1
然後根據目的連接埠標記你需要的資料包。
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 4
最後透過新建立的路由表路由那些標記的資料包。
ip rule add fwmark 4 table 4
我還沒有測試上面的命令,所以它們可能需要一些調整。
答案2
一種方法是使用ip rule
和iptables
。一個例子是標記您有興趣路由的流量
iptables -I OUTPUT -m tcp -p tcp -m multiport --dports 80,443 -j MARK --set-mark 0x0001
然後建立一個新的路由表:
echo 101 r_http >> /etc/iproute2/rt_tables
ip route add default via 10.0.0.1 dev eth0 table r_http
ip route flush cache
現在您已經標記了 HTTP 和 HTTPS 流量,您可以建立規則來套用新的路由表
ip rule fwmark 0x0001 table 101
那應該有效。作為讀者的練習,如何使其永久化以及如何創建預設路由:-)
答案3
最近我遇到了和OP類似的情況。感謝@Cha0s 和@Pablo Martinez 提供的答案,我能夠使其適合我的情況。
首先,正如他們所說,我們必須有 iptables 規則來標記那些不應該通過 VPN 的封包。 @Cha0s 將規則放入 mangle 表中是正確的。根據 iptables 手冊頁,您必須使用 mangle table 來執行 -j MARK 目標。
另一方面,@Pablo Martinez 將它們放入 OUTPUT 鏈中是正確的,儘管 iptables 手冊頁說您應該在 PREROUTING 鏈中使用 -j MARK。這些資料包是在本機上產生並發出的。它們不會被 PREROUTING 鏈處理。但 OUTPUT 鏈是有意義的,它也有一個 mangle 表。這是我使用的 iptables 規則:
iptables -t mangle -I OUTPUT -p tcp -m multiport --dports 80,443 -j MARK --set-mark 0x101
然後建立一個新的路由表並向其添加一條路由,如 @Pablo Martinez 所描述:
echo 101 r_http > /etc/iproute2/rt_tables.d/r_http.conf
ip route add table r_http default via 192.168.0.1 dev enp2s0
ip route flush cache
將 192.168.0.1 替換為您的網關或路由器(不是 VPN)的 IP,並將 enp2s0 替換為您的網路介面名稱。您可以使用“ip addr”來檢查介面名稱。
最後,新增一條 ip 規則,讓 iproute2 檢查標記並使用我們的新路由表。
ip rule add fwmark 0x101 table 101
您可以新增一條iptables 規則來記錄那些傳送到連接埠80 和443 的封包。必須是要避免的第一條規則被忽略了。
iptables -I OUTPUT -p tcp -m multiport --dports 80,443 -j LOG --log-prefix "<HTTP/S>" --log-level info
日誌條目應顯示在 /var/log/kern.log 中(在 Debian 系統上)。你可以檢查裡面是否都有MARK=0x101。一旦收集到足夠的條目,請不要忘記刪除日誌記錄規則。
cat /var/log/kern.log | grep '<HTTP/S>' | less
一旦確定封包被正確標記,您可以檢查 iproute2 是否會為標記的封包選擇正確的路由。
ip route get to 8.8.8.8
ip route get to 8.8.8.8 mark 0x101
第一行的結果應該告訴您封包將通過 VPN 閘道和隧道設備。第二行應顯示資料包將通過您自己的網關和網路設備。
參考:
答案4
您可以嘗試將瀏覽器配置為使用代理程式。
- 你可以在DNS中指定代理,但我不熟悉這種技術。 (在 IE 中使用(或不使用)HTTP 代理程式時 DNS 尋找如何運作) - 這也可以透過群組原則來完成 (http://social.technet.microsoft.com/wiki/contents/articles/5156.how-to-force-proxy-settings-via-group-policy.aspx),如果相關瀏覽器遵循 Internet Explorer 中的設置,您可以輕鬆地將其部署到整個網路。
您需要一個 HTTP 代理伺服器才能使其運作(https://stackoverflow.com/questions/1994846/open-source-http-or-https-proxy)
這將使網路瀏覽器流量遠離 VPN,但其他一切都應該沒問題。設定代理伺服器,確保沒有任何流量透過 VPN 路由。