
我有 3 台電腦:192.168.2.1、192.168.2.2、192.168.2.4 連接到無線 ad-hoc 網路。我希望來自 192.168.2.1 的所有流量在與 192.168.2.3 通訊時都經過 192.168.2.2。基本上
192.168.2.1 <---> 192.168.2.2 <---> 192.168.2.3
如何更改路由表?
我試過:
[email protected]: sudo ip route add 192.168.2.3 via 192.168.2.2 dev wlan0
[email protected]: sudo ip route add 192.168.2.1 via 192.168.2.2 dev wlan0
我在 192.168.2.2 上啟用轉送並且它有效。但是當我從 192.168.2.1 進行追蹤路由時,看起來它直接轉到 192.168.2.3。現在,我又新增了幾個節點(請參閱下面的 192.168.2.1 的路由表),當我執行 Traceroute 時,我仍然得到一跳。但如果我登入 192.192.2.2 並追蹤路由 192.168.2.5,它會給出正確的跳數。
**ROUTE TABLE OF 192.168.2.1**
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 202 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 303 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
192.168.2.3 192.168.2.2 255.255.255.255 UGH 0 0 0 wlan0
192.168.2.4 192.168.2.2 255.255.255.255 UGH 0 0 0 wlan0
192.168.2.5 192.168.2.2 255.255.255.255 UGH 0 0 0 wlan0
**ROUTE TABLE OF 192.168.2.2**
Destination Gateway Genmask Flags Metric Ref Use Iface
169.254.0.0 0.0.0.0 255.255.0.0 U 303 0 0 wlan0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
192.168.2.4 192.168.2.3 255.255.255.255 UGH 0 0 0 wlan0
192.168.2.5 192.168.2.3 255.255.255.255 UGH 0 0 0 wlan0
節點是否可以進行一些快取?
編輯;我現在總共有 10 個節點,這是我的追蹤路由的輸出
traceroute -4 192.168.2.10
traceroute to 192.168.2.10 (192.168.2.10), 30 hops max, 60 byte packets
1 192.168.2.2 (192.168.2.2) 10.140 ms 10.324 ms 10.398 ms
2 192.168.2.3 (192.168.2.3) 17.292 ms 17.483 ms 17.564 ms
3 192.168.2.4 (192.168.2.4) 25.646 ms 25.708 ms 26.110 ms
4 192.168.2.5 (192.168.2.5) 34.156 ms 34.416 ms 34.501 ms
5 192.168.2.6 (192.168.2.6) 44.131 ms 44.479 ms 44.560 ms
6 192.168.2.7 (192.168.2.7) 51.382 ms 43.074 ms 46.144 ms
7 192.168.2.8 (192.168.2.8) 46.129 ms 43.374 ms 53.956 ms
8 192.168.2.9 (192.168.2.9) 58.156 ms 83.625 ms 83.642 ms
9 192.168.2.10 (192.168.2.10) 83.565 ms 84.008 ms 89.355 ms
答案1
您的路由器可能會告訴其他路由器直接發送 ICMP 重定向封包。由於它們都位於同一網路上,因此它知道這應該是可能的。
我在三台 Linux 機器 (mach1 <-> mach3 <-> mach2) 之間設定了像您一樣的路由,並使用 ping 進行了測試:
mach1# ping mach2
PING mach2 (x.x.x.237) 56(84) bytes of data.
From mach3 (x.x.x.238): icmp_seq=1 Redirect Host(New nexthop: mach2 (x.x.x.237))
64 bytes from mach2 (x.x.x.237): icmp_seq=1 ttl=63 time=0.537 ms
mach3 和 mach2 上的 Tcpdump 顯示 mach3 發送重定向到 mach1,之後所有流量直接在 mach1 和 mach2 之間傳輸。
重定向可以被認為有點可疑,因為可以以相反的方式使用重定向:透過第三台機器(中間人)發送流量。參見例如https://askubuntu.com/questions/118273/what-are-icmp-redirects-and-should-they-be-blocked
發送和接收重定向可以透過一些 sysctls 來控制:
net.ipv4.conf.*.accept_redirects
net.ipv4.conf.*.send_redirects
在路由器上將 net.ipv4.conf.eth0.send_redirects 設為零並重設路由後,我讓所有流量都通過 mach3。
現在,我在交換網路(以及虛擬機器)上對此進行了測試,因此我不確定在 WLAN 上是否會改變情況。如果機器只處理發送到其乙太網路位址的幀,我認為不應該這樣做。但從理論上講,有可能從空中摘取每個畫面。
答案2
首先,這聽起來像是一個XY問題。你想做什麼?我確信以這種方式路由網路流量不太可能成為解決您的問題的好方法。
話說回來,
您的路由表仍然有 的路由192.168.2.0/24
。這意味著192.168.2.1
有兩個路由到達192.168.2.2
,因此核心路由子系統會考慮這兩個路由,發現一個是直接路由,另一個不是,並使用直接路由(因為這應該更便宜)。
如果您不希望這樣,您有兩個選擇:
- 刪除 的路由表條目
192.168.2.0/24
。這確實意味著您必須為以下內容建立路由表條目全部網路上的主機-包括您想要直接存取的主機。 - 建立兩個 /24 網路範圍,並為目前屬於這兩個範圍的 IP 位址的主機提供
192.168.2.2
(不需要單獨的網路介面)。然後,您可以讓所有其他主機通過該主機路由資料包。
不過,我再次不確定這是最好的前進方式。請解釋一下您想要實現的目標是什麼。