Asus Eee как сервер: настройка роутера

27 Feb 2010

Внимание! Эта статья написана давно и валяется тут исключительно в исторических целях!

Итак, сегодня речь пойдет о настройке роутера. Ее мы разелим на две части: настройка точки доступа и настройка файрвола. Поехали!

Настройка точки доступа

На этом шаге отбросьте желание поднять ad-hoc, если конечно вы не хотите чтобы ваш интернет утекал всем кому не лень. В Linux для ad-hoc поддерживается только WEP шифрование, которое достаточно легко взламывается. Для того, чтобы использовать WPA необходимо использовать вашу WiFi-карту в режиме точки доступа (она же Master), а для этого, в свою очередь, надо установить демон hostapd, который (с того времени, как данную функциональность убрали из драйверов madwifi) занимается точками доступа:

# pacman -S hostapd

Демон несложен в настройке, его конфигурационные файлы хранятся в /etc/hostapd/, главный из которых – hostapd.conf – отвечает за непосредственные настройки вашей карты и сети, которую вы собираетесь поднимать. Он достаточно подробно документирован на английском, я лишь покажу свой конфиг:

# Интерфейс на котором поднимается точка доступа
interface=wlan0

# Уровни логгирования
# 2 значит информационные сообщения
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2

# Файл, куда скидывается дамп hostapd при SIGUSR1
dump_file=/tmp/hostapd.dump

# Интерфейс для параллельного контроля надо hostapd и группа, которая имеет к нему доступ
ctrl_interface=/var/run/hostapd
ctrl_interface_group=wheel

# Название сети, ревизия протокола (a, b, g) и канал
ssid=dancingrobot84
hw_mode=g
channel=5

# Файлы, в которых хранятся разрешенный/запрещенный MAC-адреса клиентов
# У меня в свое время тут что-то на срослось, а разбираться было лень, поэтому - под коммент!
# accept_mac_file=/etc/hostapd.accept
# deny_mac_file=/etc/hostapd.deny

# Алгоритмы аутентификации: 1 - Open System, 2 - Shared Key(WEP)
# На самом деле, не особо нужны, так как все равно будет WPA
auth_algs=3

# Версия WPA: 0 - WPA, 1 - WPA2(RSN)
wpa=1

# Зашифрованный ключ доступа
# Генерируется через wpa_passphrase
wpa_psk=5617e735b00fd89b889c9e8031d30ac1205f8873466168e65f1e624f626a63ca

# Незашифрованный пароль
# wpa_passphrase=qweasd

# Разрешенные алгоритмы для операции над ключами
# У меня нет крутого Enterprise сервера для авторизации, поэтому просто Personal Shared Key
wpa_key_mgmt=WPA-PSK

# Разрешенные алгоритмы шифрования для WPA и WPA2(RSN)
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP

Если вы поднимаете только роутер для домашней раздачи интернета и не собираетесь использовать Eee в качестве сервера, то имеет смысл не возиться с форвардингом и соединить интерфейс точки доступа и интернета мостом. Как это сделать я писать не буду, достаточно перейти сюда и почитать несколько первых ссылок. А мы продолжаем.

Настройка файрвола и форвардинг

Вся вышеописанная конструкция не будет раздавать интернет пока мы не настроим должным образом файрволл. Я не использую чистый iptables, потому что нет времени сесть и разобраться в его монструозных настройках. Вместо этого существует несколько различных надстроек, упрощающих конфигурирование iptables. Я рекомендую firehol, потому что он, на мой взгляд, достаточно простой и понятный. Итак, устанавливаем:

# pacman -S firehol

Запускается он как и любой другой демон через /etc/rc.d, настройки хранятся в /etc/firehol/firehol.conf. Конфигурационный файл имеет простой и понятный синтаксис, полную документацию по настройке можно найти на официальном сайте. Я, как обычно, лишь покажу свой конфиг с комментариями:

