У меня есть устройство (IP 10.110.1.3) со следующим настроенным правилом:

$ ip route
default via 10.110.1.4 dev wlan0 onlink

У меня включена пересылка ipv4 на обеих машинах. Обе машины могут общаться друг с другом.

Вот мои iptables. Я хочу маршрутизировать от интерфейса wlp0s20u1 до wlp3s0:

$ iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

$ iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o wlp3s0 -j MASQUERADE

Маршруты на устройстве "маршрутизация" 10.110.1.4:

$ ip route
default via 192.168.1.1 dev wlp3s0  proto static 
10.110.1.0/24 dev wlp0s20u1  proto kernel  scope link  src 10.110.1.4 
192.168.1.0/24 dev wlp3s0  proto kernel  scope link  src 192.168.1.110  metric 600 

При использовании маршрута "if interface" становится ясно, что это никогда не сработает:

$ ip route get to 192.168.1.1 from 10.110.1.3 iif wlp0s20u1
RTNETLINK answers: No route to host

$ ip route get to 8.8.8.8 from 10.110.1.3 iif wlp0s20u1
RTNETLINK answers: No route to host

Я заметил src 192.168.1.110 на маршруте 192.168.1.0 и попытался добавить следующий маршрут, чтобы это исправить:

$ sudo ip route add 192.168.1.1/32 dev wlp3s0

Но это тоже не помогло.

Я использовал tcpdump для анализа icmp, чтобы видеть, куда идут мои пинги.

$ tcpdump -i wlp0s20u1 -n icmp
listening on wlp0s20u1, link-type EN10MB (Ethernet), capture size 262144 bytes
18:13:19.355166 IP 10.110.1.3 > 8.8.8.8: ICMP echo request, id 32366, seq 1, length 64
18:13:20.359770 IP 10.110.1.3 > 8.8.8.8: ICMP echo request, id 32366, seq 2, length 64

а также

tcpdump -i wlp3s0 -n icmp                                             
listening on wlp3s0, link-type EN10MB (Ethernet), capture size 262144 bytes

Ничего на интерфейсе wlp3s0, если я не пинг с компьютера "маршрутизатора".

Итак, ясно, что проблема заключается в том, что ядро не знает, как маршрутизировать пакеты от wlp0s20u1 до wlp3s0. Но я не уверен, как заставить это сделать это. Я попытался явно добавить маршруты, чтобы сказать это сделать, но, похоже, это не работает.

Если я рассылаю спам по следующему вопросу, только счетчики пакетов с предварительной маршрутизацией увеличиваются (пока выполняется попытка пинга);

$ iptables -t nat -v -L -n

Chain PREROUTING (policy ACCEPT 775 packets, 50740 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 24 packets, 1920 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 95 packets, 23073 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 5 packets, 1000 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   90 22073 MASQUERADE  all  --  *      wlp3s0  0.0.0.0/0            0.0.0.0/0 

Любая помощь очень ценится!

РЕДАКТИРОВАТЬ: упрощенное объяснение

У меня есть три устройства:

  • A: WiFi роутер на 192.168.1.1
  • B: Компьютер с двумя картами Wi-Fi: wlp3s0 в сети 192.168.1.1 и wlp0s20u1 в сети 10.110.1.0/24.
  • C: компьютер только в сети WiFi 10.110.1.0/24.

Я пытаюсь разрешить C общаться с Интернетом (0.0.0.0/0) двумя прыжками, сначала с B, затем с A, затем с Интернетом.

Проблема заключается в получении B для маршрутизации пакетов от wlp3s20u1 до wlp3s0.

1 ответ1

0

Решением было включить переадресацию на конкретный интерфейс. По какой-то причине он не был включен.

sudo sysctl net.ipv4.conf.wlp3s0.forwarding=1
sudo sysctl net.ipv4.conf.wlp0s20u1.forwarding=1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .