Networking

路由配置通過 VPN 發送一些流量

  • May 9, 2015

我有一個配置了服務的DD-WRT路由器OpenVPN。我只想通過 vpn 連接發送某些源 IP。

我相信我目前的路由表(如圖所示 netstat -rn)通過介面上的 vpn 發送我的所有流量tun1。據我了解,路由表是一個“失敗”表,所以在這種情況下,因為第一個條目是0.0.0.0所有流量都將通過tun1介面。

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.182.1.5      128.0.0.0       UG        0 0          0 tun1
0.0.0.0         10.0.1.1        0.0.0.0         UG        0 0          0 br0
10.0.1.0        0.0.0.0         255.255.255.0   U         0 0          0 br0
10.182.1.1      10.182.1.5      255.255.255.255 UGH       0 0          0 tun1
10.182.1.5      0.0.0.0         255.255.255.255 UH        0 0          0 tun1
46.23.68.178    10.0.1.1        255.255.255.255 UGH       0 0          0 br0
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
128.0.0.0       10.182.1.5      128.0.0.0       UG        0 0          0 tun1
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 br0

我的目標是僅通過網站路由 1 或 2 個網站 - 特別a1505.g2.akamai.net是根據NSLookup映射到以下 IP

  • 地址:195.59.150.43
  • 地址:195.59.150.26

我相信需要的是3個步驟。

1)發出某種iptables命令來刪除第一個路由條目 - 這樣做會停止通過 vpn 發送流量tun1 2)發出兩個命令來告訴目的地195.59.150.43195.59.150.26路由通過tun1

但是,老實說,我發現 iptables 相當令人困惑。

這是正確的方法嗎?如果可以,有人可以給我一兩個範例命令嗎?

謝謝!

我了解路由表是“失敗”表

並不真地。路由表從“最具體的路由”到“最不具體的路由”排序。您的預設路由是 via br0,並且被定義為最後的路由,因為沒有網路遮罩(即genmaskis 0.0.0.0)。

因為第一個條目是 0.0.0.0 所有流量都將通過 tun1 介面

雖然這是正確的結論,但不幸的是這是錯誤的推理。這是您的路由表,以視覺方式排序以表示用於路由的順序(頂部是最佳匹配):

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.182.1.1      10.182.1.5      255.255.255.255 UGH       0 0          0 tun1
10.182.1.5      0.0.0.0         255.255.255.255 UH        0 0          0 tun1
46.23.68.178    10.0.1.1        255.255.255.255 UGH       0 0          0 br0

10.0.1.0        0.0.0.0         255.255.255.0   U         0 0          0 br0

169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 br0

127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo

0.0.0.0         10.182.1.5      128.0.0.0       UG        0 0          0 tun1
128.0.0.0       10.182.1.5      128.0.0.0       UG        0 0          0 tun1

0.0.0.0         10.0.1.1        0.0.0.0         UG        0 0          0 br0

預設路由仍然是 via br0。但是,還有兩個更具體的路由(網路遮罩是128.0.0.0),每個路由都將匹配可用數字 IPv4 地址空間的一半,因此它們將匹配所有非本地流量。


我的目標是僅通過網站路由 1 或 2 個網站 - 特別是 a1505.g2.akamai.net 根據nslookup映射到以下 IP:195.59.150.43195.59.150.26.

我不確定您所說的“網站”是什麼意思;我會假設tun1你想阻止你所有的流量都這樣。

要使用 OpenVPN 執行此操作,您只需route-gateway def1從其配置文件中刪除該指令。(如果您使用的是 NetworkManager 之類的東西,那麼應該有一個選項需要取消勾選,將連接標記為預設路由。)

完成此操作後,您需要做的就是通過網關添加兩條路由,每個主機一條tun1

route add -host 195.59.150.43 gw 10.182.1.5
route add -host 195.59.150.26 gw 10.182.1.5

這些是主機路由,因此網路遮罩是隱式的/32(即255.255.255.255),因此它們優先於所有內容,並且在我的視覺排序表中,三個條目位於列表頂部。

實際上,您也應該能夠在 OpenVPN 配置文件中執行此操作。這將允許使用 VPN 本身自動啟動和刪除路由。根據您的設置,配置可以在伺服器中,路由將被“推送”到客戶端,或者作為客戶端的 OpenVPN 配置文件中的指令:

route 195.59.150.43
route 195.59.150.26

引用自:https://unix.stackexchange.com/questions/202429