Маршрутизация между двумя беспроводными интерфейсами — Linux

Маршрутизация между двумя беспроводными интерфейсами — Linux

В принципе, моя сеть выглядит так

                            +------+
  10.0.0.10 ------ 10.0.0.1=|Laptop|=11.0.0.11 ------ 11.0.0.1 
(wlan0,client)    (AP,wlan0)+------+(wlan1,client)        (AP)

wlan0 и wlan1 — это USB-адаптеры Wi-Fi, подключенные к ноутбуку.

Я хочу подключить эти сети через свой ноутбук. Сначала я пробовал использовать мост, но оказалось, что мост не поддерживается.

Я пробовал это, но это не сработало.

iptables -A FORWARD -i wlan0 -o wlan1 -j ACCEPT
iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE

Буду признателен за любую помощь.

решение1

Вам не нужны два правила маскировки. Вам нужно только маскировать клиента, у которого ваш компьютер является маршрутом по умолчанию; вы применяете source-NAT к пакетам, покидающим интерфейс на стороне "WAN".

Если брандмауэр находится в состоянии по умолчанию, вам понадобится только это одно правило:

iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE

Если MTU в разных сетях отличается, вам может потребоваться применить исправление MSS:

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu   

(это помогает решить проблему типа «ping работает, веб-сайты не работают» или «некоторые сайты работают, другие нет»).

Есть очень распространенный подвох. Я делаю это уже около 20 лет, и все еще часто забываю об этом, пока все не заработает, но что-то не заработает. Вам нужно явно включить пересылку пакетов в ядре:

sysctl net.ipv4.ip_forward=1

и установите ту же переменную, /etc/sysctl.confчтобы она была включена после загрузки.

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