Гостевой 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"Обсуждение темы ещё не открыто. Вы можете быть первым.
Оставить комментарий