# Настраиваем интерфейс на котором у нас интернет
interface eth0 internet
        # По-умолчанию просто дропаем все пакеты
        policy drop

        # Включаем защиту от разного рода флуда и неправильных пакетов
        protection strong

        # На своем сервере я запретил пинг. Раскомментируйте эту строку, чтобы разрешить его.
        # server icmp accept

        # Как говорит офф мануал, "некоторые серверы пытаются идентифицировать пользователя,
        # отправившего запрос. С текущими правилами они получат лишь таймаут, а чтобы ускорить процесс
        # пишем эту строчку"
        server ident reject with tcp-reset

        # Сервера ниже разрешены
        server http accept
        server custom tcp-torrent tcp/51111 any accept
        server custom udp-torrent udp/51111 any accept

        # Клиенты нам нужны все, разрешаем
        client all accept


# Это интерфейс точки доступа
# У меня всего один ноутбук, адрес ему выдается статический, поэтому ограничиваю источник только
# этим адресом: в случае взлома точки хакеру придется также подбирать и IP адрес чтобы иметь доступ в
# интернет
interface wlan0 wifi src "192.168.42.2"

        # drop - это достаточно строго. В своей сети можно и помягче быть, поэтому ставим reject
        # В отличие от drop он отправляет нам ответ о запрещенном соединении, а не просто бросает наш
        # ждать таймаута
        policy reject

        # Нижеперечисленные сервера доступны во внутренней сети, а клиенты заблокированы, потому что
        # никаких клиентов на точке доступа быть не должно
        server "http dhcp dns ftp ssh icmp" accept
        client all reject

# Настройки форвардинга интернета с eth0 на wlan0
router wifi2net inface wlan0 outface eth0 src "192.168.42.2"
        # Маскарадим пакеты, потому что клиент наш не имеет 'белого' адреса
        masquerade
        # Принимаем любые перенаправления
        route all accept


router net2wifi inface eth0 outface wlan0
        # См. описание про indent выше, в секции настроек eth0
        route ident reject with tcp-reset

С файрволом разобрались, осталось лишь разрешить в системе форвардинг пакетов. Меняем в /etc/sysctl.conf:

net.ipv4.ip_forward=1

и чтобы не перезагружаться выполняем:

# echo 1 > /proc/sys/net/ipv4/ip_forward

или:

# sysctl -p

Готово! Теперь после подключения по WiFi вы должны иметь на своем клиенте рабочий интернет.

Замечания по WiFi

В моей конфигурации присутствует два компьютера: непосредственно Eee 900 и мой рабочий ноутбук Samsung R560. Я сознательно опустил настройку dhcpd, потому что использую статические адреса на обоих ноутбуках. Если же у вас достаточно много компьютеров в наличии или у вас публичная точка доступа, то необходимо позаботится о том, чтобы IP адреса не конфликтовали. Самый удобный способ - раздавать их через вышеупомянутый dhcpd.

Устанавливаем как и все остальное:

# pacman -S dhcp

Конфигурация находится в /etc/dhcpd.conf и, как всегда, отлично документирована и снабжена примерами. Мой же файл выглядит так:

# Времена выдачи IP адреса (по умолчанию и максимальное, думаю, что в секундах).
default-lease-time 600;
max-lease-time 7200;

# Этот dhcp-сервер единственый и, конечно, официальный
authoritative;

# Вот и наша сеть
subnet 192.168.42.0 netmask 255.255.255.252 {
        # Интерфейс
        interface wlan0;
        # Диапазон сети
        range 192.168.42.1/30;
        # DNS-сервера по-умолчанию
        option domain-name-servers 84.22.140.1, 84.22.142.2, 208.67.222.222, 208.67.220.220;
        # Адрес нашего сервера, раздающего интернет
        # Будет шлюзом у клиента
        option routers 192.168.42.1;
        # Широковещательный адрес
        option broadcast-address 192.168.42.0;
}

Готово! Теперь dhcpd будет автоматически выбирать и давать адреса из диапазона 192.168.42.1/30. Этот диапазон довольно узкий (всего два IP-адреса и один уже занят роутером), так что для вашей сети подбирайте маску самостоятельно.