Routing

當請求由網路上的另一台機器發起時,傳入的數據包未到達 PPP 介面

  • January 24, 2020

假設我有一個由兩台機器組成的“網路”,它們通過乙太網電纜連接。假設機器 M 是“主人”,機器 S 是“奴隸”。我給它們起這樣的名字是因為只有 M 可以訪問外部世界。也就是說,S只有一個網路介面用來連接M。M是Debian,S是Windows。

現在,M 擁有被 S 佔用的 eth0,用於連接無線路由器的 wlan0 和我最近出於可用性原因添加的 ppp0。從技術上講,wlan0 是 wlx…….. 而 eth0 是 enp……,但我正在簡化事情。

首先,什麼工作沒有任何問題?

一切,當M通過wlan0連接時。在這種情況下,S 可以完全訪問 Internet(我在 M 的核心中啟用了轉發)。我可以從外部訪問 M(如果需要,還可以通過 M 訪問 S)等。

但現在,我添加了 ppp0(CDMA 調製解調器)。準確地說,在將其設置為介面之前,我只是設置了 pppd,甚至在我擁有可以使用 ifup/ifdown 控制的“正確”介面之前,我就可以進行 pon/poff。為什麼要設置介面?因為我注意到一個問題,這就是這篇文章的重點。順便說一句,設置一個“正確的”界面並沒有幫助。

問題是什麼?

當 M 的 ppp0 啟動而 wlan0 關閉時,S(是的,S,不是 M)的網際網路訪問出現了奇怪的問題。從表面上看,它似乎沒有任何作用——我無法使用網路瀏覽器,無法 ping 外部主機等。但是接下來,當 ping 外部主機時,我在 M 的 ppp0 上執行了“tcpdump -n icmp”來自 M 和 S - 只是為了發現當 S 發起 ping 時,我可以看到所有傳出的 icmp 數據包,但沒有傳入的數據包!請注意,我說的是面向外部世界的介面——因此,調製解調器上沒有傳入的 icmp 回複數據包!

否則,PPP 將按預期對 M 工作。所有協議。重要的是,當使用 PPP 時,機器會獲得一個正確的全域 IP 地址——我可以從外部 ssh 進入 M 並獲得一個正常的 ssh 會話,而不會出現任何凍結或任何其他問題。但同時,S 被外部主機忽略。

將不勝感激任何建議。

升級版:

‘ip 路由’ 輸出:

1 wlan UP,ppp DOWN

預設通過 192.168.0.1 dev wlan0 onlink

10.42.0.0./24 dev eth0 proto 核心範圍連結 src 10.42.0.1

192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.xx

評論:192.168.0.1 是無線路由器。192.168.0.xx 是 M 的 wlan0 10.42.0.1 是 M 的 eth0

2 wlan DOWN, ppp UP

預設 dev ppp0 範圍連結

10.42.0.0/24 dev eth0 proto 核心範圍連結 src 10.42.0.1

172.17.4.111 dev ppp0 proto 核心範圍連結 src xxx.xxx.xxx.xxx

註釋:xxx.xxx.xxx.xxx 是全域 IP 地址,事實上,它使 M 可以從外部訪問。

ppp0 的“ip addr”:inet xxx.xxx.xxx.xxx peer 172.17.4.111/32 scope global ppp0

您需要一條防火牆規則來將 S 機器隱藏在您的 M 機器公共 IP 地址後面:

iptables -t nat -A POSTROUTING -o ppp+ -j MASQUERADE

如果這對您有用,我將添加一些說明以在 Debian 系統上啟動時載入它。

您在 wlan0 介面上不需要此功能的原因是無線路由器已經為您執行此操作。

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