當請求由網路上的另一台機器發起時,傳入的數據包未到達 PPP 介面
假設我有一個由兩台機器組成的“網路”,它們通過乙太網電纜連接。假設機器 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 介面上不需要此功能的原因是無線路由器已經為您執行此操作。