Networking

路由器阻止一個特定設備

  • September 23, 2021

我正在嘗試通過新路由器將我的電腦連接到網際網路,但它拒絕以我遇到過的最令人困惑的方式工作。

  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通對方和路由器,但是電腦還是不能上網。 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。

$$ added $$

其他有用資訊$$ added $$

  • 的內容/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 數據包,並且路由器將其列入黑名單之後的某些東西。所以,問題是顯而易見的:

  • 什麼可能導致它不起作用?
  • 我如何使它工作?

感謝聊天中的討論,我設法解決了我的問題並學到了一些東西。

原因

這裡發生了兩件令人討厭的事情,它們都與位於我的路由器和 Internet 之間的網路交換機有關:

電腦 –> 路由器 –>交換機–> 網際網路

  1. 交換機正在阻止 ping 數據包。

這意味著即使我可以連接到網際網路,像 、 和 之類的工具也ping無法工作,因此在這種情況下它們不能用作診斷工具。顯然,一些管理員出於“安全原因”禁用了這些工具,儘管在我的情況下,他們最終造成了很多混亂。因為我以前從未在野外見過這個,甚至聽說過它已經完成,所以我不認為它是一種選擇。這裡要吸取的教訓是,你不能總是依賴於可用。traceroute``tracepath``mtr``ping

請注意,路由器本身可以很好地處理 ping 數據包。這解釋了為什麼我可以 ping 連接到同一路由器的任何其他設備,但沒有別的。

(實際上,這種推理可能有點太天真了。根據聊天中的@Cbhihe 所說,路由器畢竟可能在進行阻塞。我無法判斷,但上圖仍然是一個有用的模型。錯誤的。)

然而,這本身並不是問題的原因。它只會挫敗調查它的嘗試。但鑑於開關在某一方面是邪惡的,它可能在其他方面也是邪惡的。這使我們…

  1. 本地 DHCP 伺服器沒有與我的 DHCP 客戶端正確通信。

每台電腦都需要一個 DHCP 客戶端,以便在連接到網路時為其分配一個 IP 地址。我的是 NetworkManager 的內部 dhcp 客戶端,dhcp=internalNetworkManager.conf. 事實證明,這個 DHCP 客戶端非常基礎。儘管它在過去一直有效,但它不適用於此 DHCP 伺服器。結果是我電腦上的 IP 地址資訊設置不正確。

我不知道究竟是什麼設置不正確。當然,我的電腦已經收到了一個有效的 IP 地址,如 所示ip addr,否則我無法通過手機 ping 通它。但肯定有其他問題,因為交換機沒有得到安撫,這導致它丟棄了我所有的 IP 數據包。

請注意,環回地址 127.0.0.1 in/etc/resolv.conf沒有問題。它只是反映了我使用 dnsmasq 進行 DNS 記憶體的事實,dns=dnsmasqNetworkManager.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

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