Немного предыстории...
Озаботился я организацией точки доступа (далее просто ТД) давно, а у домашний роутер был без Wi-Fi. Была, конечно, мысль приобрести "навороченный" девайс, так сказать, "на вырост" и забыть. Поход по магазинам и etc. не увенчалась успехом - не позарился я на китайщину, а на топовые модели не глядел даже. Жаба не позволила.
И тут пришла в голову другая мысль. Ведь есть у меня PCI-карточки Wi-Fi и, если они могут принимать WiFi, значит должны его раздавать. Не долго думая, пошукал по сусекам и у меня оказалось в распоряжении 2 карточки:
Не буду описывать все этапы воплощения задуманного в жизнь. Поиск в интернете по фразе "создание точки доступа" давал много информации из которой я испробовал почти всё.
Первый заход был попыткой создания ТД на Windows 7 (XP устарела уже и, как оказалось, не умеет такого).
Результат в итоге плачевный. Слабый сигнал, в трёх метрах от ТД связь пропадала. Часто без причины падала сеть.
Второй заход, более удачный, был попыткой создания ТД на Debian 7.
Итог: Сигнал не пропадал по всей квартире. Сеть была стабильной. Интернет был доступен. Чего ещё надо-то?
А вот не угодил мне этот способ. Интернет есть, а ресурсы локальной сети напрямую недоступны, так как ТД имела свою сеть и была за NAT. непорядок.
Немного теории...
Совместимость оборудования
Как оказалось, не каждая карта Wi-Fi умеет работать в режиме Master, т.е. как ТД. Китайский noname сразу был назначен карточкой для проверки сети из-за невзрачного внешнего вида и хлипкой антеннки. А вот DWL-G550 и выглядела солидно на вид, и на деле имела нужное нам свойства - умела раздавать Wi-Fi.
А как определить уже установленное оборудование на предмет работы в AP (Acsses Point англ. - Точка Доступа)? Всё просто.
Идём в консоль (у нас же Debian, кстати, для Ubuntu тоже подходит ) и набираем команды:
Код: Выделить всё
$ lspci -vnn | grep Ethernet
# или
$ lspci -vnn | grep Wireless
# или для usb адаптера
$ lsusb -vnn | grep Wireless
Код: Выделить всё
lspci -vnn | grep Wireless
00:0a.0 Ethernet controller [0200]: Atheros Communications Inc. AR5212/AR5213 Wireless Network Adapter [168c:0013] (rev 01)
Subsystem: D-Link System Inc D-Link AirPremier DWL-G550 Wireless PCI Adapter [1186:3a18]
Код: Выделить всё
dmesg | grep Atheros
Код: Выделить всё
dmesg | grep Atheros
[ 6.671101] ath5k phy0: Atheros AR2414 chip found (MAC: 0x79, PHY: 0x45)
Установка и настройка программ.
Нам понадобится минимум пакетов:
Код: Выделить всё
apt-get install wireless-tools bridge-utils hostapd iw
Код: Выделить всё
nano /etc/network/interfaces
Код: Выделить всё
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
#Это старые настройки, я их
#закомментировал
#-------------------------------------------------------------------------------------------
#auto eth0
#iface eth0 inet static
# address 192.168.1.122
# netmask 255.255.255.0
# network 192.168.1.0
# broadcast 192.168.1.255
# gateway 192.168.1.1
# # dns-* options are implemented by the resolvconf package, if installed
# dns-nameservers 192.168.1.1
# dns-search lan
#-------------------------------------------------------------------------------------------
# С этого места начинаются наши настройки для ТП
auto eth0
iface eth0 inet manual
auto wlan0 br0
# Беспроводной интерфейс
iface wlan0 inet manual
pre-up iw dev wlan0 del
pre-up iw phy phy0 interface add wlan0 type __ap
# Мост.
iface br0 inet static
address 192.168.1.122
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
bridge_ports eth0 wlan0
Теперь настроим hostapd, который "рулит" нашей картой Wi-Fi.
Укажем путь к конфигу
Код: Выделить всё
nano /etc/default/hostapd
Код: Выделить всё
# Defaults for hostapd initscript
#
# See /usr/share/doc/hostapd/README.Debian for information about alternative
# methods of managing hostapd.
#
# Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration
# file and hostapd will be started during system boot. An example configuration
# file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz
#
DAEMON_CONF="/etc/hostapd/hostapd.conf"
# Additional daemon options to be appended to hostapd command:-
# -d show more debug messages (-dd for even more)
# -K include key data in debug messages
# -t include timestamps in some debug messages
#
# Note that -B (daemon mode) and -P (pidfile) options are automatically
# configured by the init.d script and must not be added to DAEMON_OPTS.
#
#DAEMON_OPTS=""
Код: Выделить всё
nano /etc/hostapd/hostapd.conf
Код: Выделить всё
# Интерфейс нашей карточки
interface=wlan0
# Имя используемого моста
bridge=br0
# Имя драйвера
driver=nl80211
# Код страны
country_code=RU
# Включаем интернациональные
# роуминговые расширения
ieee80211d=1
# Режим работы
hw_mode=g
# Номер канала
channel=11
# Логи всех модулей
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=My Wlan
# Если надо скрыть определение
# имени ТД, выставить 1
ignore_broadcast_ssid=0
#
auth_algs=3
#
eapol_key_index_workaround=0
#
eap_server=0
#
wpa=3
#
rsn_pairwise=CCMP
#Пароль от 8 до 63 символов
wpa_passphrase=My_Big_Secret
wpa_key_mgmt=WPA-PSK
#необязательная часть
#включаем фильтрацию по MAC, это необязательная опция
macaddr_acl=1
#указываем файл со списком разрешенных MAC
#подключиться к нашей ТД
#смогут только клиенты из списка
accept_mac_file=/etc/hostapd/accept
#
Насколько смог, собрал основные параметры и настройки с таблицу.
Смотрите под спойлером.
Код: Выделить всё
service hostapd restart
[ ok ] Stopping advanced IEEE 802.11 management: hostapd.
[FAIL] Starting advanced IEEE 802.11 management: hostapd failed!
Код: Выделить всё
hostapd -d /etc/hostapd/hostapd.conf
random: Trying to read entropy from /dev/random
Configuration file: /etc/hostapd/hostapd.conf
WPA-PSK enabled, but PSK or passphrase is not configured.
1 errors found in configuration file '/etc/hostapd/hostapd.conf'
Настройка iptables и ip форвардинга
Далее, нам нужно настроить хождение всех сетевых пакетов между интерфейсами в правильном направлении. Для этого создадим файл с правилами:
Код: Выделить всё
nano /etc/network/if-up.d/firewall
Код: Выделить всё
#! /bin/sh
#
#######################
# Настройка интерфейсов
#######################
# Internet (Поменяйте на ваш интернет-интерфейс)
Inet_Interface="eth0"
# Lan (поменяйте на ваш интерфейс сетевого моста)
Lan_Interface="br0"
# Lo (локальный интефейс - петля)
Lo_Interface="lo"
# Описываем путь до iptables
IPT="/sbin/iptables"
# Очищаем текущие правила (если вдруг есть какие-то правила)
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
# Задаем политики по умолчанию
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
# Создаем цепочку для обработки неправильных пакетов.
# bad_packets
$IPT -N bad_packets
$IPT -A bad_packets -p tcp --tcp-flags SYN,ACK SYN,ACK \
-m state --state NEW -j REJECT --reject-with tcp-reset
$IPT -A bad_packets -p tcp ! --syn -m state --state NEW \
-j LOG --log-prefix "New not syn:"
$IPT -A bad_packets -p tcp ! --syn -m state --state NEW -j DROP
# Создаем цепочку для обработки входящих (из интернета) tcp соединений.
# tcp_p
$IPT -N tcp_p
# Чтобы, например, разрешить подключаться к нашему шлюзу из интернета по ssh:
##ssh="22"
##ssh_ip_allowed="0/0"
##$IPT -A tcp_p -p tcp -s $ssh_ip_allowed --dport $ssh -j ACCEPT
$IPT -A tcp_p -p tcp -s 0/0 -j DROP
# Создаем цепочку для обработки входящих (из интернета) udp соединений.
# udp_p
$IPT -N udp_p
$IPT -A udp_p -p udp -s 0/0 -j DROP
# Создаем цепочку для обработки входящих (из интернета) icmp соединений.
# icmp_p
$IPT -N icmp_p
# Разрешаем "пинговать" наш шлюз из интернета:
$IPT -A icmp_p -p icmp -s 0/0 --icmp-type 8 -j ACCEPT
$IPT -A icmp_p -p icmp -s 0/0 --icmp-type 11 -j ACCEPT
$IPT -A icmp_p -p icmp -s 0/0 -j DROP
# Цепочка INPUT
$IPT -A INPUT -p tcp -j bad_packets
$IPT -A INPUT -p all -i $Lan_Interface -j ACCEPT
$IPT -A INPUT -p all -i $Lo_Interface -j ACCEPT
$IPT -A INPUT -p all -i $Inet_Interface -m state --state \
ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp -i $Inet_Interface -j tcp_p
$IPT -A INPUT -p udp -i $Inet_Interface -j udp_p
$IPT -A INPUT -p icmp -i $Inet_Interface -j icmp_p
# Цепочка FORWARD
$IPT -A FORWARD -p tcp -j bad_packets
$IPT -A FORWARD -p all -i $Lan_Interface -j ACCEPT
$IPT -A FORWARD -p all -i $Lo_Interface -j ACCEPT
$IPT -A FORWARD -p all -i $Inet_Interface -m state \
--state ESTABLISHED,RELATED -j ACCEPT
# Цепочка OUTPUT
$IPT -A OUTPUT -p tcp -j bad_packets
$IPT -A OUTPUT -p all -o $Inet_Interface -j ACCEPT
$IPT -A OUTPUT -p all -o $Lan_Interface -j ACCEPT
$IPT -A OUTPUT -p all -o $Lo_Interface -j ACCEPT
# Цепочка POSTROUTING (таблица nat)
$IPT -t nat -A POSTROUTING -o $Inet_Interface -j MASQUERADE
# Включаем перенаправление ipv4.
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "Firewall started"
exit 0
Код: Выделить всё
chmod +x /etc/network/if-up.d/firewall
После перезарузки сервера наша ТД поднимется автоматически и будет находиться в адресном пространстве локальной сети. После подключения: Удачи!