Соединение WiFi AP с Ethernet на Ubuntu – NAT и MASQUERADE

Вопрос или проблема

Я пытаюсь настроить беспроводную точку доступа на Ubuntu 18.04, чтобы перенаправить трафик от беспроводного клиента к узлу, подключенному через Ethernet. Доступ к интернету не нужен, только два сенсорных компонента, которые общаются друг с другом.

Настройка следующая:

Узловое устройство (192.168.44.1) — Ethernet порт ПК с Ubuntu (192.168.44.20) — Wifi AP ПК с Ubuntu (192.168.42.1) — Клиент (192.168.42.X)

В конечном счете, мне не важен ПК, он должен просто выступать в качестве моста, чтобы переправлять все пакеты между клиентом и узлом.

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

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

/etc/network/interfaces
адаптировано из https://help.ubuntu.com/community/WifiDocs/WirelessAccessPoint

auto lo
iface lo inet loopback

# Подключение к узлу A
auto eth0
iface eth0 inet static
address 192.168.44.20
netmask 255.255.255.0

# Беспроводная точка доступа
auto wlan0
iface wlan0 inet static
hostapd /etc/hostapd/hostapd.conf
address 192.168.42.1
netmask 255.255.255.0

Я включил net.ipv4.ip_forward = 1 в sysctl.conf

iptables:

iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface wlan0 -j ACCEPT

dnsmasq.conf

interface=eth0,wlan0
no-dhcp-interface=lo,eth0
dhcp-range=192.168.42.20,192.168.42.254,255.255.255.0,12h

hostapd.conf

interface=wlan0
driver=nl80211
ssid=someTestID
hw_mode=g
channel=1
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=TKIP
wpa_passphrase=thisIsMyPassPhrase

Некоторые моменты, которые не явно указаны и могут отсутствовать:

systemd-resolved

Эта служба может мешать dnsmasq. Запустите ps auxf|grep dnsmasq и проверьте, работает ли запущенный экземпляр с вашим конфигурационным файлом – или если нет запущенного экземпляра, это может быть заблокировано, потому что порт 53 занят. Либо отключите systemd-resolved, либо скажите dnsmasq, чтобы не привязываться к порту 53.

DHCP Gateway (Опция 3) и DNS (Опция 6) для dnsmasq

Проверьте ваш DNS и шлюз на клиентском компьютере. dnsmasq может не автоматически подбирать шлюз и DNS – добавьте dhcp-option=3,192.168.42.1 и option=6,1.1.1.1.

Другие правила `iptables

Вы можете выполнить sudo iptables -nvxL и sudo iptables -t nat -nvxL, чтобы увидеть, работает ли другая программа межсетевого экрана, такая как ipfw, которая может мешать вашим правилам межсетевого экрана. Либо перенесите вашу конфигурацию туда, измените порядок приоритета, либо отключите её.

iptables FORWARD правило

И, наконец, последний момент: если вы делаете NAT, вам не нужно правило FORWARD.

Если же вы можете добавить маршрут 192.168.42.0/24 через 192.168.44.20 на ваш маршрутизатор, то вам не нужно делать NAT и вы можете пропустить правило маскировки – в этом случае вам необходимо правило пересылки – но вероятно только если вы запускаете docker на этом компьютере, так как он устанавливает политику FORWARD в REJECT.

Вы, конечно, можете протестировать любую итерацию в реальном времени, просто выполнив команды sudo iptables .... Вы можете пойти даже дальше, отключив Network-Manager и systemd.reslolved и запустив hostapd и dnsmasq в режиме отладки на разных терминалах или в режиме экрана, чтобы было легче в режиме реального времени видеть, что не так.

Ответ или решение

Настройка моста между WiFi AP и Ethernet в Ubuntu: NAT и MASQUERADE

Введение

Настройка беспроводной сети с использованием Ubuntu может показаться сложным заданием, особенно когда речь идет о создании моста между беспроводным доступом и Ethernet-соединением. В данном руководстве будет рассмотрена настройка сетевого моста для передачи трафика между клиентом, подключенным по WiFi, и хостом, подключенным по Ethernet, без необходимости в доступе к интернету.

Текущая конфигурация

Исходя из вашего описания, текущая сетвая архитектура выглядит следующим образом:

  • Host Device (192.168.44.1)
  • Ubuntu PC Ethernet port (192.168.44.20)
  • Ubuntu PC Wifi AP (192.168.42.1)
  • Client (192.168.42.X)

Ваши настройки уже включают основные компоненты, такие как hostapd для настройки точки доступа и dnsmasq для DHCP. Однако, на данный момент вы столкнулись с проблемой, связанной с недоступностью хоста для клиента.

Настройки сети

На основе предоставленных вами конфигураций, для обеспечения функционирования моста необходимо учесть несколько деталей:

  1. Включение маршрутизации:
    Вы уже выполнили команду по включению IP-маршрутизации:

    echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
  2. Конфигурация iptables:
    Ваши текущие правила iptables могут блокировать нужный трафик. Попробуйте добавить следующие правила:

    sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
    sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT

    Эти правила разрешат двусторонний трафик между двумя интерфейсами.

  3. Конфигурация dnsmasq:
    Ваша конфигурация dnsmasq также может потребовать добавлений. Для обеспечения маршрутизации для клиентов рекомендуется добавить следующие параметры:

    dhcp-option=3,192.168.42.1
    dhcp-option=6,1.1.1.1

    Это укажет клиентам, что шлюзом является IP-адрес точки доступа.

Дополнительные рекомендации

Отключение systemd-resolved

Чтобы избежать конфликтов на порту 53, стоит временно отключить systemd-resolved:

sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved

Проверка загрузки конфигурации dnsmasq

Проверьте, выполняется ли dnsmasq с нужной конфигурацией:

ps aux | grep dnsmasq

Убедитесь, что никакая другая служба не занимает порт 53, что может блокировать работу dnsmasq.

Тестирование конфигурации

Для оперативной проверки работоспособности:

  1. Запустите hostapd и dnsmasq в режиме отладки в отдельных терминалах:

    sudo hostapd /etc/hostapd/hostapd.conf -dd
    sudo dnsmasq --no-daemon --log-queries
  2. Для прямой проверки работы маршрутизации вы можете использовать утилиту ping с различными IP-адресами:

    • Пинг клиентом на хост (192.168.44.1) и наоборот.
    • Пинг с Ubuntu к клиенту и хосту.
  3. При изменении правил iptables или конфигураций вы можете тестировать изменения, не перезагружая систему, применяя команды iptables непосредственно.

Заключение

Создание рабочего моста между WiFi AP и Ethernet устройством требует внимательной настройки сетевых интерфейсов, маршрутизации и правил iptables. Следуйте приведённым шагам и рекомендациям, и вы сможете обеспечить корректное взаимодействие между вашим клиентом и хостом. Обязательно тестируйте каждый этап, чтобы изолировать и устранять возможные проблемы. Надеюсь, эта информация будет полезна и поможет добиться необходимых результатов.

Оцените материал
Добавить комментарий

Капча загружается...