Вопрос или проблема
Я пытаюсь настроить хотспот на встроенном устройстве на базе Ubuntu 22.04. У меня возникают проблемы с подключением клиентов к интернету через хотспот. Я потратил много времени, пытаясь настроить хотспот с помощью nmcli
, но ничего не получилось, поэтому я настраиваю все вручную.
На встроенном устройстве у меня есть WiFi-карта на интерфейсе wlan0
и отдельный сотовый модем на интерфейсе wwan0
. С помощью hostapd
мне удалось создать хотспот на wlan0
, к которому я могу подключиться с моего Macbook. Для предоставления DHCP на хотспот и DNS для всей локальной системы я использую dnsmasq
на встроенном устройстве. Со временем я хочу использовать ufw
в качестве фаервола, но на данный момент я отключил ufw
и вручную настраиваю правила маршрутизации с помощью iptables
.
wlan0
имеет статический IP-адрес 10.42.0.1
Мой файл /etc/hostapd/hostapd.conf
содержит следующее:
interface=wlan0
driver=nl80211
ssid=testHotspot
hw_mode=g
channel=6
wmm_enabled=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=testpass
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Мой файл /etc/dnsmasq.conf
содержит следующее:
port=53
listen-address=127.0.0.1
listen-address=10.42.0.1
bind-dynamic
dhcp-range=10.42.0.40,10.42.0.200,255.255.255.0,24h
dhcp-option=3,10.42.0.1 #default gateway
dhcp-option=6,10.42.0.1 #tell clients to look to us for dns
dhcp-authoritative
server=8.8.8.8@wwan0
server=8.8.4.4@wwan0
no-resolv
no-poll
no-hosts
log-debug
log-queries
log-dhcp
В идеале моя настройка dnsmasq
кешировала бы результаты DNS и переадресовывала бы все, что не закешировано, на DNS-серверы через сотовое соединение. Я отключил системные службы systemd-resolved
и ics-dhcp-server
, потому что хотел управлять всей моей конфигурацией DNS в одном месте с помощью dnsmasq
, но буду рад их повторно включить, если это поможет. lsof -i :53
возвращает:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dnsmasq 3726 dnsmasq 6u IPv4 69863 0t0 UDP 10.42.0.1:domain
dnsmasq 3726 dnsmasq 7u IPv4 69864 0t0 TCP 10.42.0.1:domain (LISTEN)
dnsmasq 3726 dnsmasq 8u IPv4 69865 0t0 UDP localhost:domain
dnsmasq 3726 dnsmasq 9u IPv4 69866 0t0 TCP localhost:domain (LISTEN)
Я использовал скрипт, чтобы попытаться выяснить мои правила iptables
. В настоящее время я запускаю скрипт каждый раз при перезагрузке. Я сохраню правила (или, что еще лучше, добавлю их в ufw) после того как все будет настроено. Я собрал их из различных источников, так что здесь, вероятно, есть некоторые проблемы. Stackoverflow не разрешает мне опубликовать ни скрипт, ни вывод iptables -L -v -n
, но у меня есть политики по умолчанию для INPUT
, FORWARD
и OUTPUT
, установленные на ACCEPT
, и несколько правил, которые, как я считаю, не работают, чтобы попытаться явно открыть порты 53, 67 и 68.
У меня также есть правило MASQUERADE
, которое, похоже, не работает.
Что касается пересылки, то у меня оба параметра net.ipv4.ip_forward=1
и net.ipv6.conf.all.forwarding=1
в /etc/sysctl.conf
.
Сотовое соединение управляется через NetworkManager
. Профиль соединения находится в /etc/NetworkManager/system-connections/t-mobile
и содержит следующее:
[connection]
id=t-mobile
uuid=<uuid placeholder>
type=gsm
interface-name=cdc-wdm0
timestamp=1741621543
[gsm]
apn=iot.T-mobile.com
number=*99#
[ipv4]
method=auto
[ipv6]
addr-gen-mode=stable-privacy
method=auto
Я удалил плагин dnsmasq
в NetworkManager
в пользу системного экземпляра dnsmasq
. Мой файл /etc/NetworkManager/NetworkManager.conf
содержит следующее:
[main]
plugins=ifupdown,keyfile
[ifupdown]
managed=true
[device]
wifi.scan-rand-mac-address=no
wifi.backend=wpa_supplicant
[keyfile]
unmanaged-devices=interface-name:wlan0
Я пробовал несколько комбинаций команд iptables
и конфигураций dnsmasq
. То, что я наблюдаю с моей текущей настройкой, это то, что при подключении к хотспоту DNS-запросы будут перехвачены и переадресованы, но не будут получены ответы. Я думал, что это означает, что мои правила iptables
не допускают возврата DNS, поэтому я пробовал множество различных правил для открытия этих портов, но ни одно из них не работало. Запуск journalctl --unit dnsmasq -f
во время подключения показывает запросы и перенаправления, но без ответов, но вывод выглядит как спам для stack overflow.
Интересный поворот в этой ситуации заключается в том, что если мой MacBook подключен к Ethernet-соединению при соединении с хотспотом, то MacBook будет перенаправлять свои DNS-запросы через порт Ethernet, и я смогу успешно выйти в интернет через хотспот. В этой настройке MacBook получает IP-адрес 10.42.0.107
от хотспота, и когда я запускаю ping -S 10.42.0.107 google.com
, это успешно. Я вижу эти запросы ping, проходящие через сотовое соединение на встроенном устройстве, используя tcpdump -nn -i wwan0
. Как только я отключаю Ethernet от MacBook, он начинает маршрутизировать DNS через хотспот, и я теряю возможность пинговать интернет как с MacBook, так и с встроенного устройства.
Я подумал, что это может указывать на проблему с моими маршрутами, но маршруты не меняются на протяжении всего процесса, и они кажутся мне правильными. Запуск route -n
дает:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 <cellular ip> 0.0.0.0 UG 700 0 0 wwan0
0.0.0.0 192.168.55.100 0.0.0.0 UG 32766 0 0 l4tbr0
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 wg0
10.42.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
<cellular ip> 0.0.0.0 255.255.255.248 U 700 0 0 wwan0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 l4tbr0
192.168.55.0 0.0.0.0 255.255.255.0 U 0 0 0 l4tbr0
Что я делаю не так? Спасибо заранее!
Ответ или решение
Настройка точки доступа на встраиваемом устройстве с Ubuntu 22.04 требует тщательного подхода, особенно когда дело касается обеспечения доступа клиентам к интернету. Рассмотрим ситуацию пошагово и выявим возможные проблемы и их решения.
Теория
Конфигурация точки доступа состоит из нескольких ключевых компонентов: настроек hostapd
для создания точки доступа Wi-Fi, настроек dnsmasq
для предоставления DHCP и DNS, а также маршрутизации через iptables
. Ваше устройство имеет две карты: Wi-Fi (wlan0
) для точки доступа и модем сотовой связи (wwan0
) для выхода в интернет.
-
Hostapd:
- Он управляет настройками точки доступа Wi-Fi. Ваша конфигурация выглядит корректно для создания базовой точки доступа.
-
Dnsmasq:
- Он обеспечивает распределение IP-адресов и DNS-запросы. Основная задача – настроить кэширование DNS и перенаправление неразрешённых запросов на внешние DNS через соединение
wwan0
.
- Он обеспечивает распределение IP-адресов и DNS-запросы. Основная задача – настроить кэширование DNS и перенаправление неразрешённых запросов на внешние DNS через соединение
-
Маршрутизация и iptables:
- Для обеспечения передачи трафика из сети
wlan0
в интернет черезwwan0
, важно правильно настроить правила маршрутизации и iptables.
- Для обеспечения передачи трафика из сети
Пример
Вы столкнулись с проблемой, когда DNS-запросы от клиентов не получают ответа. Много усилий было направлено на конфигурацию iptables, но возникает необходимость в более детальном подходе. Ваши текущие настройки, вероятно, имеют следующие узкие места:
- DNS-запросы доходят до
dnsmasq
, но возвращаемая информация не направляется обратно клиентам. - Маршрутизация должна быть проверена, чтобы убедиться, что трафик правильно проходит обратно к клиентам через точку доступа.
Применение
-
Проверка конфигурации Dnsmasq:
- Убедитесь, что
dnsmasq
действительно запущен и работает корректно. Используйтеjournalctl --unit dnsmasq -f
, чтобы просмотреть, какие запросы идут и какие возвращаются. - Параметры
no-resolv
иno-poll
могут быть причиной, почему внутренние DNS-запросы не обрабатываются корректно. Попробуйте удалить эти параметры и проверить поведение.
- Убедитесь, что
-
Iptables и маршрутизация:
- Убедитесь, что NAT-переходы настроены правильно. Используйте правила, подобные следующим:
iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE iptables -A FORWARD -i wlan0 -o wwan0 -j ACCEPT iptables -A FORWARD -i wwan0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
- Проверьте активность параметров
ip_forward
. Если вы их меняли вsysctl.conf
, убедитесь, что они применяются без ошибок.
- Убедитесь, что NAT-переходы настроены правильно. Используйте правила, подобные следующим:
-
Конфигурация NetworkManager:
- Убедитесь, что
NetworkManager
корректно управляет вашими соединениями. В конфигурационном файлеNetworkManager.conf
, возможно, необходимо убратьunmanaged-devices
, чтобыwlan0
также можно было эффективно управлять через NetworkManager, особенно если впоследствии планируется использованиеufw
.
- Убедитесь, что
-
Отладка:
- Используйте команды, такие как
ping -I wlan0 <some_ip>
, чтобы проверить, проходится ли трафик. Если соединение работает с подключенным Ethernet, и при отключении перестаёт работать, возможно, проблема в приоритете маршрутизации и DNS. Командаip route
будет полезна для диагностики.
- Используйте команды, такие как
-
Обновление Ubuntu и пакетов:
- Проверьте, обновлён ли ваш
dnsmasq
,iptables
, и прочие пакеты. Обновления могут исправить неочевидные ошибки.
- Проверьте, обновлён ли ваш
-
Диагностика через tcpdump:
tcpdump -nn -i wlan0
иtcpdump -nn -i wwan0
помогут вам увидеть, как идут пакеты. Это может прояснить, «где теряются» DNS-запросы.
Подводя итог, вам потребуется поэтапно проверять каждую из составляющих вашей конфигурации и удостовериться в правильной маршрутизации трафика, учёте особенностей взаимодействия с NetworkManager, а также правильной настройке Dnsmasq для обратной пересылки запросов. Внимательная диагностика, конфигурация iptables и кэш DNS помогут устранить проблемы с доступностью интернета для клиентов точки доступа.