Hostapd

Материал из ALT Linux Wiki

Настройка компьютера в качестве точки доступа

Инструкция переработана с учётом реалий седьмой платформы.

Введение

Источники информации

Для справки:

Компоненты

  1. Демон hostapd, обеспечивающий работу точки доступа: пакет hostapd.
  2. В репозитории есть несколько демонов для выдачи адресов IP. Самый удобный - dnsmasq из одноимённого пакета, он может выполнять две функции: DHCP и DNS.

Более сложный вариант — демон dhcpd, выдающий адреса IP (пакет dhcp-server) и демон named, обслуживающий запросы к DNS (пакет bind).

Примечания к настройке

На 2015 год наиболее защищённым для WiFi является протокол шифрования WPA2/CCMP (алгоритм шифрования AES). Для простоты используем вариант WPA2-PSK, поскольку WPA2-Enterprise требует службу RADIUS. Также не стоит включать WPS, поскольку он использует всего лишь шестизначный цифровой "пароль" (PIN-code) и взламывается перебором за несколько часов.

Для простоты настройки и с целью снизить нагрузку на беспроводную сеть выделим для Wifi отдельную подсеть. Это наиболее простой вариант для случая, когда компьютер (сервер) с адаптером WiFi подключен к интернету напрямую. (Чаще всего в руководствах описана настройка моста, объединяющего проводную и беспроводную сети. Такой вариант проще в случае, когда точка доступа организуется на компьютере, подключенном в интернет через другое устройство.)

Сетевые интерфейсы управляются пакетом etc-net. Если испоьлзуется NetworkManager, используйте другую инструкцию.

Для примера использованы:

  • подсеть 198.51.100.0/24 — внешняя (адрес внешнего интерфейса 198.51.100.234, сервер DNS провайдера 198.51.100.2);
  • подсеть 192.0.2.0/24 — беспроводная;
  • подсеть IPv6 2001:db8::/64 выделена хосту (серверу);
  • внешний интерфейс — enp1s0;
  • беспроводной интерфейс — wlp3s2;
  • имя беспроводной сети «WiFi on Linux», ключ сети «Many-many secret+password*phrase».

Не забудьте изменить эти значения на реальные :).

Все команды выполняются с правами суперпользователя.

Настройка

Устанавливаем пакеты

apt-get install hostapd dnsmasq

Конфигурация hostapd

Вносим изменения в файл конфигурации /etc/hostapd/hostapd.conf в следующих параметрах:

interface=wlp3s2
driver=nl80211
ssid="WiFi on Linux"
country_code=RU
hw_mode=g
channel=1
wpa=2
wpa_passphrase="Many-many secret+password*phrase"
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
wps_state=0
ieee80211n=1
ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40]
Комментарии к параметрам.

Драйвер «nl80211» подходит для большинства адаптеров WiFi, другие варианты для WiFi: hostap и madwifi.

Конфигурация подразумевает, что адаптер WiFi поддерживает режим IEEE 802.11n (включены "ieee80211n=1" и "ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]", а требуемые параметры wmm_* уже настроены в конфиге).
Если адаптер не поддерживает 802.11n, параметры "ieee80211n" и "ht_capab" не добавляйте.
Параметр "ht_capab=[HT40+]" означает, что 40-мегагерцовая полоса будет использовать диапазон от несущей "вверх", это подходит для выбранного первого канала (параметр "channel=1") — в работе будет использована полоса первого и второго каналов.

Конфигурация интерфейса

В etc-net за конфигурацию интерфейса wlp3s2 отвечают файлы /etc/net/ifaces/wlp3s2/options и /etc/net/ifaces/wlp3s2/ipv4address. Если каталог /etc/net/ifaces/wlp3s2 не существует, создадим его:

mkdir -p /etc/net/ifaces/wlp3s2

В этом каталоге создадим файл настроек интерфейса /etc/net/ifaces/wlp3s2/options:

TYPE=eth
BOOTPROTO=static
CONFIG_WIRELESS=yes
CONFIG_IPV4=yes
CONFIG_IPV6=yes
CONFIG_IPX=no
DISABLED=no
NM_CONTROLLED=no

Если IPv6 не нужен — укажите "CONFIG_IPV6=no".

