Точка доступа 5GHz
Home Настройка сервера Создание WiFi точки доступа ap 5GHz

Создание WiFi точки доступа ap 5GHz

by Pavelk
Точка доступа 5GHz

Понадобилось дома иметь отдельную WiFi сеть чисто для медиадевайсов и прочей мелочёвки,
которая может стучаться, куда не следует и не стучаться, куда следует. Отдельный роутер покупать или перепрошивать имеющийся как-то слишком просто, а так как у меня валяется горстка USB WiFi адаптеров от китайских до промышленных, решено было поглядеть, насколько реально из обычного Линукс сервера сделать свой «роутер».

И так, система:

Distributor ID:	Ubuntu
Description:	Ubuntu 24.04.1 LTS
Release:	24.04
Codename:	noble

Ядро

6.8.0-45-generic


В качестве сетевого адаптера выступает Archer T3U Plus (AC1300) от TP-Link.

Внутри у него чип RTL8812BU, драйвер в ядро недавно добавили (c 5.8?), учтите это.

Две недели под нагрузкой и «ни единого разрыва». Замеры скорости будут в конце записи (кажется, печально).

Первым делом узнаём список WiFi адаптеров:

iwconfig

Выхлоп примерно такой:

iwconfig

lo no wireless extensions.

enp3s0 no wireless extensions.

wlxb01921cacc79 IEEE 802.11 ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=0 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off

wlx1c61b4b015ca IEEE 802.11 ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=0 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off

Да, у меня 2 идентичных WiFi адаптера, через wlx1c61b4b015ca буду получать, через wlxb01921cacc79 отдавать.

Узнать можно вынув и посмотреть отличия в выводе iwconfig либо по sudo dmesg.

После того, как решил какой для чего адаптер будет использоваться, выясняем, может ли он вообще работать на 5GHz:

iw list 

И смотрим раздел «Frequencies» (их будет несколько, один для 2.4GHz, второй для 5GHz, смотрите по частоте).

iw list

Frequencies:
Frequencies:
* 5180 MHz [36] (22.0 dBm) (no IR)
* 5200 MHz [40] (22.0 dBm) (no IR)
* 5220 MHz [44] (22.0 dBm) (no IR)
* 5240 MHz [48] (22.0 dBm) (no IR)
* 5260 MHz [52] (22.0 dBm) (no IR, radar detection)
* 5280 MHz [56] (22.0 dBm) (no IR, radar detection)
* 5300 MHz [60] (22.0 dBm) (no IR, radar detection)
* 5320 MHz [64] (22.0 dBm) (no IR, radar detection)
* 5340 MHz [68] (disabled) * 5360 MHz [72] (disabled)
* 5380 MHz [76] (disabled) * 5400 MHz [80] (disabled)
* 5420 MHz [84] (disabled) * 5440 MHz [88] (disabled)
* 5460 MHz [92] (disabled) * 5480 MHz [96] (disabled)

И тут ждёт первая небольшая проблема.
Как видим, напротив возможных каналов прописано либо «disabled» либо стоит флаг «no IR» («No Infrared»), а это означает, что адаптеру запрещено первому начинать вещание (быть точкой доступа).

Происходит это из-за законодательных ограничений на радиочастотные диапазоны в разных странах,
а так как в девайсах зачастую не прописано для какой страны он (точнее стоит 00 — общемировой), то драйвер смотрит на минимально возможные разрешения, от того и получается, что не остаётся доступных каналов.
Но не сильно большая проблема — мы сейчас явно дадим понять драйверу в «какой стране он»:

sudo su
echo "options cfg80211 ieee80211_regdom=US" | sudo tee /etc/modprobe.d/80211-fix.conf

Вот и всё =) Ребут только нужен sudo reboot now.
В iw list теперь должны появится доступные каналы с частотой >5000 MHz.
Возможно, нужно будет ещё в системе прописать дополнительно где мы:

iw reg set US

Вот основная проблема, с которой промучался пол дня в попытках понять, как обойти ограничения CRDA (Central Regulatory Domain Agent) без патчинга драйверов.

Ок, приступаем.

Настраивать сети будем через Netplan (так удобнее),
в роли управляющего будет networkd (да, можно было бы через NetworkManager, но смысла в нём на сервере нет),
WiFi точку доступа поднимать будем через hostapd, раздавать IP адреса будем через dnsmasq

Первым делом ставим необходимые пакеты:

sudo su

