
ノートパソコンから別のデバイスへのネットワーク ルートを確立するのに苦労しています。ネットワークに関する知識が不足していることは認めます。無知で申し訳ありません。設定は次のとおりです。
[デバイスA] <--WiFi--> [ルーター] <--WiFi--> [デバイスB] <--イーサネット--> [デバイスC]
次の IP アドレスがあります (自動的に構成されました)。
デバイスA:
- 無線LAN: 192.168.0.155
デバイスB:
- 無線LAN: 192.168.0.121
- イーサネット: 10.42.0.1
デバイスC:
- イーサネット: 10.42.0.134
すべてのデバイスは Ubuntu 20.04 を使用しています。デバイス B では、ネットワーク マネージャー GUI を使用して、IPv4 メソッドを「他のコンピューターと共有」に設定し、デバイス B とデバイス C 間の有線接続を構成しました。その他の設定はすべてデフォルトのままにしました。デバイス A では、次を使用してデバイス C へのルートを設定しようとしました。
sudo ip route add 10.42.0.0/24 via 192.168.0.121 dev wlo1
デバイス C はデバイス A に ping でき、デバイス A は 192.168.0.121 と 10.42.0.1 の両方でデバイス B に ping できます。ただし、デバイス A からデバイス C に ping しようとすると、次のメッセージが表示されます。
$ 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
デバイス B のルールセットでした (コメント欄の Thomas の助力に感謝します)。
の出力の質問に示されているように
sudo iptables -L -n -v
、B を通過するパケットは eth0 に転送されるのではなく拒否されていることがわかります (質問の「Chain FORWARD」の下の 4 番目のエントリとして示されています)。次のコマンドを使用して、すべての転送ルールを一覧表示できました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
出力から、最後の 2 つのルールが問題を引き起こしていることがわかります。次のコードを使用してこれらを削除しました。
sudo iptables -D FORWARD -o eth0 -j REJECT
sudo iptables -D FORWARD -i eth0 -j REJECT
これで、デバイス A からデバイス C に ping/ssh を実行できるようになりました。また、その逆も可能です。