Переадресация IP с одного сервера через маршрут по умолчанию

Переадресация IP с одного сервера через маршрут по умолчанию

У меня есть устройство (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 

Любая помощь будет высоко оценена!

EDIT: Упрощенное объяснение

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

  • 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

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

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

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