Гостевой Wi-Fi.

Сейчас всё больше популярности набирает функция "гостевой Wi-Fi" в домашних роутерах. Основная идея состоит в том, чтобы пришедшим к вам в гости людям дать доступ в интернет, при этом не рискуя ресурсами своей домашней сети и освобождаясь от необходимости каждый раз менять пароль к своему домашнему Wi-Fi. Технически роутер создает ещё одну "виртуальную" точку доступа, изолированую от ресурсов домашней сети и изолируя пользователей гостевого Wi-Fi друг от друга. TCL позволяет осуществить это всего за три шага. Итак, поехали...

Вначале нам нужно заставить hostapd создать ещё одну виртуальную точку доступа. Но перед тем как лезть в конфигурационный файл, нам придётся сменить MAC-адрес беспроводного сетевого адаптера. Его последняя цифра должна обязательно равняться нулю. hostapd позволяет поднимать до 15-ти виртуальных точек доступа в диапазоне МАС адресов различающимися между собой лишь последней цифрой.


ifconfig wlan0 down
ifconfig wlan0 hw ether 00:15:AF:26:8F:D0
ifconfig wlan0 up

У вас MAC-адрес будет другой, главное сменить только последнюю цифру на ноль. Адаптер подготовлен, открываем конфигурационный файл и добавляем туда следующие строчки:

/opt/conf/hostapd

 ...
bssid=00:15:AF:26:8F:D0

#гостевой Wi-Fi:
 bss=wlan0_0
 ssid=guest_AP
 wpa=2
 wpa_key_mgmt=WPA-PSK
 wpa_passphrase=[гостевой пароль]

 ...

Это минимальные настройки создающие виртуальную защищенную точку доступа. Параметр bss создаст новый VWLAN (Virtual Wireless Local Area Network) с именем wlan0_0. Перезапускаем hostapd. Если всё сделано правильно, то команда

ifconfig wlan0_0

Вернет вам информацию о созданом VWLAN. Далее работаем с ним как с обычным сетевым адаптером. Назначаем ему статический IP, чтобы на нем запустить DHCP-сервер для гостей.

ifconfig wlan0_0 192.168.100.1 netmask 255.255.255.0

Так как я отказался от dnsmasq в пользу уже встроенного в TCL легковесного udhcpd, то для гостей использовать будем именно его. К сожалению этот сервер не умеет работать разделенно на несколько интерфейсов, поэтому единственным решением будет запустить ещё один udhcpd параллельно с DHCP-сервером обслуживающим нашу домашнюю локальную сеть. Создаем копию конфигурационного файла и меняем там несколько строк:

/opt/conf/udhcpd0_0.conf

 ...
 interface wlan0_0
 start 192.168.100.2
 end 192.168.100.32
 pidfile /var/run/udhcpd0_0.pid
 lease_file /var/lib/misc/udhcpd0_0.leases
 ...

Запускаем DHCP-сервер

udhcpd /opt/conf/udhcpd0_0.conf

В принципе, если правила iptables обнулены то уже на данном этапе можно будет подключиться к точке доступа с именем guest_AP и получить динамический IP из пула адресов 192.168.100.2-32. теперь осталось посредством правил iptables задействовать NAT и изолировать клиетов гостевой сети друг от друга. Тут также работает главный принцип сетевой безопасности - "запретить всё что не разрешено явно". Поэтому правила фаерволла для моей конфигурации будут такими:

/opt/conf/ip4tables

#!/bin/sh
#----------------- IPTABLES IPv4 --------------------
# Очистить все правила
 iptables -P INPUT ACCEPT
 iptables -P FORWARD ACCEPT
 iptables -P OUTPUT ACCEPT
 iptables -t nat -P PREROUTING ACCEPT
 iptables -t nat -P POSTROUTING ACCEPT
 iptables -t nat -P OUTPUT ACCEPT
 iptables -t mangle -P PREROUTING ACCEPT
 iptables -t mangle -P OUTPUT ACCEPT
 iptables -F
 iptables -t nat -F
 iptables -t mangle -F
 iptables -X
 iptables -t nat -X
 iptables -t mangle -X

# ЗАПРЕЩАЕМ все входящие соединения:
  iptables -P INPUT DROP
# ЗАПРЕЩАЕМ весь транзитный траффик:
  iptables -P FORWARD DROP
# РАЗРЕШАЕМ весь исходящий траффик:
  iptables -P OUTPUT ACCEPT

# Локальная сеть
 LOCAL_NET="192.168.1.0/24"
# Гостевая сеть
 GUEST_NET="192.168.100.0/24"
 GUEST_IF="wlan0_0"

# Интерфейс, смотрящий в интернет
 INET_IF="ppp0"

# Белый IP адрес, принадлежащий $INET_IF
 INET_IP=$(ifconfig $INET_IF | grep -o -E "inet addr:[0-9.]+" | grep -o -E "[0-9.]+")

### NAT
# Включить NAT для локальной подсети:
 iptables -t nat -A POSTROUTING -s $LOCAL_NET -o $INET_IF -j SNAT --to-source $INET_IP
# Включить NAT для гостевой подсети:
 iptables -t nat -A POSTROUTING -s $GUEST_NET -o $INET_IF -j SNAT --to-source $INET_IP

### INPUT
# Разрешить входящие соединения с локалхоста 127.0.0.1:
 iptables -A INPUT -i lo -j ACCEPT

# Разрешить принимать все входящие уже установленные (ESTABLISHED) соединения:
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешить весь таффик в локальной сети:
 iptables -A INPUT -i br0 -j ACCEPT

#разрешить обращаться к DHCP серверу гостевым подключениям:
 iptables -A INPUT -p UDP -i $GUEST_IF --dport 67 -j ACCEPT

### FORWARD
# Разрешить транзит траффика уже установленных соединений:
 iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешить машинам локальной сети ходить в интернет по ЛЮБЫМ TCP/UDP портам
 iptables -A FORWARD -p TCP -s $LOCAL_NET -j ACCEPT
 iptables -A FORWARD -p TCP -d $LOCAL_NET -j ACCEPT
 iptables -A FORWARD -p UDP -s $LOCAL_NET -j ACCEPT
 iptables -A FORWARD -p UDP -d $LOCAL_NET -j ACCEPT

# Разрешить машинам гостевой сети ходить в интернет по ЛЮБЫМ TCP/UDP портам
 iptables -A FORWARD -p TCP -s $GUEST_NET -j ACCEPT
 iptables -A FORWARD -p TCP -d $GUEST_NET -j ACCEPT
 iptables -A FORWARD -p UDP -s $GUEST_NET -j ACCEPT
 iptables -A FORWARD -p UDP -d $GUEST_NET -j ACCEPT

Это лишь пример настроек, из которого видно, что пользователям гостевой сети дозволен лишь транзитный траффик и обращение к порту 67, который прослушивается гостевым DHCP-сервером. Не стоит также забывать, что все виртуальные точки доступа обслуживаются одним и тем же адаптером. Это значит что скорость передачи данных будет равномерно распределяться между всеми клиентами беспроводной сети.

ранее: "Служба автозапуска"далее: "Ускоряем Tiny Core Linux"

Обсуждение темы ещё не открыто. Вы можете быть первым.


Оставить комментарий

Имя:

Сообщение: