Вопрос или проблема
Я пытаюсь настроить беспроводную точку доступа на 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. Однако, на данный момент вы столкнулись с проблемой, связанной с недоступностью хоста для клиента.
Настройки сети
На основе предоставленных вами конфигураций, для обеспечения функционирования моста необходимо учесть несколько деталей:
-
Включение маршрутизации:
Вы уже выполнили команду по включению IP-маршрутизации:echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
-
Конфигурация
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
Эти правила разрешат двусторонний трафик между двумя интерфейсами.
-
Конфигурация
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
.
Тестирование конфигурации
Для оперативной проверки работоспособности:
-
Запустите
hostapd
иdnsmasq
в режиме отладки в отдельных терминалах:sudo hostapd /etc/hostapd/hostapd.conf -dd sudo dnsmasq --no-daemon --log-queries
-
Для прямой проверки работы маршрутизации вы можете использовать утилиту
ping
с различными IP-адресами:- Пинг клиентом на хост (192.168.44.1) и наоборот.
- Пинг с Ubuntu к клиенту и хосту.
-
При изменении правил
iptables
или конфигураций вы можете тестировать изменения, не перезагружая систему, применяя командыiptables
непосредственно.
Заключение
Создание рабочего моста между WiFi AP и Ethernet устройством требует внимательной настройки сетевых интерфейсов, маршрутизации и правил iptables
. Следуйте приведённым шагам и рекомендациям, и вы сможете обеспечить корректное взаимодействие между вашим клиентом и хостом. Обязательно тестируйте каждый этап, чтобы изолировать и устранять возможные проблемы. Надеюсь, эта информация будет полезна и поможет добиться необходимых результатов.