apt install 
systemd-networkd  #-- Отвечает за управление сетевыми интерфейсами и настройку сетевых соединений
hostapd  #-- Создаёт точку доступа
dnsmasq  #-- Раздаёт IP адреса по DHCP
iptables-persistent #--  Сохраняет и восстанавливает при старте системы настройки ip-tables
iperf3 #-- Для замеров скорости, можно не ставить

Дальше включаем автозапуск сервисов:

systemctl disable NetworkManager #-- Если его у Вас не установлено, то будет сообщение, что не найден - ОК.
systemctl stop NetworkManager #-- Если его у Вас не установлено, то будет сообщение, что не найден - ОК.
systemctl enable systemd-networkd #-- Вместо NetworkManager
systemctl enable hostapd
systemctl enable dnsmasq

Переходим к самим настройкам, для начала Netplan, что бы networkd «поднял» соответствующие интерфейсы:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: true

    wlxb01921cacc79:
      dhcp4: false
      addresses:
        - 192.168.3.1/24

  wifis:
    wlx1c61b4b015ca:
      dhcp4: true
      access-points:
        "MyHome":
          password: "nananana"

ВАЖНО: Файл с разметкой YAML, то есть только пробелы (две штуки) в качестве отступов!

Как уже писал, через адаптер wlx1c61b4b015ca я получаю WiFi, а через wlxb01921cacc79 буду раздавать.
У него явно прописываем адрес и маску — он будет адресом хоста.

Дальше настраиваем саму точку доступа (к сожалению, пока что Netplan не может создавать конфиг файлы для hostapd):

interface=wlxb01921cacc79  #-- Указываем интерфейс, на каком будем поднимать
ssid=MyGlobalWiFi  #-- Название поднимаемой WiFi сети
wpa_passphrase=mypassword #-- Пароль поднимаемой WiFi сети
wpa_key_mgmt=WPA-PSK #-- Алгоритм авторизации
wpa=2
auth_algs=1 
hw_mode=a #-- 'a' для 5ГГц
channel=44  #-- Канал для вещания (потом можно будет подобрать наиболее "свободный")
#-- Остальное я "игрался" с разными возможностями (vht_capab из iw list).
#ieee80211n=1
#ieee80211ac=1
#ieee80211d=0
#ieee80211h=0
require_vht=1
wmm_enabled=1
ht_capab=[LDPC][HT40+][HT40-][SHORT-GI-20][SHORT-GI-40][MAX-AMSDU-7935]
vht_capab=[MAX-MPDU-11454][SHORT-GI-80][TX-STBC-2BY1][RX-STBC-1][HTC-VHT][MAX-A-MPDU-LEN-EXP7]
vht_oper_chwidth=1
macaddr_acl=0
country_code=US
wpa_pairwise=CCMP
rsn_pairwise=CCMP

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

Теперь точка доступа поднята, но нужно, что бы IP адрес автоматически клиентам назначался, для этого настраиваем dnsmasq:

interface=wlxb01921cacc79 #-- Слушаем запросы на адаптере поднимаемой сети
interface=lo #-- Слушаем запросы от локалхоста (наш сервер)
except-interface=wlx1c61b4b015ca #-- Не слушать запросы на этом, т.к. он "входящий" для нас.
#bind-interfaces #-- Закомментировать, т.к. dnsmasq стартует до hostapd
server=8.8.8.8 #-- DNS сервер до нас (к нему будем мы сами ходить за резолвом имён)
dhcp-range=192.168.3.10,192.168.3.250,12h  #-- Диапазон IP адресов для клиентов
dhcp-option=1,255.255.255.0 #-- Маска подсети для клиентов
dhcp-option=3,192.168.3.1 #-- Шлюз по умолчанию для клиентов (пока что так же, как в Netplan задали)
dhcp-option=6,192.168.3.1 #-- DNS сервер для клиента (мы сами)

Так как у новой WiFi другая подсеть, то нужно разрешить хождение пакетов между ней и входящей, а так же настроить «маскарад» (NAT) на входящей сети (трансляцию IP адреса, т.е. как будто бы все клиенты в мир будут выходить под одним её IP адресом, короче читайте отдельную запись — долгая история).

sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1

iptables -t nat -A POSTROUTING -o wlx1c61b4b015ca -j MASQUERADE
netfilter-persistent save  #-- Сохраняем правила, т.к. то, что выше написали, будет действовать до перезагрузки.

Нус, осталось только запустить и применить всё.

