無法透過 VPN 進行 ip 路由

無法透過 VPN 進行 ip 路由

我正在嘗試運行 VPN。我希望程式明確請求介面而不是路由所有流量,就像curl --interface.

curl --interface ppp0 ip.bsd-unix.net應該透過 VPN 發送,但不知何故,使用tcpdumpiftop我可以看到流量通過 eth0,即使來源 IP 是 10.10.1.2。這是我的ip route show

default via 149.x.y.z dev eth0
10.10.1.1 dev ppp0  proto kernel  scope link  src 10.10.1.2
149.x.y.128/25 dev eth0  proto kernel  scope link  src 149.x.y.172

一些IP被隱藏。第二個是 xl2tp 在啟動並建立 ppp0 介面時所新增的。 149.etc 是我的 LAN,10.etc 是我的 VPN。


另外,當我 時ping -I ppp0 8.8.8.8,我可以看到 ppp0 活動,並且我收到的回應具有更高的毫秒數,這表明他們正在通過 VPN。

答案1

我有點假設,如果封包的來源 IP 與介面的來源 IP 匹配,它將使用該介面。如果這不是固有的 IP 行為,那麼我的第二個路由就會實現這種情況:src該路由的一部分對我來說是一個轉移注意力的事情。

那麼,我的程式綁定到 ppp0 位址,這設定了它們的來源 IP,對嗎?我按照@davidgo所說做了一個單獨的路由表...

echo 200 custom | sudo tee -a /etc/iproute2/rt_tables

....然後新增一條規則以對具有該來源 IP 的資料包使用自訂表...

sudo ip rule add from 10.10.1.2 lookup custom

....並在自訂表中新增了一條規則,以將 ppp0 用於透過 ppp0 網關獲得​​的任何流量。

sudo ip route add default via 10.10.1.1 dev ppp0 table custom

curl ip.bsd-unix.net給我我的家庭 IP 並curl --interface ppp0 ip.bsd-unix.net給我我的 VPN 的遠端 IP。有用!

儘管如此,我還是對為什麼 ping 一直正確地通過 ppp0 感興趣。

相關內容