我有一台安裝了 DD-WRT v24-sp2 的路由器,但在存取與我的公用 IP 位址位於同一子網路中配置的另一個 IP 位址時遇到問題。我的 ISP 要求使用 DHCP 建立 WAN 連接,因此 IP 和網關都是自動分配的。指派給 WAN 介面的 IP 位址也是公用 IP 位址。
為了說明這個例子:
DD-WRT router -> [lan] ip: 192.168.1.1/24
[wan] ip: 12.34.56.78/24 (public IP)
現在假設我的鄰居使用具有相同配置的相同 ISP,因此連接到相同的公共12.34.56.0/24
網路(例如使用 WAN IP 位址12.34.56.10
)並在該公共 IP 上公開一些服務。我遇到的問題是我無法存取該服務,甚至無法從我的 DD-WRT 路由器或連接到該路由器的任何裝置 ping 通我的鄰居公共 IP。
當我使用不同的網路連線時,我可以毫無問題地存取此服務,因此我 100% 確定此問題僅在我的 DD-WRT 路由器後面持續存在。
我的路由表如下:
root@DD-WRT:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 12.34.56.1 0.0.0.0 UG 0 0 0 vlan2
12.34.56.0 0.0.0.0 255.255.255.0 U 0 0 0 vlan2
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
192.168.66.0 192.168.66.2 255.255.255.0 UG 0 0 0 tun0
192.168.66.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
有什麼想法如何開始解決這個問題嗎?
答案1
我也不是專家。我寫這篇文章是因為我與 ISP 有類似的設定(WAN 作為/24
子網路),具有類似的路由表。差別在於它有效。我甚至可以嗅探來自或發送到我的一些「鄰居」的資料包(但不是全部;我認為這些鄰居與我共用一個集線器)。
traceroute
正如我所料,到我的“鄰居”顯示了單跳。
就您而言,您和鄰居之間似乎沒有一跳連接,或者由於某種原因,某些透明設備將您分開。無論哪種方式,根據您獲得的這些 DHCP 設置,您的 ISP 的配置並不完全符合我的預期。 ISP 方面有一些特殊之處。 ISP 正確的做法可能是:
- 允許您和您的鄰居透過集線器、交換器等透明設備進行一跳通信,這將使其成為常規子網路;或者
- 允許您和您的鄰居透過網關進行兩跳通訊。
你可以自己嘗試什麼
上面的第二個項目並不意味著您根本不允許透過網關與鄰居進行通信現在。您可能會被允許,也可能不會被允許,網關可以以任何一種方式配置。重點是:對於您目前的路由表,您並不想這樣做。
路由表的第二行 ( 12.34.56.0 …
) 告訴您的路由器,無論何時需要向鄰居發送資料包,都應使用鄰居的 IP 發送封包和硬體 (MAC) 位址作為目標。硬體位址最初是未知的,因此路由器會對其進行廣播。這永遠不會傳到鄰居那裡,你就被困住了。
嘗試暫時刪除路由表中的第二行:
route del -net 12.34.56.0 netmask 255.255.255.0 dev vlan2
並讓預設的執行。從您到鄰居的每個資料包都會發送至他或她的 IP,但發送至網關的硬體位址(類似於您與外界通訊時的情況)。現在,網關的工作就是傳遞這個資料包。它可能會也可能不會這樣做。
就我而言,如果我刪除正確的路由規則,我仍然可以聯繫到我的“鄰居”;traceroute
節目二hops,中間節點是我的ISP的閘道。問題在於回應:由於我的「鄰居」的原因,它們直接發送到我的硬體位址不變的路由表。這對我有用,但對你不起作用。所以你的鄰居必須做同樣的伎倆他們的路由表,然後它可能工作。
我碰巧擁有我的一位“鄰居”的管理員訪問權限。我更改了它的路由表以及我的路由表。然後我確認wireshark
資料包透過網關(使用其硬體位址)在兩個方向上跳躍。
如果它對你和你的鄰居有效,那麼就以某種方式使這種改變永久化。當然,這是一種解決方法,如果您的 ISP 更改配置會更好。