AllInfo
Main: Info Blog Temp Mail


unix 2012-01-01 14-11-36

Руководство по развертыванию домашнего маршрутизатора


1. Введение

По признанию Linksys, сборка собственного маршрутизатора из старых деталей имеет множество преимуществ перед покупкой специализированного маршрутизатора. Одним из самых больших является контроль над соединениями. Другие преимущества оставим вашему воображению. Все, что может быть сделано по этому руководству, будет хорошим подспорьем для этого.

В этом руководстве рассказывается, как вам создать трансляцию сетевых адресов (NAT) на маршрутизаторе (на базе ядра Linux и iptables), добавить и настроить распространенные сервисы (систему доменных имен (DNS) с помощью dnsmasq, протокол динамической конфигурации хоста (DHCP) с помощью dhcpcd, ADSL с помощью rp-pppoe) и завершить настройку более детальной разработкой и интересными вещами (проброс портов, ограничение трафика, прокси/кэширование и многое другое...).

Перед тем, как начать, вы должны отвечать нескольким базовым требованиям. Во-первых, вам понадобится компьютер, в котором установлены не менее 2 сетевых карт (NIC). Во-вторых, вам понадобятся параметры настроек вашего соединения к интернету (возможно, включая параметры IP/DNS/шлюза/имени пользователя/пароля). Наконец, вам понадобится немного времени и любовь к ОС Gentoo.

Соглашения, используемые в данном руководстве:

eth0 — сетевая карта, подключенная к локальной вычислительной сети (LAN)
eth1 — сетевая карта, подключенная внешней сети (WAN)
в LAN используется частная сеть с адресами 192.168.0.xxx
маршрутизатору в соответствии со стандартами присвоен IP-адрес 192.168.0.1
маршрутизатор работает под управлением ОС Linux с ядром 2.4 или 2.6; вы можете попробовать у себя ядра 2.0/2.2
Важно: Из соображений безопасности, я настоятельно рекомендую вам отключить ненужные сервисы на маршрутизаторе, пока мы не установим межсетевой экран и не заставим его работать. Чтобы просмотреть запущенные сервисы, наберите rc-status.
2. Настройка ядра (сначала познай себя)

Вашему ядру нужны драйверы, работающие для обеих сетевых карт. Чтобы просмотреть, определены ли ваши карты системой, наберите ifconfig. Ваш вывод программы может несколько отличаться от нижеприведенного, это нормально. Важно то, что интерфейсы полностью отображены.

Листинг 2.1: Проверка сетевых карт
# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:60:F5:07:07:B8
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 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:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:11 Base address:0x9800

eth1 Link encap:Ethernet HWaddr 00:60:F5:07:07:B9
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 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:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:10 Base address:0x9400
Если вы не увидели ваши две карты и вы не уверены, какие карты у вас есть, попробуйте запустить lspci | grep Ethernet из пакета pciutils. Как только вы получите эту информацию, переходите к конфигурированию ядра и добавьте поддержку соответствующих драйверов.

Следующим шагом включите поддержку межсетевого экрана iptables и NAT (а также ограничителя пакетов, если вам он нужен). Приведенный список разделен на обязательные (*), обязательные для ADSL через PPPoE (a), рекомендуемые (x) функции и функции для ограничителя трафика (s). Неважно, как вы будете осуществлять их поддержку — в самом ядре или в качестве модулей, если функция будет затребована, соответствующий модуль будет загружен (загрузка модуля оставлена для читателя как занимательное для любого упражнение).

Листинг 2.2: Сетевые функции
Networking options --->
[*] TCP/IP networking
[*] IP: advanced router
[*] Network packet filtering (replaces ipchains)
Если вы используете ядро 2.4.x, вам понадобится включить следующее для DHCP:
[*] Socket Filtering

IP: Netfilter Configuration --->
[*] Connection tracking (required for masq/NAT)
[x] FTP protocol support
[x] IRC protocol support
[*] IP tables support (required for filtering/masq/NAT)
[*] IP range match support
[x] MAC address match support
[*] Multiple port match support
[*] Packet filtering
[*] REJECT target support
[x] REDIRECT target support
[*] Full NAT
[*] MASQUERADE target support
[s] Packet mangling
[s] MARK target support
[x] LOG target support

