我正在努力建立从笔记本电脑到另一台设备的网络路由。我承认我的网络背景不足,所以很抱歉我的无知。我有以下设置:
[设备-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。我在设备 B 上使用网络管理器 GUI 配置了设备 B 和设备 C 之间的有线连接,并将 IPv4 方法设置为“共享给其他计算机”。所有其他设置均保留为默认设置。在设备 A 上,我尝试使用以下方法设置到设备 C 的路由:
sudo ip route add 10.42.0.0/24 via 192.168.0.121 dev wlo1
设备 C 能够 ping 通设备 A,设备 A 也可以在 192.168.0.121 和 10.42.0.1 上 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,反之亦然。