当网络上的另一台计算机发出请求时,传入数据包未到达 PPP 接口

当网络上的另一台计算机发出请求时,传入数据包未到达 PPP 接口

假设我有一个由两台机器组成的“网络”,通过以太网电缆连接。假设机器 M 是“主机”,机器 S 是“从机”。我给它们起这样的名字是因为只有 M 可以访问外部世界。换句话说,S只有一个网络接口用于连接M。M是Debian,S是Windows。

现在,M 拥有由 S 占用的 eth0、用于连接无线路由器的 wlan0 和我最近出于可用性原因添加的 ppp0。从技术上讲,wlan0是wlx........,eth0是enp......,但我正在简化事情。

首先,什么是没有问题的?

一切,当M通过wlan0连接时。在这种情况下,S 具有完全的互联网访问权限(我在 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 数据包!请注意,我正在谈论面向外界的接口 - 因此,调制解调器上没有传入的 icmp 回复数据包!

否则,PPP 将按照 M.All 协议的预期工作。重要的是,在 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 原型内核范围链接 src 10.42.0.1

192.168.0.0/24 dev wlan0 原型内核范围链接 src 192.168.0.xx

注释:192.168.0.1是无线路由器。 192.168.0.xx是M的wlan0 10.42.0.1是M的eth0

2 wlan 下行,ppp 上行

默认 dev ppp0 范围链接

10.42.0.0/24 dev eth0 原型内核范围链接 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 地址”:inet xxx.xxx.xxx.xxx 对等点 172.17.4.111/32 范围全局 ppp0

答案1

您需要一条防火墙规则来将 S 机器隐藏在 M 机器公共 IP 地址后面:

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

如果这对您有用,我将添加一些说明以在 Debian 系统上启动时加载它。

您在 wlan0 接口上不需要此操作的原因是因为无线路由器已经为您执行此操作。

相关内容