В этой статье я расскажу, как создать домашний роутер на базе Repka Pi3 с ОС ALT Linux 10 (статья по установке ОС https://dzen.ru/a/ZEYlyGcRAC1G3gMi) без NetworkManager, а с применением etcnet + hostapd + dnsmasq.
Из моих наблюдений оказалось NetworkManager в качестве точки доступа WiFi ведёт себя крайне не стабильно (примерно раз в пол часа лаг на 3 секунды), возможно, это связано с переключением с канала на канал, однако мне при игре в Мир танков это очень сильно доставляло, после чего я решил избавиться от NM и полностью использовать etcnet в качестве сетевой подсистемы проводной и беспроводной связи.
Интернет у меня приходит по витой паре на интерфейс eth0, его настройку я описывать не буду поскольку у всех по разному, в моём случае провайдер предоставляет настройки IP по DHCP.
Установим необходимое ПО:
# apt-get update
# apt-get install hostapd dnsmasq
Отредактируем файл конфигурации hostapd:
# mcedit /etc/hostapd/hostapd.conf
Приведём его к виду:
interface=wlan0
ssid=MyPOINT
wpa_passphrase=Qwe12345
own_ip_addr=192.168.150.1
ieee80211n=1
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
macaddr_acl=1
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
wmm_enabled=1
eap_server=0
eap_message=hello
eapol_key_index_workaround=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP
ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40]
Обратите внимание на 4 первых строчки:
interface=wlan0 - интерфейс WiFi-адаптера;
ssid=MyPOINT - название точки доступа;
wpa_passphrase=Qwe12345 - пароль для подключения;
own_ip_addr=192.168.150.1 - ip-адрес точки доступа;
Отредактируем файл конфигурации dnsmasq и настроим его в роли DHCP-сервера:
# mcedit /etc/dnsmasq.conf.d/wifi.conf
Приведём его к виду:
interface=wlan0
listen-address=192.168.150.1
dhcp-range=192.168.150.100,192.168.150.250,255.255.255.0,12h
dhcp-option=3,192.168.150.1
dhcp-option=1,255.255.255.0
В моём варианте, как видим используется подсеть 192.168.150.0/24 c IP-адресом роутера 192.168.150.1
Вы же можете использовать любые другие на своё усмотрение.
Разрешим трансляцию пакетов между интерфейсами, изменив параметр ядра в файле
# mcedit /etc/net/sysctl.conf
Найдем net.ipv4.ip_forward и приведем его его к виду:
net.ipv4.ip_forward = 1
Настроим iptables:
# mcedit /etc/sysconfig/iptables
Приведём его к виду:
*nat
:PREROUTING ACCEPT
:OUTPUT ACCEPT
:POSTROUTING ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i wlan0 -j ACCEPT
-A FORWARD -s 192.168.150.0/24 -i wlan0 -j ACCEPT
-A FORWARD -i wlan0 -o wlan0 -j ACCEPT
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
Эта настройка разрешает доступ к репке изнутри сети WiFi, но при этом запрещает доступ извне. Так что дальше на своё усмотрение, можно открыть необходимые порты или сделать проброс, и т. д.
Запустим iptables и добавим в автозапуск:
systemctl enable iptables --now
А вот теперь ALT-специфичные настройки.
Как присвоить IP-адрес беспроводному интерфейсу с использованием конфигурационных файлов etcnet я не понял, может даже и никак... Кто знает отпишитесь в комментах. Я же пошел путем запуска скрипта при старте ОС.
Для начала убедимся, что сервисы hostapd и dnsmasq не включены в автозапуск:
systemctl disable hostapd dnsmasq
Создадим скрипт, который будет присваивать IP-адрес интерфейсу wlan0 и запускать вышеупомянутые сервисы:
mkdir /root/scripts/
mcedit /root/scripts/start_ap.sh
Приведём скрипт к виду:
#!/bin/bash
ip addr add 192.168.150.1/255.255.255.0 dev wlan0
ip link set wlan0 up
sleep 1
systemctl start hostapd.service
sleep 1
systemctl start dnsmasq.service
Создадим задание на выполнение данного скрипта при загрузке ОС:
export EDITOR=mcedit
crontab -e
Приведём к виду:
@reboot /root/scripts/start_ap.sh
На этом настройка завершена, можно перезагрузить девайс, и точка доступа должна подняться автоматически.
Сразу скажу что встроенный WiFi-модуль слабоват, даже с припаянной внешней антенной, особенно в многопотоке, но для телика, например хватает. Я же просто купил USB WiFi-адаптер и настроил на нем. За парой кирпичных стен сталинки интернет работает)))