我正在尝试通过新路由器将我的计算机连接到互联网,但它拒绝以我遇到过的最令人困惑的方式工作。
如果我以正常方式连接到 wifi 网络,
Computer --(Wifi)--> Router
然后我可以毫无问题地ping 路由器。但我无法 ping 通 8.8.8.8:
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
不用说,我也无法访问任何其他网站。
如果我改用以太网,
Computer --(Ethernet)--> Router
然后情况与(1)完全相同,表明这不是 wifi 问题。
然后我将另外两部手机连接到路由器,如下所示
Computer --(Wifi)--> Router Phone 1 --(Wifi)--> Router Phone 2 --(Wifi)--> Router
两台手机都可以正常上网,三台设备都可以互相ping通,也可以ping通路由器,但电脑仍然无法上网。
我尝试使用手机作为中介,通过 USB 网络共享连接计算机:
Computer --(USB tethering)--> Phone --(Wifi)--> Router
计算机仍然无法连接到互联网。但请注意,当我将手机切换到移动数据时,
Computer --(USB tethering)--> Phone --(Mobile Data)--> Mobile Network
一切正常,这表明网络共享设置没有问题。
我尝试过的事情
使用其他路由器(过去)。他们都工作过。
我已确保计算机的无线监管域设置正确。
重新启动路由器。
我不被允许重置路由器。
伪造计算机的 MAC 地址。这没有什么区别,除了使用以太网时,现在我什至根本无法连接到路由器。
使用地铁。如果我运行 mtr 8.8.8.8,我得到
Host 1. _gateway 2. 10.12.0.1 3. (waiting for reply)
我认为 10.12.0.1 是路由器的地址。但它永远不会比这更进一步,当然也不会进入 dns.google。
按照 Arch Wiki 上的建议禁用 TCP 窗口缩放。这完全是在黑暗中拍摄的。它也不起作用。
运行 Debian LiveUSB 而不是 Arch Linux。
将 mtu 从 1500 降低到 128。[已添加]
其他有用信息[已添加]
内容
/etc/resolv.conf
:# Generated by NetworkManager nameserver 127.0.0.1 options edns0 trust-ad
内容
NetworkManager.conf
:[main] plugins=keyfile dns=dnsmasq dhcp=internal
通过以太网连接时的系统日志:
概括
无论我做什么,这个路由器似乎都适合我的电脑。不知怎的,当我的电脑隐藏在我的手机后面、带有虚假的 MAC 地址和全新的操作系统时,它甚至能识别出我的电脑。此时,我最好的猜测是,某些硬件识别信息以某种方式进入了 ping 数据包,并且路由器将其列入黑名单。所以,问题是显而易见的:
- 什么可能导致它无法工作?
- 我该如何让它发挥作用?
答案1
感谢 中的讨论聊天,我成功解决了我的问题,也学到了一些东西。
原因
这里发生了两件令人讨厌的事情,两者都与位于我的路由器和互联网之间的网络交换机有关:
计算机 --> 路由器 -->转变--> 互联网
交换机正在阻止 ping 数据包。
这意味着即使我可以连接到互联网,诸如
ping
、traceroute
、tracepath
和 之类的工具也无法工作,因此在这种情况下它们不能用作诊断工具。mtr
显然,一些管理员出于“安全原因”禁用了这些工具,但就我而言,他们最终只是造成了很多混乱。因为我以前从未在野外见过这种情况,甚至听说过这样做,所以我不认为这是一种选择。这里要吸取的教训是,你不能总是指望ping
自己有空。请注意,路由器本身可以很好地处理 ping 数据包。这解释了为什么我可以 ping 通连接到同一路由器的任何其他设备,但不能执行其他操作。
(实际上,这个推理可能有点太天真了。根据 @Cbhihe 的说法聊天,毕竟路由器可能会进行阻塞。我还无法判断,但上面的图片仍然是一个有用的模型来说明问题所在。)
然而,就其本身而言,这并不是问题的原因。它只会挫败对其进行调查的尝试。但鉴于这种转换在一方面是邪恶的,它在其他方面也可能是邪恶的。这让我们...
本地 DHCP 服务器无法与我的 DHCP 客户端正常通信。
每台计算机都需要一个 DHCP 客户端,以便在连接到网络时为其分配一个 IP 地址。我的是 NetworkManager 的内部 dhcp 客户端,如
dhcp=internal
中所证明的NetworkManager.conf
。事实证明,这个 DHCP 客户端非常基础。虽然它在过去一直有效,但它不适用于此 DHCP 服务器。结果是我的电脑上的IP地址信息设置不正确。我不知道具体是什么设置不正确。当然,我的计算机已经收到了有效的 IP 地址,如 所示
ip addr
,否则我无法从手机上 ping 通它。但肯定还有其他问题,因为交换机没有得到安抚,这导致它丢弃我所有的 IP 数据包。注意,环回地址127.0.0.1
/etc/resolv.conf
没有问题。它只是反映了我使用 dnsmasq 进行 DNS 缓存的事实,如dns=dnsmasq
中所证明的那样NetworkManager.conf
。这个想法是 dnsmasq 侦听 127.0.0.1 上的 DNS 请求,检查它们是否在其缓存中,如果不在,则将它们转发到真正的 DNS 服务器。我很久以前就将其作为微优化打开了。真实的 DNS 服务器被设置为一个合理的值,因此看起来 DNS 并不是这里的直接因素。我仍然无法与 DNS 服务器通信来解决任何问题,但这是因为已经提到的问题,而不是因为它设置不正确。
解决方案
问题的根源是我的 DHCP 客户端。我把它换成了功能更强大的dhclient
,一切顺利。我仍然无法 ping 通,但我可以访问互联网,这才是最重要的。
更好的配置
经过更多配置后,我决定将 dnsmasq 替换为较新的 systemd-resolved,并且一切仍然有效。我NetworkManager.conf
现在读的是
[main]
plugins=keyfile
dns=systemd-resolved # Not strictly necessary, but helpful to remind me
dhcp=dhclient
其中,dhclient 不需要设置,而 systemd-resolved 需要设置
systemctl start systemd-resolved
systemctl enable systemd-resolved
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
答案2
确认您的解决方案也适用于我。情况略有不同,但最终问题是 NetworkManager 的 DHCP 客户端。我无法从我的路由器(GoogleWifi/Nest)进行端口转发,因为我的服务器(带有 NetworkManager)不会显示为可供选择的设备。添加了 dhclient,更改了配置以反映新客户端。点击屏幕刷新,繁荣就在那里。