Невозможно установить сетевой маршрут

Невозможно установить сетевой маршрут

Я пытаюсь установить сетевой маршрут от моего ноутбука к другому устройству. Признаю, что мой сетевой опыт недостаточен, поэтому извините за невежество. У меня следующая настройка:

[Устройство-A] <--WiFi--> [маршрутизатор] <--WiFi--> [Устройство-B] <--Ethernet--> [Устройство-C]

У меня есть следующие IP-адреса (которые были настроены автоматически):

Устройство-А:

  • Wi-Fi: 192.168.0.155

Устройство-B:

  • Wi-Fi: 192.168.0.121
  • Ethernet: 10.42.0.1

Устройство-C:

  • Ethernet: 10.42.0.134

Все устройства используют Ubuntu 20.04. Я настроил проводное соединение между Device-B и Device-C на Device-B с помощью графического интерфейса сетевого менеджера, установив метод IPv4 на «Share to other computers». Все остальные настройки были оставлены по умолчанию. На Device-A я попытался установить маршрут к Device-C с помощью:

sudo ip route add 10.42.0.0/24 via 192.168.0.121 dev wlo1

Устройство-C может пинговать Устройство-A, а Устройство-A может пинговать Устройство-B по адресам 192.168.0.121 и 10.42.0.1. Однако, когда я пытаюсь пинговать Устройство-C с Устройства-A, я получаю:

$ 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 (спасибо Томасу за помощь в комментариях).

Как показано в вопросе в выводе 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

Теперь я могу выполнить ping/ssh на Устройство-C с Устройства-A и наоборот.

Связанный контент