ВАЖНО: если вы подключены к серверу удалённо, то убедитесь, что если что-то пойдёт не так, у вас останется доступ к консоли сервера (то есть сеть может пропасть совсем, если что-то не так).

sudo su
systemctl start dnsmasq && 
systemctl start systemd-networkd && 
systemctl start hostapd &&
netplan apply #-- Запуск всей движухи

В выхлопе ip a должно стать как-то так:

ip a

1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever

2: enp3s0: mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether d4:3d:7e:38:62:21 brd ff:ff:ff:ff:ff:ff

3: wlxb01921cacc79: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether b0:19:21:ca:cc:79 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.1/24 brd 192.168.3.255 scope global wlxb01921cacc79
valid_lft forever preferred_lft forever
inet6 fe80::b219:21ff:feca:cc79/64 scope link
valid_lft forever preferred_lft forever

4: wlx1c61b4b015ca: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 1c:61:b4:b0:15:ca brd ff:ff:ff:ff:ff:ff
inet 192.168.0.103/24 metric 600 brd 192.168.0.255 scope global dynamic wlx1c61b4b015ca
valid_lft 6120sec preferred_lft 6120sec
inet6 fe80::1e61:b4ff:feb0:15ca/64 scope link
valid_lft forever preferred_lft forever

Как видите, появился IP адрес у WiFi адаптера, значит, можно попробовать подключиться к новой сети =)

Теперь, замерим скорость, для этого используем iperf3, на сервере запускаем его демона (где поднимали WiFi):

iperf3 -s

Подключаемся другим ПК с Линуксом (на него то же поставить iperf3 нужно) к нашей только что поднятой WiFi сети, и запускаем

iperf3 -c 192.168.3.1 #-- Адрес хоста сервера

У меня с этими адаптерами получилось так:

iperf3 -c 192.168.3.1
Connecting to host 192.168.3.1, port 5201
[ 5] local 192.168.3.20 port 45722 connected to 192.168.3.1 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 3.27 MBytes 27.4 Mbits/sec 4 69.3 KBytes
[ 5] 1.00-2.00 sec 2.92 MBytes 24.5 Mbits/sec 1 72.1 KBytes
[ 5] 2.00-3.00 sec 2.98 MBytes 25.0 Mbits/sec 0 97.6 KBytes
[ 5] 3.00-4.00 sec 3.11 MBytes 26.1 Mbits/sec 0 119 KBytes
[ 5] 4.00-5.00 sec 3.11 MBytes 26.1 Mbits/sec 0 139 KBytes
[ 5] 5.00-6.00 sec 3.11 MBytes 26.1 Mbits/sec 0 154 KBytes
[ 5] 6.00-7.00 sec 3.36 MBytes 28.1 Mbits/sec 0 170 KBytes
[ 5] 7.00-8.00 sec 3.17 MBytes 26.6 Mbits/sec 0 184 KBytes
[ 5] 8.00-9.00 sec 3.60 MBytes 30.2 Mbits/sec 0 197 KBytes
[ 5] 9.00-10.00 sec 3.29 MBytes 27.6 Mbits/sec 0 211 KBytes

[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 31.9 MBytes 26.8 Mbits/sec 5 sender
[ 5] 0.00-10.04 sec 31.0 MBytes 25.9 Mbits/sec receiver

Что-то как-то невоодушевляет для 5GHz =( Если удастся получить что-то лучше, обновлю запись.

ВАЖНО: Есть альтернативный драйвер: https://github.com/morrownr/88x2bu-20210702 на нём скорость выше, ставиться легко в пару команд, но с ним у меня два одинаковых адаптера не захотели работать одновременно — только первый, поэтому не могу сказать по стабильности.

ВАЖНО: Не подключайте адаптеры к фронтальной панели — могут глючить под нагрузкой, т.е. только к задней. Работают как с USB 2.0 так и с USB 3.0.

ВАЖНО: Через Netplan и рендер в NetworkManager то же работает (только учтите, что тогда в конфиг Dnsmasq нужно интерфейс, с которого раздача будет, добавить в except , т.к. Netplan поднимет новый процесс Dnsmasq с отдельными настройками специально для него) НО у меня не все устройства смогли к этой сети подключится (просто не видели), а некоторые подключались, но писали ошибку неизвестную (видимо не хватает настроек, которые прописаны в hostapd, но побыстраляну я не нашёл, как вообще прописать. Как минимум, канал, наверное, нужно).

Вот как-то так =)

Leave a Comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

You may also like