ネットワークルートを確立できません

ネットワークルートを確立できません

ノートパソコンから別のデバイスへのネットワーク ルートを確立するのに苦労しています。ネットワークに関する知識が不足していることは認めます。無知で申し訳ありません。設定は次のとおりです。

[デバイス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

iptablesB に関する私のルールセットは次のとおりです。

$ 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 を実行できるようになりました。また、その逆も可能です。

関連情報