Домашний сервер на CentOS 6. Часть 2. Hostapd+dnsmasq.
Считаем, что CentOS 6.2 уже установлен. Установка операционной системы CentOS 6.2 процесс не сложный и широко описывается на просторах интернета. Более того, есть даже ролики на YouTube. Поэтому я не буду заострять внимание на этом. Скажу лишь, что я устанавливаю CentOS в комплектации Minimum, ну а затем устанавливаю по ходу нужные пакеты или собираю из исходников.
Сегодня мы будем собирать hostapd. Он будет выполнять работу точки доступа, управлять беспроводным устройством TL-WN722NC, шифровать данные и т.д. Вместе с ним будет использоваться dnsmasq, который может работать в качестве DHCP сервера и раздавать подключившимся клиентам IP адреса. Также dnsmasq будет перенапрвлять DNS запросы на внешний DNS сервер, т.е. будет неким DNS Forwarder’ом. Итак приступим.
Установка Hostapd (точка доступа)
Как я уже писал выше, для подключения беспроводных клиентов к серверу у нас будет использоваться устройство TL-WN722NC. Оно будет работать в режиме Access Point (AP). Подключаем устройство в USB, устанавливаем пакет usbutils:
yum install usbutils
Выполняем команду lsusb
lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n
Наш адаптер TL-WN722NC на чипсете Atheros AR9271.
На странице http://wireless.kernel.org/en/users/Drivers/ath9k_htc можно увидеть, что нам нужны драйвера ath9k_htc.
Ядро в CentOS 6.2 (kernel-2.6.32-220.4.1.el6.x86_64) не имеет поддержку ath9k_htc, поэтому нам нужно более свежее ядро, скомпилированное со следующими опциями:
CONFIG_ATH_COMMON=m
CONFIG_ATH9K_HW=m
CONFIG_ATH9K_COMMON=m
CONFIG_ATH9K_HTC=m
На 32 разрядной CentOS 6.2 я собирал ядро руками по следующей инструкции: http://cs-aul.ru/showthread.php?t=1789 и все было замечательно. При сборке ядра (kernel-3.2.2) на 64 разрядной системе, CentOS отказывался запускаться. И не удивительно, в вики CentOS’а, крайне не рекомендуют собирать ядро самому (http://wiki.centos.org/HowTos/Custom_Kernel).
Но не все так плохо. Для поддержки ath9k_htc, можно использовать последнее ядро на текущий момент kernel-ml-3.2.2-0.el6.elrepo.x86_64 из репозитория elrepo.org.
Добавляем репозиторий в систему:
rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://elrepo.org/elrepo-release-6-4.el6.elrepo.noarch.rpm
Откываем файл /etc/yum.repos.d/elrepo.repo и меняем в секции [elrepo-kernel] параметр enabled на 1 (enabled=1). Устанавливаем новое ядро:
yum install kernel-ml
Редактируем файл /boot/grub/grub.conf и меняем параметр default на 0 (default=0). Это необходимо, чтобы система автоматически загружалась с новым ядром.
Перезагружаемся. Проверяем поддержку ath9k_htc:
modprobe -l |grep ath9k
kernel/drivers/net/wireless/ath/ath9k/ath9k.ko
kernel/drivers/net/wireless/ath/ath9k/ath9k_hw.ko
kernel/drivers/net/wireless/ath/ath9k/ath9k_common.ko
kernel/drivers/net/wireless/ath/ath9k/ath9k_htc.ko
То что нам нужно.
Скачиваем последние версии firmware map AR9271 — htc_9271.fw и AR7010 — htc_7010.fw отсюда http://linuxwireless.org/download/htc_fw/ и кладем их в /lib/firmware/. Перезагружаемся.
После перезагрузки должен появиться новый беспроводной сетевой интерфейс, смотрим командой ifconfig -a:
mon.wlan0 Link encap:UNSPEC HWaddr B0-48-7A-89-39-D6-80-BE-00-00-00-00-00-00-00-00
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:182 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:30466 (29.7 KiB) TX bytes:0 (0.0 b)
wlan0 Link encap:Ethernet HWaddr B0:48:7A:89:39:D6
inet6 addr: fe80::b248:7aff:fe89:39d6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:73 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:9855 (9.6 KiB) TX bytes:576 (576.0 b)
У меня в системе интерфейс eth0 подключен к интернет провайдеру, это будет WAN интерфейс. Остальные интерфейсы eth1 и wlan0 мы объединим в бридж интерфейс br0 — это будет LAN.
Создаем конфигурационные файлы ifcfg-eth1, ifcfg-wlan0 и ifcfg-br0 в каталоге /etc/sysconfig/network-scripts/
ifcfg-eth1:
DEVICE=eth1
HWADDR=00:15:17:23:B6:A4
NM_CONTROLLED=no
ONBOOT=yes
IPV6INIT=no
BRIDGE=br0
ifcfg-wlan0:
DEVICE=wlan0
HWADDR=B0:48:7A:89:39:D6
NM_CONTROLLED=no
ONBOOT=yes
IPV6INIT=no
BRIDGE=br0
ifcfg-br0:
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
BROADCAST=192.168.0.255
IPADDR=192.168.0.1
NETMASK=255.255.255.0
NETWORK=192.168.0.0
ONBOOT=yes
IPV6INIT=no
Для работы бриджа необходимо установить пакет bridge-utils
yum install bridge-utils
Для работы беспроводного интерфейса нам потребуется пакет wireless-tools
yum install wireless-tools
Перезагружаем сетевую службу
service network restart
Теперь нам необходимо скомпилировать последний на текущий момент hostapd-0.7.3. Для компиляции нам понадобятся следующие пакеты: kernel-ml-devel, kernel-ml-headers, make, gcc-c++, gcc, libgcc, binutils, openssl, openssl-devel, libnl-devel, libnl. Устанавливаем эти пакеты через yum.
Скачиваем последнюю версию исходников hostapd на сайте http://w1.fi/hostapd/. Я скачивал последнюю версию hostapd-0.7.3.tar.gz. Распаковываем архив и переходим в каталог hostapd. Нам нужно создать файл конфигурации .config (в качестве примера можно использовать defconfig). Копируем конфиг по умолчанию defconfig в .config:
cp defconfig .config
Правим конфигурационный файл. У меня получился такой:
# Driver interface for drivers using the nl80211 kernel interface
CONFIG_DRIVER_NL80211=y
# driver_nl80211.c requires a rather new libnl (version 1.1) which may not be
# shipped with your distribution yet. If that is the case, you need to build
# newer libnl version and point the hostapd build to use it.
LIBNL=/usr/src/libnl
CFLAGS += -I$(LIBNL)/include
LIBS += -L$(LIBNL)/lib
# IEEE 802.11F/IAPP
CONFIG_IAPP=y
# WPA2/IEEE 802.11i RSN pre-authentication
CONFIG_RSN_PREAUTH=y
# PeerKey handshake for Station to Station Link (IEEE 802.11e DLS)
CONFIG_PEERKEY=y
# Integrated EAP server
CONFIG_EAP=y
# EAP-MD5 for the integrated EAP server
CONFIG_EAP_MD5=y
# EAP-TLS for the integrated EAP server
CONFIG_EAP_TLS=y
# EAP-MSCHAPv2 for the integrated EAP server
CONFIG_EAP_MSCHAPV2=y
# EAP-PEAP for the integrated EAP server
CONFIG_EAP_PEAP=y
# EAP-GTC for the integrated EAP server
CONFIG_EAP_GTC=y
# EAP-TTLS for the integrated EAP server
CONFIG_EAP_TTLS=y
# PKCS#12 (PFX) support (used to read private key and certificate file from
# a file that usually has extension .p12 or .pfx)
CONFIG_PKCS12=y
# IEEE 802.11n (High Throughput) support
CONFIG_IEEE80211N=y
Собираем hostapd командой make и устанавливаем командой make install. Если что-то не компилируется, то значит не хватает каких-то пакетов.
Hostapd установлен и готов к использованию.
Конфигурируем hostapd в файле /etc/hostapd/hostapd.conf. Такого каталога нет, поэтому его вместе с файлом нужно создать самостоятельно. Мой конфиг hostapd.conf:
interface=wlan0
bridge=br0
driver=nl80211
hw_mode=g
channel=9
country_code=JP
ieee80211n=1
wmm_enabled=1
#read this http://val-khmyrov.blogspot.com/2011/05/ieee-8021g-ieee-8021n.html
ht_capab=[HT40-][GF][SHORT-GI-20][SHORT-GI-40][RX-STBC1][DSSS_CCK-40]
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
#debug=0
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
ssid=billiards
ignore_broadcast_ssid=0
auth_algs=3
wpa=3
wpa_passphrase=secret
wpa_key_mgmt=WPA-PSK
Я умышленно буду приводить сухие конфиги, т.к. описывать их бумаги не хватит, что непонятно можно спросить в камментах или у гугля Ещё советую почитать замечательную статью http://val-khmyrov.blogspot.com/2011/05/ieee-8021g-ieee-8021n.html
После компиляции нам нужно создать скрипт для автоматического запуска hostapd. Я взял скрипт из какого-то rpm пакета hostapd и немного его изменил:
/etc/init.d/hostapd
#!/bin/bash
#
# hostapd
#
# chkconfig: - 23 88
# description: hostapd is a user space daemon for access point and
# authentication servers. It implements IEEE 802.11 access point
# management, IEEE 802.1X/WPA/WPA2/EAP Authenticators and RADIUS
# authentication server.
# processname: hostapd
# config: /etc/hostapd/hostapd.conf
#
### BEGIN INIT INFO
# Provides: hostapd
# Required-Start: $network
# Required-Stop: $network
# Default-Start:
# Default-Stop: 0 1 6
# Short-Description: start and stop hostapd
# Description: IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
exec="/usr/local/bin/hostapd"
prog=hostapd
conf="/etc/hostapd/hostapd.conf"
lockfile=/var/lock/subsys/$prog
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
start() {
echo -n $"Starting $prog. "
daemon $exec -B $OTHER_ARGS $conf
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog. "
killproc $prog
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
restart
}
force_reload() {
restart
}
fdr_status() {
status $prog
}
case "$1" in
start|stop|restart|reload)
$1
;;
force-reload)
force_reload
;;
status)
fdr_status
;;
condrestart|try-restart)
[ -f $lockfile ] && restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload}"
exit 1
esac
Назначаем права скрипту и ставим его в автозагрузку:
chmod 755 hostapd
chkconfig hostapd on
service hostapd start
Теперь hostapd будет стартовать вместе с системой.
Установка Dnsmasq (DHCP и DNS Forwarder)
Тут все просто.
yum install dnsmasq
Правим конфиг /etc/dnsmasq.conf. У меня такой:
# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv
# If you want dnsmasq to listen for DHCP and DNS requests only on
# specified interfaces (and the loopback) give the name of the
# interface (eg eth0) here.
# Repeat the line for more than one interface.
interface=br0
# Uncomment this to enable the integrated DHCP server, you need
# to supply the range of addresses available for lease and optionally
# a lease time. If you have more than one network, you will need to
# repeat this for each network on which you want to supply DHCP
# service.
dhcp-range=192.168.0.50,192.168.0.150,12h
Настраиваем автозапуск.
chkconfig dnsmasq on
service dnsmasq start
На этом все. Переходим к следующей части: Домашний сервер на CentOS 6. Часть 3. Установка и настройка Samba.
Добрый день. Помогите мне поялуиста cоздать точку доступа на Centos 6.3
У менея маленкии ноутбоок. На нем 1 LAN eth0 карта и одна WiFI wlan0 карта.
eth0 LAN карта подклучена к интернету.
WiFI wlan0 карту хочу исполизовать как точку достуа для других компютеров, телефонов дома.
Настроил /etc/sysconfig/network-scripts/: eth0 wlan0 br0, но после етого интернет не работает.
Установил вроде все что требуется.
Спасибо
Приведите тут конфигурационные файлы сетевых интерфейсов.
Не работает какается
nl80211 driver initialization failed.
и все тут
Хотя на debian все работало с этой картой (ar9285)
Esli u menya v laptope 2 wi-fi (built-in i vneshnij) mogu ja ne sozdavat vse eti bridgi? to est kak-to nastroit dopustim odina kartochka vsegda listen , drugaya naoborot otpravlaet na router dannye?
interesno kak eto nastroit?