我已將兩台 Linux 機器連接在一起。一台機器可以無線連接到我的路由器,而另一台機器則沒有。沒有無線存取權限的電腦 (PC1) 配置為具有唯一的靜態 IP,並將另一台電腦 (PC2) 設定為其預設閘道。 PC2 配置為具有唯一的 IP 並使用路由器作為預設閘道。當我啟用有線連接時,PC1可以與PC2的eth0和wlan0介面通信,PC2可以與PC1通訊。不幸的是,當啟用有線連接時,PC2 無法與路由器通信,因此 PC1 也無法與路由器通訊。本質上PC2有線和無線連線不能同時運作。
PC2(注意:route-n
無論是否啟用有線,都是相同的)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.138 0.0.0.0 UG 0 0 0 wlan0
10.0.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
docker0 Link encap:Ethernet HWaddr 56:84:7a:fe:97:99
inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
eth0 Link encap:Ethernet HWaddr 60:a4:4c:62:ee:86
inet addr:10.0.0.140 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::62a4:4cff:fe62:ee86/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:155 errors:0 dropped:0 overruns:0 frame:0
TX packets:7744 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:12554 (12.5 KB) TX bytes:1509568 (1.5 MB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:2179347 errors:0 dropped:0 overruns:0 frame:0
TX packets:2179347 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:217854881 (217.8 MB) TX bytes:217854881 (217.8 MB)
wlan0 Link encap:Ethernet HWaddr c0:4a:00:66:58:98
inet addr:10.0.0.103 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::c24a:ff:fe66:5898/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1605422 errors:0 dropped:0 overruns:0 frame:0
TX packets:669649 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1405768536 (1.4 GB) TX bytes:83997471 (83.9 MB)
PC1(注意:我無法檢索 PC1 的 ifconfig)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.139 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
答案1
PC2 路由表的目前設定是您的問題。我在這裡複製了它,刪除了不重要的列並將其從網路遮罩轉換為 CIDR 表示法:
Destination Gateway Metric Iface
0.0.0.0/0 10.0.0.138 0 wlan0
10.0.0.0/24 0.0.0.0 1 eth0
10.0.0.0/24 0.0.0.0 9 wlan0
第一行以簡單的英文表示「到所有其他網站的流量透過 10.0.0.138 閘道傳送」。
第二行和第三行提供相同的目的地,因此指標較低者獲勝。第 3 行甚至可能不存在。用簡單的英語表示“要到達網關 10.0.0.138 和所有其他 10.0.0.* 對等點,請透過 eth0 發送”
這會導致發送到網路的流量通過 eth0,從而導致缺乏連接。
出現問題的原因是您在同一網路中的兩個不同橋接域上使用了相同的子網,這是不允許的。不要那麼做!
將PC2 的eth0 介面的網路遮罩變更為255.255.252.0,並為其指定一個遠離路由器的IP 位址,這會將路由表變更為(例如,將PC2 eth0 設為10.0.0.21,將PC1 eth0 設為10.0.0.22)
Destination Gateway Metric Iface
0.0.0.0/0 10.0.0.138 0 wlan0
10.0.0.20/30 0.0.0.0 1 eth0
10.0.0.0/24 0.0.0.0 9 wlan0
現在,到網關 10.0.0.138 的流量將根本不符合第二行,並將正確使用第三行。
更好的是使用不重疊的範圍進行有線連接,例如 10.0.1.x
為了讓 PC1 也能存取互聯網,您的路由器需要透過 PC2 發送發送到 PC1 的流量。有兩種方法可以進行設定:更改路由器的路由表,或設定 PC2 執行代理 ARP。
答案2
我認為有幾件事可能會給您帶來問題:
- 您聲明 PC1 使用 PC2 作為其預設網關,但 PC1 的路由表實際上顯示
10.0.0.139
為預設網關,而不是 PC2 的 eth0 接口10.0.0.140
- 如果 PC2 負責路由來自 PC1 的流量,您是否在 PC2 上開啟了 IP 轉送?我不相信 Linux 中預設啟用此功能。檢查與
cat /proc/sys/net/ipv4/ip_forward
.如果為 0,則 PC2 將丟棄 PC1 傳送給它的所有可路由流量。如果您需要打開它,請指導。 - 如果 PC2 上確實啟用了 ip 轉發,那麼 iptables 是否已配置為接受到達其轉發鏈的流量?
iptables -nvL
檢查轉送鏈的規則。