QoS and/or fair queueing --->
[s] QoS and/or fair queueing
[s] HTB packet scheduler
[s] Ingress Qdisc

[a] PPP (point-to-point protocol) support
[a] PPP filtering
[a] PPP support for async serial ports
[a] PPP support for sync tty ports
[a] PPP Deflate compression
[a] PPP BSD-Compress compression
[a] PPP over Ethernet
Примечание: Что-то может немного отличаться между ядрами веток 2.4 и 2.6, но вы в этом разберетесь сами :). Даже для ядер 2.6 эти параметры имеют тенденцию перемещаться по меню. Так что удачи!
3. Подключение к WAN (или к интернету)

Введение

Есть множество способов подключиться к интернету, поэтому я рассмотрю те, в которых хорошо разбираюсь сам. Остановимся на ADSL (PPPoE) и кабельном подключении (с использованием статических/динамических IP-адресов). Если другие способы не описаны здесь, смело пишите небольшое руководство и отправляйте мне по электронной почте. Вы можете смело пропускать следующие разделы, не касающиеся вас. В этой главе описывается подключение маршрутизатора к интернету через интерфейс eth1.

ADSL и PPPoE

Все разнообразное ПО для PPPoE было объединено в один замечательный маленький пакет, именуемый ныне Roaring Penguin (Хохочущий Пингвин — прим. пер.). Просто наберите emerge rp-pppoe и вы будете на правильном пути. Помните, я говорил, что вам может понадобиться информация о имени пользователя и пароле? Что ж, я не лгал и я надеюсь, что она у вас есть! Загрузите /etc/ppp/pppoe.conf в ваш любимый текстовый редактор и внесите ее в файл.

Примечание: Для того, чтобы следующие настройки работали, у вас должен быть установлен baselayout-1.11.14 или выше в вашей системе.
Листинг 3.1: Настройка eth1
(Замените "vla9h92" вашим именем пользователя и "password" вашим паролем)

# nano /etc/ppp/pap-secrets
# клиент сервер пароль
"vla9h924" * "password"
# nano /etc/conf.d/net
Укажите baselayout использовать adsl в качестве eth1:
config_eth1=( "adsl" )
user_eth1=( "vla9h924" )
# ln -s net.lo /etc/init.d/net.eth1
# rc-update add net.eth1 default
# /etc/init.d/net.eth1 start
Предупреждение: Когда поднимется DSL-интерфейс, создастся устройство ppp0. Хотя ваша сетевая карта называется eth1, IP-адрес на самом деле будет привязан к ppp0. Теперь, когда вы увидете в примерах использование «eth1», замените его на «ppp0».
Кабельное соединение и/или динамические/статические IP-адреса

Если у вас статический IP-адрес, то, по сравнению с динамическим IP-адресом, вам потребуется несколько больше параметров настроек. Дополнительно вам понадобится ваш IP-адрес, адреса шлюза и DNS-серверов.

Листинг 3.2: Настройка eth1
Для пользователей с динамическим IP-адресом:
# emerge dhcpcd
# nano /etc/conf.d/net
Добавьте параметр, подобный этому:
config_eth1=( "dhcp" )

Для пользователей со статическим IP-адресом:
# nano /etc/conf.d/net
Добавьте параметры, подобные этим:
config_eth1=( "66.92.78.102 broadcast 66.92.78.255 netmask 255.255.255.0" )
routes_eth1=( "default gw 66.92.78.1" )
# nano /etc/resolv.conf
Добавьте по одной строке на каждый DNS-сервер:
nameserver 123.123.123.123

Настройки для обоих вариантов:
# ln -s net.lo /etc/init.d/net.eth1
# rc-update add net.eth1 default
# /etc/init.d/net.eth1 start
У вас должно все работать, чтобы вы могли идти дальше.

4. Подключение к LAN (приведите несколько друзей)

Этот шаг сравним с одним из предыдущих.

Листинг 4.1: Настройка eth0
# nano /etc/conf.d/net
Добавьте строку, подобную приведенной:
config_eth0=( "192.168.0.1 broadcast 192.168.0.255 netmask 255.255.255.0" )
# rc-update add net.eth0 default
# /etc/init.d/net.eth0 start
5. Сервисы LAN (потому что мы славные люди)

DHCP-сервер

Уверен, было бы славно, если любой в вашем доме мог просто подключить свой компьютер к сети и сразу начать работать. Нет нужды запоминать бесполезные детали или тратить время, путаясь в диалогах конфигураций! Жизнь должна быть хороша, не правда ли? Введение в протокол динамической конфигурации хоста (DHCP) и почему вы должны об этом позаботиться.

DHCP полностью оправдывает свое название. Это протокол, позволяющий вам автоматически настраивать другие компьютеры. Вы запускаете DHCP-сервер (dhcpd) на маршрутизаторе, даете ему всю информацию о вашей сети (доступные IP-адреса, серверы DNS, шлюзы и т. д...), а затем, когда начнет загружаться другой компьютер, он запустит DHCP-клиент и автоматически настоится. Ни суматохи, ни беспорядка! Для более детальной информации вы всегда можете посетить Википедию.

Мы воспользуемся пакетом dnsmasq, который предоставляет оба сервиса DHCP и DNS. Сейчас перенесем свое внимание на DHCP. Помните, что если вы хотите запустить отдельный сервер DHCP, то вы найдете другой пример в главе Забавные вещи. Также если вы хотите отточить настройки DHCP-сервера, просто прочтите комментарии в /etc/dnsmasq.conf. Настройки по умолчанию должны работать великолепно.

Листинг 5.1: Настройка DHCP-сервера
# emerge dnsmasq
# nano /etc/dnsmasq.conf
Просто добавьте эту строку, чтобы включить dhcp:
dhcp-range=192.168.0.100,192.168.0.250,72h
Ограничим действия dnsmasq только интерфейсом локальной сети
interface=eth0

# rc-update add dnsmasq default
# /etc/init.d/dnsmasq start
Теперь ваш маленький маршрутизатор еще и DHCP-сервер! Подключите несколько компьютеров и понаблюдайте за их работой! Для систем с ОС Windows вам выбрать параметры «Obtain an IP address automatically» («Получать IP-адреса автоматически») и «Obtain DNS server address automatically» («Получать адреса DNS-серверов автоматически») в настройках соединения. Изменения не будут мгновенными, поэтому запустите командную строку и введите в ней ipconfig /release и ipconfig /renew. Но довольно о Windows, вернемся назад к нашим любимым пингвинам.

DNS-сервер

Когда люди хотят посетить место в интернете, они запоминают названия, а не набор бесполезных цифр. В конце концов, что проще запомнить — ebay.com или 66.135.192.87? Вот здесь появляется система доменных имен — Domain Name System (DNS). DNS-серверы работают по всему интернету, и если кто-нибудь захочет посетить ebay.com, то они заменят ebay.com (понятный для нас) на 66.135.192.87 (понятный для компьютеров). Для более детальной информации о DNSвы можете всегда посетить Википедию.

Мы использовали пакет dnsmasq в качестве DHCP-сервера, но он также содержит и DNS-сервер, и вам больше ничего не надо делать! Ваш маленький маршрутизатор уже предоставляет услуги DNS для своих клиентов DHCP. Держу пари, что вы хотели бы, чтобы все было так просто ;).

Вы можете выбрать другой сервер DNS, если он более удобен для вас, но причина использования dnsmasq заключается в том, что он разработан специально для того, что хотим мы и ничего более. Это небольшой кэширующий/пробрасывающий сервер DNS для локальных сетей. Нам не нужно предоставлять DNS для нашего домена, просто осуществлять простые операции с DNS вне нашей локальной сети.

NAT (или IP-маскарадинг)

На данный момент люди вашей сети могут общаться друг с другом и могут преобразовывать имена узлов с помощью DNS, но они все еще не могут по настоящему выйти в интернет. Вы можете подумать, что это великолепно (больше канала для вас!), но я готов поспорить, что они так не считают.

Вот здесь на сцену выходит трансляция сетевых адресов (Network Address Translation — NAT). NAT — это способ подключить множество компьютеров в частной сети к интернету, если у вас в распоряжении есть только небольшой набор IP-адресов. Обычно вы получаете от провайдера только 1 IP-адрес, но вы хотите позволить всему вашему дому подключаться к интернету. NAT —это то самое колдовство, делающее это возможным. Для более детальной информации о NAT вы всегда можете посетить Википедию.

Примечание: Перед тем, как начать, удостоверьтесь, что в вашей системе есть iptables. Несмотря на то, что он автоматически устанавливается в большинстве систем, у вас он может не быть. Если у вас его нет, просто наберите emerge iptables.
Листинг 5.2: Настройка iptables
Сначала обнуляем наши текущие правила
# iptables -F
# iptables -t nat -F

Установим политики по умолчанию для трафика, не соответствующего ни одному из правил
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD DROP

Скопируйте и вставьте для примера...
# export LAN=eth0
# export WAN=eth1

Теперь закроем наши сервисы так, чтобы они могли работать только для LAN
# iptables -I INPUT 1 -i ${LAN} -j ACCEPT
# iptables -I INPUT 1 -i lo -j ACCEPT
# iptables -A INPUT -p UDP --dport bootps -i ! ${LAN} -j REJECT
# iptables -A INPUT -p UDP --dport domain -i ! ${LAN} -j REJECT

(Необязательно) Разрешаем доступ к нашему ssh-серверу из интернета
# iptables -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT

Отбросим все TCP/UDP-пакеты, обращающиеся к привилегированным портам
# iptables -A INPUT -p TCP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP
# iptables -A INPUT -p UDP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP

В конце добавляем правила для NAT
# iptables -I FORWARD -i ${LAN} -d 192.168.0.0/255.255.0.0 -j DROP
# iptables -A FORWARD -i ${LAN} -s 192.168.0.0/255.255.0.0 -j ACCEPT
# iptables -A FORWARD -i ${WAN} -d 192.168.0.0/255.255.0.0 -j ACCEPT
# iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE
Сообщаем ядру, что ip-форвардинг разрешен
# echo 1 > /proc/sys/net/ipv4/ip_forward
# for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done

Сохраняем правила, чтобы потом не вводить все вручную заново при перезагрузке
# /etc/init.d/iptables save
# rc-update add iptables default
# nano /etc/sysctl.conf
Добавьте/Раскомментируйте следующие строки:
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1

Если у вас динамически назначаемый IP-адрес, возможно, вам понадобиться включить следующее:
net.ipv4.ip_dynaddr = 1
Как только все это будет написано, остальные из вашей сети смогут пользоваться интернетом так, как будто сами подключены напрямую к нему.

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

6. Забавные вещи (во время дождливых дней)

Введение

Верите ли или нет, но вы все уже сделали :). Начиная с этого раздела, я опишу несколько полезных тем, которые могут быть полезными для вас. Любая из этих глав необязательна.

Пробрасывание портов

Когда-нибудь вам может потребоваться сервисы на компьютере за маршрутизатором или же вы просто хотите сделать жизнь проще, подключаясь к локальной сети из интернета. Возможно, вы захотите запустить серверы FTP, HTTP, SSH или VNC на одном или нескольких компьютерах за вашим маршрутизатором и подключаться к ним всем. Есть только одно ограничение — вы можете запускать только по одному сервису на компьютере на каждый порт. Например, невозможно настроить три FTP-сервера за вашим маршрутизатором и попробовать подключиться ко всем трем из интернета через порт 21; только один из них будет на порту 21, когда как остальные будут использовать, скажем, порты 123 и 567.

Все правила проброса портов имеют вид iptables -t nat -A PREROUTING [-p протокол] --dport [внешний порт маршрутизатора] -i ${WAN} -j DNAT --to [IP-адрес/порт для проброса]. К сожалению, iptables не принимает имена узлов при пробросе портов. Если вы пробрасываете внешний порт на порт с тем же номером для внутреннего компьютера, то вы можете опустить порт назначения. См. страницу помощи iptables(8) для большей информации.

Листинг 6.1: Выполнение команд iptables
Скопируйте и вставьте для примера...
# export LAN=eth0
# export WAN=eth1

Пробрасывание порта 2 на ssh внутреннего хоста
# iptables -t nat -A PREROUTING -p tcp --dport 2 -i ${WAN} -j DNAT --to 192.168.0.2:22

Пробрасывание FTP-трафика на внутренний компьютер
# iptables -t nat -A PREROUTING -p tcp --dport 21 -i ${WAN} -j DNAT --to 192.168.0.56

Пробрасывание HTTP-трафика на внутренний компьютер
# iptables -t nat -A PREROUTING -p tcp --dport 80 -i ${WAN} -j DNAT --to 192.168.0.56

Пробрасывание VNC-трафика для внутренних компьютеров
# iptables -t nat -I PREROUTING -p tcp --dport 5900 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p tcp --dport 5901 -i ${WAN} -j DNAT --to 192.168.0.3:5900
Теперь, если вам необходимо подключиться к VNC по адресу 192.168.0.3, то просто добавьте ":1" к имени маршрутизатора


Проброс трафика Bittorrent
# iptables -t nat -A PREROUTING -p tcp --dport 6881:6889 -i ${WAN} -j DNAT --to 192.168.0.2

Проброс трафика eDonkey/eMule
# iptables -t nat -A PREROUTING -p tcp --dport 4662 -i ${WAN} -j DNAT --to 192.168.0.55

Поддержка Game Cube Warp Pipe
# iptables -t nat -A PREROUTING -p udp --dport 4000 -i ${WAN} -j DNAT --to 192.168.0.56

Поддержка Playstation 2 Online
# iptables -t nat -A PREROUTING -p tcp --dport 10070:10080 -i ${WAN} -j DNAT --to 192.168.0.11
# iptables -t nat -A PREROUTING -p udp --dport 10070:10080 -i ${WAN} -j DNAT --to 192.168.0.11

Xbox Live
# iptables -t nat -A PREROUTING -p tcp --dport 3074 -i ${WAN} -j DNAT --to 192.168.0.69
# iptables -t nat -A PREROUTING -p udp --dport 3074 -i ${WAN} -j DNAT --to 192.168.0.69
# iptables -t nat -A PREROUTING -p udp --dport 88 -i ${WAN} -j DNAT --to 192.168.0.69
Примечание: Если у вас есть полезные/интересные примеры, пишите мне.
identd (для IRC)

Ретранслируемые интернет-чаты (Internet Relay Chat, IRC) усиленно используют сервис ident. Теперь, когда IRC-клиенты находятся за маршрутизатором, нам нужен способ настроить свой ident для маршрутизатора и клиентов. Подобный сервер называется midentd.

Листинг 6.2: Настройка и запуск ident
# emerge midentd
# rc-update add midentd default
# /etc/init.d/midentd start
В портеже есть и другие серверы ident. В зависимости от ваших нужд, рекомендую попробовать oidentd и fakeidentd.

Сервер времени

Сохранять системное время точным является неотъемлемой частью сопровождения хорошей системы. Одним из самых распространенных способов сделать это являются протокол сетевого времени (Network Time Protocol, NTP) и пакет ntp (содержащий реализации как сервера, так и клиента).

Многие запускают клиенты NTP на своих компьютерах. Очевидно, что множество клиентов по всему миру сильно загружают серверы NTP, обращаясь к ним. В условиях домашней сети мы можем помочь снизить нагрузку общедоступных серверов, предоставляя в свою очередь время нашим компьютерам. А в качестве бонуса обновление в локальной сети будет происходить намного быстрее! Все, что нам нужно, — запустить NTP-сервер на маршрутизаторе, который будет синхронизироваться с общедоступными серверами и предоставлять время другим компьютерам в локальной сети. Чтобы начать, просто наберите emerge ntp на маршрутизаторе.

Листинг 6.3: Настройка и запуск сервера NTP
# nano /etc/conf.d/ntp-client
Измените, если хотите, но настройки по умолчанию вполне подойдут
# rc-update add ntp-client default

# nano /etc/ntp.conf
Добавьте следующие строки:
restrict default ignore
restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap
Это разрешит использовать ваш NTP-сервер только NTP-клиентам
с адресом из диапазона 192.168.0.xxx
# nano /etc/conf.d/ntpd
Измените, если хотите, но настройки по умолчанию вполне подойдут
# rc-update add ntpd default

# /etc/init.d/ntp-client start
# /etc/init.d/ntpd start
Примечание: Удостоверьтесь, что разрешили входящие и исходящие соединения на порт ntp (123/udp) при настройке сервера. Клиентам требуется только исходящий доступ на порт 123 через udp.
Теперь на клиентах также наберите emerge ntp. А дальше просто запустите ntp-клиент, потому что настройка элементарна.

Листинг 6.4: Настройка и запуск клиента NTP
# nano /etc/conf.d/ntp-client
Измените "pool.ntp.org" в переменной NTPCLIENT_OPTS на "192.168.0.1"
# rc-update add ntp-client default
# /etc/init.d/ntp-client start
Сервер rsync

Вы сможете уберечь тех, кто использует машины с ОС Gentoo в локальной сети, от синхронизации каждой машины посредством emerge sync с удаленными серверами. Запустив локальный rsync, вы снизите свой трафик и загруженность канала rsync-серверов Gentoo. Это сделать очень просто.

Примечание: Для более детальной информации о rsync, посетите официальное руководство по rsync
Хотя каждый компьютер с установленной ОС Gentoo нуждается в rsync, нет необходимости устанавливать его на всех клиентах. Отредактируйте /etc/rsyncd.conf файл, раскомментируйте раздел [gentoo-portage], и удостоверьтесь, что добавили параметр address. Остальные настройки подходят по умолчанию.

Листинг 6.5: Настройка сервера rsync
pid file = /var/run/rsyncd.pid
use chroot = yes
read only = yes
address = 192.168.0.1

[gentoo-portage]
path = /mnt/space/portage
comment = Gentoo Linux Portage tree
exclude = /distfiles /packages
Теперь вам необходимо стартовать сервис (и снова, настройки по умолчанию подойдут).

Листинг 6.6: Запуск сервера rsync
# /etc/init.d/rsyncd start
# rc-update add rsyncd default
Все, что остается вам, — сообщить вашим клиентам синхронизироваться с маршрутизатором.

Листинг 6.7: Настройка SYNC в файле make.conf на клиентской машине
SYNC="rsync://192.168.0.1/gentoo-portage"
Почтовый сервер

Когда-нибудь будет неплохо запустить на маршрутизаторе собственный сервер SMTP (Simple Mail Transfer Protocol — простой протокол передачи почты). У вас могут быть есть свои причины сделать это, но я запускаю его для того, чтобы пользователи видели, как их почта быстро уходит, а вся работа по получении/маршрутизации перекладывалась на почтовый сервер. К тому же некоторые провайдеры не разрешают трансляцию почты для учетных записей, не являющихся частью их собственных сетей (например Verizon). Также, вы можете просто регулировать доставку почты, и большие вложения не будут постоянно забивать ваш канал на полчаса.

Листинг 6.8: Настройка и запуск SMTP
# emerge qmail
удостоверьтесь, что вывод `hostname` верный
# ebuild /var/db/pkg/*-*/qmail-1.03-r*/*.ebuild config
# iptables -I INPUT -p tcp --dport smtp -i ! ${LAN} -j REJECT
# ln -s /var/qmail/supervise/qmail-send /service/qmail-send
# ln -s /var/qmail/supervise/qmail-smtpd /service/qmail-smtpd

# cd /etc
# nano tcp.smtp
Добавьте строку, подобную этой, в раздел разрешений:
192.168.0.:allow,RELAYCLIENT=""

# tcprules tcp.smtp.cdb rules.tmp < tcp.smtp
# rc-update add svscan default
# /etc/init.d/svscan start
Я прожженный фанат qmail, но вы вольны использовать другой MTA :). Как только вы настроите электронную почту для узлов вашей сети, сообщите им, что теперь их почтовый сервер имеет адрес 192.168.0.1 и теперь все будет по первому разряду. Вам можете посетить домашнюю страницу qmail для более подробной документации.

Полный DHCP-сервер

Ранее мы использовали dnsmasq для предоставления сервиса DHCP всем нашим клиентам. Для большинства людей, работающих в небольших локальных сетях, этого более чем достаточно. Но вам может понадобиться что-то с более широкими возможностями. Для этого мы перейдем к полноценному DHCP-серверу, разработанному людьми из ISC.

Листинг 6.9: Настройка dhcpd
# emerge dhcp
# nano /etc/dhcp/dhcpd.conf
(Вот пример файла настроек)
authoritative;
ddns-update-style interim;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.250;
default-lease-time 259200;
max-lease-time 518400;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name-servers 192.168.0.1;
}
# nano /etc/conf.d/dhcpd
(Установите IFACE="eth0")
# rc-update add dhcpd default
# /etc/init.d/dhcpd start
Это минимальные настройки, необходимые для замены DHCP-возможностей от dnsmasq, использованного нами ранее. Кстати, не забыли ли вы отключить возможности DHCP в dnsmasq? Если да, то вы должны сделать это сейчас (просто закомментируйте настройки dhcp-range в /etc/dnsmasq.conf и перезапустите сервис).

Подключение другой локальной сети (или двух, или трех, или...)

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

Сначала вам понадобится настроить интерфейс. Просто следуйте инструкциям в примере 4.1, заменяя eth0 на eth2, а 192.168.0 на 192.168.1.

Затем вам понадобиться подправить dnsmasq для обслуживания нового интерфейса. Просто отредактируйте файл /etc/conf.d/dnsmasq снова и добавьте -i eth2 к DNSMASQ_OPTS; использование ключа -i несколько раз допустимо. Затем отредактируйте /etc/dnsmasq.conf и добавьте новую строку, подобную строке dhcp-range в примере 5.1, заменив 192.168.0 на 192.168.1. Наличие нескольких строк dhcp-range тоже в порядке вещей.

И наконец, посмотрите правила межсетевого экрана в в примере 5.2 и продублируйте те, что имеют подстроку -i ${LAN}. Вам может понадобиться создать новую переменную, например LAN2, чтобы упростить жизнь.

7. Проблемы

Полезные утилиты

Если у вас проблемы в подключении компьютеров к сети, вы можете попробовать устранить их с помощью следующих утилит (всех их можно найти в портежах в категории net-analyzer):

Утилиты Описание
wireshark Графическая утилита, позволяющая просмотреть весь низкоуровневый сетевой трафик, распределенный по фильтрам
tcpdump Консольная утилита для дампа всего низкоуровневого сетевого трафика, распределенного по фильтрам
iptraf Основанный на ncurses монитор IP-трафика LAN
ettercap Основанный на ncurses сетевой монитор
Ошибки DHCP при старте

При первом старте init.d-сценария dhcp вы можете получить ошибку загрузки без какой-либо полезной информации.

Листинг 7.1: Пример ошибки DHCP
# /etc/init.d/dhcp start
* Setting ownership on dhcp.leases ... [ ok ]
* Starting dhcpd ... [ !! ]
Все дело в том, что надо знать, куда dhcpd направляет свой вывод. Просто просмотрите /var/log и почитайте log-файлы. В зависимости от того, какой пакет вы используете в качестве syslog, попробуйте запустить grep -Rl dhcpd /var/log для того, чтобы сузить поиск. Возможно, вы случайно совершили ошибку в конфигурационном файле. Также вы можете попробовать запустить dhcpd -d -f (для быстрой отладки/запуска) и исправить на основе вывода ошибки.

Некорректное значение MTU

Если вы сталкиваетесь со странными ошибками (например, не загружаются определенные web-страницы), возможно, у вас проблема Path MTU Discovery. Быстрый способ проверить это — запустить эту команду iptables:

Листинг 7.2: Определение проблем с MTU
# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Это повлияет на все новые соединения, поэтому для теста просто обновите страницу, с которой у вас проблемы. Если это поможет, то стандартным значением MTU для 100 Мбит/с сетей является 1500, когда как для PPPoE-соединений — 1492. Для более детальной информации прочтите главу 15 из документа Linux Advanced Routing & Traffic Control HOWTO.

Невозможно подключить два компьютера напрямую

Если вы хотите связать два компьютера напрямую между собой (неважно, зачем) без использования концентратора или коммутатора, то обычный кабель, скорее всего, не подойдет. Исключение составляет специальный Auto MDI/MDI-X (также известный как «autosensing») сетевой адаптер. Вам понадобится специальный перекрестный (crossover) кабель. Более подробная информация о различии разных типов кабелей может быть найдена на странице Википедии (англ.).

8. Послесловие

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

3.135.215.149 / 2024-12-22_20-43-06 UTC.