
我正在嘗試運行 VPN。我希望程式明確請求介面而不是路由所有流量,就像curl --interface
.
curl --interface ppp0 ip.bsd-unix.net
應該透過 VPN 發送,但不知何故,使用tcpdump
或iftop
,我可以看到流量通過 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 感興趣。