Также создадим файл /etc/net/ifaces/wlp3s2/ipv4address, в котором назначим интерфейсу адрес IPv4:

192.0.2.1/24

Тут мы назначили сетевой карте первый адрес подсети.

Конфигурация DHCP и DNS

Вариант с dnsmasq.

Создаём файл конфигурации /etc/dnsmasq.conf:

local-service
domain-needed
bogus-priv
listen-address=192.0.2.1
dhcp-range=192.0.2.2,192.0.2.250,255.255.255.0,12h
dhcp-range=2001:db8::1:2,2001:db8::1:0fff,112,12h

Параметр «interface=wlp3s2» не стоит использовать из-за того, что тогда dnsmasq будет слушать также и 127.0.0.1.

Параметр «dhcp-range=2001:db8::2,2001:db8::0fff,112,12h» задаёт подсеть IPv6 (в примере указан префикс /112 как часть /64, обычно выделяемого хосту IPv4). Если IPv6 не используется, эту строку указывать не нужно.

Вариант с dhcp-server.

Создаём /etc/dhcp/dhcpd.conf

ddns-update-style none;

subnet 192.0.2.0 netmask 255.255.255.0 {
        option routers                  192.0.2.1;
        option subnet-mask              255.255.255.0;
        option domain-name-servers      198.51.100.2, 8.8.8.8, 8.8.4.4;
        range                           192.0.2.2 192.0.2.250;
        default-lease-time              21600;
        max-lease-time                  43200;
}

С такой конфигурацией клиенты будут работать с серверами DNS провайдера и публичными гуглевскими. Это может оказаться заметно медленнее, чем при использовании локального сервера DNS, но установка и настройка bind — отдельная тема.

Настраиваем NAT

  • Вариант настройки через Центр Управления: Для настройки NAT заходим в "Центр Управления Системы" -> "Внешние интерфейсы" (если такого пункта нет, устанавливаем alterator-net-iptables), указываем внешний интерфейс (например «enp1s0») и указываем, что компьютер выступает в роли "шлюза".


  • Вариант настройки через iptables: Выполните команды (предполагается, что внешний интерфейс носит имя enp1s0):
iptables -t nat -A POSTROUTING -s 192.0.2.0/24 -o enp1s0 -j SNAT --to-source 198.51.100.234
iptables -A INPUT -i wlp3s2 -j ACCEPT
iptables -A FORWARD -i wlp3s2 -o enp1s0 -j ACCEPT
iptables-save > /etc/sysconfig/iptables

Первые три команды добавляют правила файрвола для трансляции и пропуска пакетов из беспроводной подсети, четвёртая сохраняет изменения на будущее.

Либо в файл /etc/sysconfig/iptables впишите строки:

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.0.2.0/24 -o enp1s0 -j SNAT --to-source 198.51.100.234
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -f -j DROP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i wlp3s2 -j ACCEPT
-A FORWARD -f -j DROP
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlp3s2 -o enp1s0 -j ACCEPT
-A OUTPUT -f -j DROP
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT
  • вариант настройки через etcnet. Правила вносятся не в таблицу iptables, а используются средства настройки etcnet. В этом случае экономия памяти и процессора, т.к. не поднимается лишний сервис (iptables).

Пример правил etcnet (внешний интерфейс - eth0, подсмотренно у Центра управления):

Содержимое соответствующих файлов: /etc/net/ifaces/default/fw/iptables/filter/FORWARD:

-P ACCEPT
-f -j DROP
-m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-m physdev --physdev-is-bridged -j ACCEPT
-i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-i eth0 -j DROP

/etc/net/ifaces/default/fw/iptables/filter/INPUT:

-P ACCEPT
-f -j DROP
-m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-i eth0 -p udp --dport 1194 -j ACCEPT
-i eth0 -p tcp --dport 1194 -j ACCEPT
-i eth0 -p tcp --dport 22 -j ACCEPT
-i eth0 -p udp --dport 22 -j ACCEPT
-i eth0 -p icmp -j ACCEPT
-i eth0 -j DROP

/etc/net/ifaces/default/fw/iptables/filter/OUTPUT:

-P ACCEPT
-f -j DROP
-m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT


/etc/net/ifaces/default/fw/iptables/nat/POSTROUTING

-o eth0 -j MASQUERADE

Другие варианты настройки