路由器阻止一台特定设备

路由器阻止一台特定设备

我正在尝试通过新路由器将我的计算机连接到互联网,但它拒绝以我遇到过的最令人困惑的方式工作。

  1. 如果我以正常方式连接到 wifi 网络,

    Computer --(Wifi)--> Router
    

    然后我可以毫无问题地ping 路由器。但我无法 ping 通 8.8.8.8:

    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
    

    不用说,我也无法访问任何其他网站。

  2. 如果我改用以太网,

    Computer --(Ethernet)--> Router
    

    然后情况与(1)完全相同,表明这不是 wifi 问题。

  3. 然后我将另外两部手机连接到路由器,如下所示

    Computer --(Wifi)--> Router
    Phone 1  --(Wifi)--> Router
    Phone 2  --(Wifi)--> Router
    

    两台手机都可以正常上网,三台设备都可以互相ping通,也可以ping通路由器,但电脑仍然无法上网。

  4. 我尝试使用手机作为中介,通过 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
    
  • 通过以太网连接时的系统日志:

    https://pastebin.com/rAQqjvmk

概括

无论我做什么,这个路由器似乎都适合我的电脑。不知怎的,当我的电脑隐藏在我的手机后面、带有虚假的 MAC 地址和全新的操作系统时,它甚至能识别出我的电脑。此时,我最好的猜测是,某些硬件识别信息以某种方式进入了 ping 数据包,并且路由器将其列入黑名单。所以,问题是显而易见的:

  • 什么可能导致它无法工作?
  • 我该如何让它发挥作用?

答案1

感谢 中的讨论聊天,我成功解决了我的问题,也学到了一些东西。

原因

这里发生了两件令人讨厌的事情,两者都与位于我的路由器和互联网之间的网络交换机有关:

计算机 --> 路由器 -->转变--> 互联网

  1. 交换机正在阻止 ping 数据包。

    这意味着即使我可以连接到互联网,诸如pingtraceroutetracepath和 之类的工具也无法工作,因此在这种情况下它们不能用作诊断工具。mtr显然,一些管理员出于“安全原因”禁用了这些工具,但就我而言,他们最终只是造成了很多混乱。因为我以前从未在野外见过这种情况,甚至听说过这样做,所以我不认为这是一种选择。这里要吸取的教训是,你不能总是指望ping自己有空。

    请注意,路由器本身可以很好地处理 ping 数据包。这解释了为什么我可以 ping 通连接到同一路由器的任何其他设备,但不能执行其他操作。

    (实际上,这个推理可能有点太天真了。根据 @Cbhihe 的说法聊天,毕竟路由器可能会进行阻塞。我还无法判断,但上面的图片仍然是一个有用的模型来说明问题所在。)

然而,就其本身而言,这并不是问题的原因。它只会挫败对其进行调查的尝试。但鉴于这种转换在一方面是邪恶的,它在其他方面也可能是邪恶的。这让我们...

  1. 本地 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,更改了配置以反映新客户端。点击屏幕刷新,繁荣就在那里。

相关内容