После некоторых "танцев" удалось сделать работоспособный и стабильный софтварный роутер на базе Ubuntu 18.04.
Рассказываю какие были сложности в процессе настройки сети и сетевых служб.
1. Образ убунты со старым инсталлятором и новым ставят по дефолту немного разный набор пакетов настройки сети. Странно, но факт.
- с новым инсталлятором: netplan + cloud-init
- со старым: netplan
Это только у меня так получилось?
В целом, с netplan жить можно, но ручное редактирование yaml, то еще удовольствие.
В итоге netplan и cloud-init отправил в топку и поставил ifupdown.
2. Сетевой бридж проводного сетевого интерфейса и wlan.
Просто так wlan в бридж воткнуть не получится, так как по дефолту wlan интерфейс находится в managed mode. Сначала нужно перевести его в режим master.
Сделать это можно с помощью пакета iw. В принципе, все описано тут -
https://help.ubuntu.ru/wiki/wifi_apiw dev wlp1s0 del
iw phy phy0 interface add wlp1s0 type __ap
Название беспроводного сетевого интерфейса у вас может быть другим.
Проверяем с помощью iwconfig.
Чтобы переводился режим при загрузке системы, добавляем данные команды в /etc/network/interfaces
# Bridge interface. LAN
auto br0
iface br0 inet static
address 10.10.0.1
network 10.10.0.0
netmask 255.255.255.0
broadcast 10.10.0.255
bridge_ports enp3s0 wlp1s0
pre-up iw dev wlp1s0 del
pre-up iw phy phy0 interface add wlp1s0 type __ap
#bridge_stp on
#bridge_fd 0
#bridge_waitport 0
3. Установка сервера dhcp. Пакет isc-dhcp-server.
После установки и настройки, заметил одну неприятную багу — служба dhcp не стартует.
В логах - невозможно создать pid.
Посмотрев в etc/systemd/system/multi-user.target.wants/isc-dhcp-server.service, обнаружил, что pid должен создаваться в
/run/dhcp-server/dhcp.pid, однако директорию /run/dhcp-server предварительно никто не создает. Изменил на /run/dhcp.pid
service isc-dhcp-server status
● isc-dhcp-server.service - ISC DHCP IPv4 server
Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2018-08-10 11:15:23 MSK; 2s ago
Docs: man:dhcpd(
Process: 4304 ExecStart=/bin/sh -ec CONFIG_FILE=/etc/dhcp/dhcpd.conf; if [ -f /etc/ltsp/dhcpd.conf ]; then CONFIG_FILE=/etc/l
Main PID: 4304 (code=exited, status=1/FAILURE)
авг 10 11:15:23 ubuntu-srv sh[4304]: before submitting a bug. These pages explain the proper
авг 10 11:15:23 ubuntu-srv sh[4304]: process and the information we find helpful for debugging..
авг 10 11:15:23 ubuntu-srv sh[4304]: exiting.
авг 10 11:15:23 ubuntu-srv dhcpd[4304]: bugs on either our web page at
www.isc.org or in the README file
авг 10 11:15:23 ubuntu-srv dhcpd[4304]: before submitting a bug. These pages explain the proper
авг 10 11:15:23 ubuntu-srv dhcpd[4304]: process and the information we find helpful for debugging..
авг 10 11:15:23 ubuntu-srv dhcpd[4304]:
авг 10 11:15:23 ubuntu-srv systemd[1]: isc-dhcp-server.service: Main process exited, code=exited, status=1/FAILURE
авг 10 11:15:23 ubuntu-srv dhcpd[4304]: exiting.
авг 10 11:15:23 ubuntu-srv systemd[1]: isc-dhcp-server.service: Failed with result 'exit-code'.
4. Сервер hostapd.
- дефолтный конфиг hostapd.conf не создается при установки пакета, но его можно скопировать отсюда /usr/share/doc/hostapd/examples/hostapd.conf.gz
и распаковать сюда /etc/hostapd/hostapd.conf
- нужно задать путь конфига для автостарта службы в файле /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"
- при попытке включить службу hostapd, получаем такое:
Failed to enable unit: Unit file /etc/systemd/system/hostapd.service is masked.
Решение:
systemctl unmask hostapd.service
systemctl enable hostapd.service
5. Если нужен DNS сервер для устройств в локальной сети - сносим systemd-resolved, установленный по умолчанию и ставим dnsmasq или named (bind9).
6. UFW. Смешанные чувства. С одной стороны — неплохой CLI, правда «недоделанный».
С другой стороны — непонятная идеология правил цепочек before.rules, user.rules, after.rules.
Предполагаю только, что before — prerouting, after — postrouting, в users записываются правила созданные с помощью
команд CLI. Кто юзал, есть понимание идеологии?
7. Настройка hostapd.
Тут не очень хорошо. Пока удалось добиться стабильных 65Mbit на конечных устройствах в режиме 802.11n 2.4Ghz.
Однако, используя ширину канала HT40 (40+/40-), в теории должно быть 150Mhz. Карточка — Intel AC 3165. Кто тюнил — подскажите в какую сторону «курить»?
Еще одна проблема — постоянно «скачет» уровень сигнала — от слабого до сильного.
Что делал:
- переключал на самые не зашумленные каналы
- подключал внешнюю всенаправленную антенну с большим коэф. усиления — 8dBi, 12dBi.
TX power по выхлопу iwconfig — 22dBm.
Возможно проблема в самой карточке, так как она 1 x 1 — 1 антенна на каждом диапазоне (2.4 и 5Ghz). Т.е. 2 антенны с разной поляризацией в MIMO не подключить.
Может добавить полосу HT20? Настройки hostapd.conf под катом.
interface=wlp1s0
bridge=br0
driver=nl80211
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
ssid=bearpuh
country_code=US
ieee80211d=1
hw_mode=g
channel=6
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=-1
fragm_threshold=-1
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
wmm_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0
ieee80211n=1
ht_capab=[HT40-][HT40+][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40][MAX-AMSDU-3839]
eapol_key_index_workaround=0
eap_server=0
own_ip_addr=127.0.0.1
wpa=2
wpa_psk_file=/etc/hostapd/wpa_psk
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP