Точка доступа Wi-Fi на базе адаптера D-Link DWA-510

()

Организация точки доступа Wi-Fi - задача достаточно распространённая. Для решения это задачи можно использовать как аппаратные точки доступа, так и программные (последние представляют из себя сервер с добавленным к нему Wi-Fi-адаптером и специальным ПО).

Далее будет показано как можно добавить точку доступа для сети, подобной описанной ранее. Точка будет раздавать адреса из сети 192.168.2.0/24, для которой выделен vlan2. Для аутентификации и шифрования будет использоваться технология WPA2

Первым делом выключим сервер, вставим Wi-Fi-адаптер в PCI-слот и включим сервер. Система загрузится в обычном режиме, но в ней появится новый интерфейс - wlan0, который принадлежит адаптеру. Дальнейший план действий такой:

  1. Объединить интерфейсы wlan0 и vlan2 в br0;
  2. Изменить настройки файрвола под новую конфигурацию сетевых интерфейсов;
  3. Установить и настроить демон hostapd, который и будет сердцем нашей точки доступа.

Объединяем интерфейсы: первым делом "опустим" vlan2:

ifdown vlan2

Далее открываем в редакторе файл /etc/network/interfaces и находим там строки:

auto vlan2
iface vlan2 inet static
        address 192.168.2.1
        netmask 255.255.255.0
        network 192.168.2.0
        broadcast 192.168.2.255
        mtu 1500
        vlan_raw_device eth0

Их надо заменить на:

auto vlan2
iface vlan2 inet static
        address 0.0.0.0
        netmask 255.255.255.255
        mtu 1500
        vlan_raw_device eth0

auto br0
iface br0 inet static
        address 192.168.2.1
        netmask 255.255.255.0
        network 192.168.2.0
        broadcast 192.168.2.255
        bridge_ports vlan2 wlan0

Далее поднимаем интерфейсы:

ifup vlan2 && ifup br0

Отдельно остановимся на том, почему не обязательно указывать настройки для wlan0: при поднятий интерфейса типа "мост" (в данном случае это br0) утилита ifup предварительно пытается поднять все интерфейсы, являющиеся частью этого моста. Интерфейс wlan0 не требует специфических параметров и потому ifup поднимет его без проблем. А вот для vlan2 нужно как минимум указать "vlan_raw_device", ради чего и указывается его конфигурация.

Теперь открываем файл /root/scripts/firewall.sh и ищем строки:

# Разрешаем доступ к SSH из сети администрации комплекса:
iptables -A INPUT -m tcp -p tcp --dport 22 -s 192.168.2.0/255.255.255.0 -i vlan2 -j ACCEPT

# Разрешаем пересылку пакетов из сетей арендаторов наружу и поднимаем NAT для них.
# Здесь нам и пригодиться тот факт, что сеть 192.168.2.0/24 находится во vlan2,
# сеть 192.168.3.0/24 во vlan3 и так далее. Это позволит не писать много правил,
# а создавать их, используя цикл.
# Перебираем номера вланов от 2 до 15:
for vlanid in `seq 2 15`; do
        # Разрешаем пересылку пакетов из этого влана наружу:
        iptables -A FORWARD -i vlan${vlanid} -o ${IF_OUT} -s 192.168.${vlanid}.0/255.255.255 -j ACCEPT
        # Разрешаем пересылку пакетов снаружи в этот влан, но только в ответ на исходящие запросы:
        iptables -A FORWARD -i ${IF_OUT} -o vlan${vlanid} -d 192.168.${vlanid}.0/255.255.255 -m state --state RELATED,ESTABLISHED -j ACCEPT
        # NAT для подсети из этого влана:
        iptables -t nat -A POSTROUTING -s 192.168.${vlanid}.0/255.255.255 -j MASQUERADE -o ${IF_OUT}
        # Разрешаем использование нашего DNS из этого влана:
        iptables -A INPUT -m udp -p udp --dport 53 -s 192.168.${vlanid}.0/255.255.255 -i vlan${vlanid} -j ACCEPT
done

И меняем их на:

# Разрешаем работу со всеми интерфейсами внутри моста как с одним
# (правила для одного интерфейса будут автоматически действовать на все интерфейсы в рамках одного моста)
iptables -A FORWARD -m physdev --physdev-is-bridged -j ACCEPT

# Разрешаем доступ к SSH из этой подсети
iptables -A INPUT -m tcp -p tcp --dport 22 -s 192.168.2.0/255.255.255.0 -i br0 -j ACCEPT

# Пересылка пакетов между br0 и внешним интефейсом
iptables -A FORWARD -i br0 -o ${IF_OUT} -s 192.168.2.0/255.255.255 -j ACCEPT
iptables -A FORWARD -i ${IF_OUT} -o br0 -d 192.168.2.0/255.255.255 -m state --state RELATED,ESTABLISHED -j ACCEPT

# NAT для этой подсети
iptables -t nat -A POSTROUTING -s 192.168.2.0/255.255.255 -j MASQUERADE -o ${IF_OUT}

# Разрешаем использование DNS
iptables -A INPUT -m udp -p udp --dport 53 -s 192.168.2.0/255.255.255 -i br0 -j ACCEPT

# Перебираем номера vlan'ов
for vlanid in `seq 3 15`; do
        # Разрешаем пересылку пакетов из этого влана наружу:
        iptables -A FORWARD -i vlan${vlanid} -o ${IF_OUT} -s 192.168.${vlanid}.0/255.255.255 -j ACCEPT
        # Разрешаем пересылку пакетов снаружи в этот влан, но только в ответ на исходящие запросы:
        iptables -A FORWARD -i ${IF_OUT} -o vlan${vlanid} -d 192.168.${vlanid}.0/255.255.255 -m state --state RELATED,ESTABLISHED -j ACCEPT
        # NAT для подсети из этого влана:
        iptables -t nat -A POSTROUTING -s 192.168.${vlanid}.0/255.255.255 -j MASQUERADE -o ${IF_OUT}
        # Разрешаем использование нашего DNS из этого влана:
        iptables -A INPUT -m udp -p udp --dport 53 -s 192.168.${vlanid}.0/255.255.255 -i vlan${vlanid} -j ACCEPT
done

Применяем новый набор правил:

/root/scripts/firewall.sh

И последний шаг: установка и настройка hostapd. Для начала установим пакет:

apt-get install hostapd

Теперь открываем в редакторе файл /etc/hostapd/hostapd.conf. Снимаем комментарий со строки:

bridge=br0

Устанавливаем значение параметра "driver" в "nl80211":

driver=nl80211

Указываем имя нашей сети:

ssid=mega-net

Устанавливаем код страны, который ограничивает используемый диапазон частот разрешёнными в нашей стране величинами:

country_code=RU

Режим работы:

hw_mode=g

Используемый канал (от 0 до 15):

channel=6

Метод авторизации:

wpa=3

Пароль для доступа к нашей точке:

wpa_passphrase=s3cr3tp4assw0rd

Способ управления ключами:

wpa_key_mgmt=WPA-PSK

Способ шифрования:

wpa_pairwise=TKIP CCMP

В итоге файл примет вот такой вид (комментарии вырезаны):

interface=wlan0
bridge=br0
driver=nl80211
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
ssid=mega-net
country_code=RU
hw_mode=g
channel=6
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
wme_enabled=1
wme_ac_bk_cwmin=4
wme_ac_bk_cwmax=10
wme_ac_bk_aifs=7
wme_ac_bk_txop_limit=0
wme_ac_bk_acm=0
wme_ac_be_aifs=3
wme_ac_be_cwmin=4
wme_ac_be_cwmax=10
wme_ac_be_txop_limit=0
wme_ac_be_acm=0
wme_ac_vi_aifs=2
wme_ac_vi_cwmin=3
wme_ac_vi_cwmax=4
wme_ac_vi_txop_limit=94
wme_ac_vi_acm=0
wme_ac_vo_aifs=2
wme_ac_vo_cwmin=2
wme_ac_vo_cwmax=3
wme_ac_vo_txop_limit=47
wme_ac_vo_acm=0
eapol_key_index_workaround=0
eap_server=0
own_ip_addr=127.0.0.1
wpa=3
wpa_passphrase=s3cr3tp4assw0rd
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP

Теперь открываем файл "/etc/default/hostapd" и снимаем комментарий со строки:

RUN_DAEMON="yes"

И запускаем демона:

invoke-rc.d hostapd start

На этом настройку точки доступа можно считать законченной. Однако если надо чтобы клиенты, подключающиеся по Wi-Fi, получали IP-адреса автоматически нужно настроить DHCP-сервер. Если к описываемой сети уже был добавлен DHCP-сервер по этой инструкции то достаточно заменить в конфигурации все упоминания "vlan2" на "br0". Если DHCP нужен только для одной подсети и только на одном интерфейсе то можно воспользоваться более простой инструкцией.

На этом всё. Приятной работы!

Ключевые слова: wi-fi, dwa-510, hostapd, dhcp, wpa, хотспот.

Комментарии:

sungreen 2010-09-27 07:13:17 (#)

>> истема загрузится в обычном режиме, но в ней появится новый интерфейс - wlan0
... какой драйвер нужен? ...

MooSE 2010-09-27 12:31:52 (#)

Цитата:

>> истема загрузится в обычном режиме, но в ней появится новый интерфейс - wlan0
... какой драйвер нужен? ...


В убунте оно заводится без лишней возни с драйверами. Хватает того что вместе с ядром идёт. Так что не знаю:)

sungreen 2010-09-27 22:16:52 (#)

... поэтому поименование системы в статьях желательна ...

MooSE 2010-09-28 01:59:07 (#)

Цитата:

... поэтому поименование системы в статьях желательна ...


Сорри. Просто я тут вроде как сослался на предыдущую статью, подразумевая что мы не строим уж совсем всё с нуля, а модернизируем систему, которая описана там.
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE