
我正在努力建立從我的筆記型電腦到另一台設備的網路路由。我承認我缺乏網路背景,很抱歉我的無知。我有以下設定:
[裝置-A] <--WiFi--> [路由器] <--WiFi--> [裝置-B] <--乙太網路--> [裝置-C]
我有以下 IP 位址(自動設定):
設備-A:
- 無線網路:192.168.0.155
設備-B:
- 無線網路:192.168.0.121
- 乙太網路:10.42.0.1
設備-C:
- 乙太網路:10.42.0.134
所有設備都使用 Ubuntu 20.04。我使用網路管理器 GUI 在設備 B 上配置了設備 B 和設備 C 之間的有線連接,並將 IPv4 方法設定為「共用到其他電腦」。所有其他設定均保留預設值。在設備 A 上,我嘗試使用以下命令設定到設備 C 的路由:
sudo ip route add 10.42.0.0/24 via 192.168.0.121 dev wlo1
設備 C 能夠在 192.168.0.121 和 10.42.0.1 上 ping 通設備 A,且設備 A 可以 ping 通設備 B。但是,當我嘗試從設備 A ping 設備 C 時,我得到:
$ ping 10.42.0.134
PING 10.42.0.134 (10.42.0.134) 56(84) bytes of data.
From 192.168.0.121 icmp_seq=1 Destination Port Unreachable
如何配置設備以便設備 A 能夠與設備 C 通訊?這看起來應該是相當簡單的事情,但我一直無法弄清楚。
更新
B 已啟用轉送
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
這是我iptables
在 B 上的規則集:
$ sudo iptables -L -n -v
Chain INPUT (policy ACCEPT 20319 packets, 21M bytes)
pkts bytes target prot opt in out source destination
6 2236 ACCEPT udp -- eth0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
12 863 ACCEPT udp -- eth0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
193 33179 ACCEPT all -- * eth0 0.0.0.0/0 10.42.0.0/24 state RELATED,ESTABLISHED
201 19734 ACCEPT all -- eth0 * 10.42.0.0/24 0.0.0.0/0
0 0 ACCEPT all -- eth0 eth0 0.0.0.0/0 0.0.0.0/0
9 756 REJECT all -- * eth0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- eth0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT 18275 packets, 2577K bytes)
pkts bytes target prot opt in out source destination
$ sudo iptables -L -n -v -t nat
Chain PREROUTING (policy ACCEPT 577 packets, 172K bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 59 packets, 4904 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 476 packets, 67069 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 468 packets, 65733 bytes)
pkts bytes target prot opt in out source destination
178 14264 MASQUERADE all -- * * 10.42.0.0/24 !10.42.0.0/24
我沒有在 B 上設定任何防火牆規則。
答案1
問題出iptables
在 Device-B 上的規則集(感謝評論中 Thomas 的幫助)。
如問題輸出中所示
sudo iptables -L -n -v
,您可以看到經過 B 的資料包被拒絕,而不是轉發到 eth0(如問題中「Chain FORWARD」下方的第四個條目所示)。我可以使用以下iptables -S
命令列出所有轉送規則:
$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 53 -j ACCEPT
-A FORWARD -d 10.42.0.0/24 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.42.0.0/24 -i eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth0 -j ACCEPT
-A FORWARD -o eth0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i eth0 -j REJECT --reject-with icmp-port-unreachable
從輸出來看,最後兩條規則是造成問題的原因。我使用以下命令刪除了它們:
sudo iptables -D FORWARD -o eth0 -j REJECT
sudo iptables -D FORWARD -i eth0 -j REJECT
我現在可以從裝置 A ping/ssh 到裝置 C,反之亦然。