Руководство по развертыванию домашнего маршрутизатора Mike Frysinger Азамат Хакимов В этом документе описывается, как превратить старый компьютер с установленной ОС Gentoo в маршрутизатор для подключения вашей домашней сети к интернету. 1.37 2007-04-06 Введение

Сборка собственного маршрутизатора из старых деталей имеет множество преимуществ перед покупкой специализированного маршрутизатора (например 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.
Настройка ядра (сначала познай себя)

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

# 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). Неважно, как вы будете осуществлять их поддержку — в самом ядре или в качестве модулей, если функция будет затребована, соответствующий модуль будет загружен (загрузка модуля оставлена для читателя как занимательное для любого упражнение).

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 эти параметры имеют тенденцию перемещаться по меню. Так что удачи!
Подключение к WAN (или к интернету)
Введение

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

ADSL и PPPoE

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

Для того, чтобы следующие настройки работали, в вашей системе вас должен быть установлен baselayout-1.12.9 или выше.
(Замените "vla9h92" вашим именем пользователя и "boogie" вашим паролем)

# nano /etc/conf.d/net
Укажите baselayout использовать adsl поверх ppp0:
config_ppp0=( "ppp" )
link_ppp0="eth1"
plugins_ppp0=( "pppoe" )
pppd_ppp0=(
        "defaultroute"
        "usepeerdns"
        Здесь могут быть дополнительные настройки, см. /etc/conf.d/net.example
)
username_ppp0="vla9h924"
password_ppp0="boogie"

# ln -s net.lo /etc/init.d/net.ppp0
# rc-update add net.ppp0 default
# /etc/init.d/net.ppp0 start
Когда поднимется DSL-интерфейс, создастся устройство ppp0. Хотя ваша сетевая карта называется eth1, IP-адрес на самом деле будет привязан к ppp0. Теперь, когда вы увидете в примерах использование «eth1», замените его на «ppp0». Проверьте, что вы изменили разрешения на файл /etc/conf.d/net так, чтобы только пользователь root мог читать/записывать его, так как вы оставляете в нем оставляете ваши имя пользователя и пароль. Для перешедших с пакета rp-pppoe людей или тех, кто постоянно испытывает обрывы соединения, см. раздел MTU в главе «Решение проблем»
Кабельное соединение и/или динамические/статические IP-адреса

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

Для пользователей с динамическим 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

У вас должно все работать, чтобы вы могли идти дальше.

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

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

# 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
Сервисы LAN (потому что мы славные люди)
DHCP-сервер

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

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

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

# 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.
Сначала обнуляем наши текущие правила
# 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 полезен для систем с соединением по необходимости или в случаях, когда ваш провайдер предоставляет динамические адреса. Благодаря этому решается проблема попытки подключения до полного запуска сетевого интерфейса. На деле это просто упрощает жизнь пользователям за вашим маршрутизатором.

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

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

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

Когда-нибудь вам может потребоваться сервисы на компьютере за маршрутизатором или же вы просто хотите сделать жизнь проще, подключаясь к локальной сети из интернета. Возможно, вы захотите запустить серверы 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) для большей информации.

Скопируйте и вставьте для примера...
# 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" к имени маршрутизатора

Пробрасывание SAMBA на внутренний узел (как много портов нужно Windows)
# iptables -t nat -I PREROUTING -p tcp --dport 135 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p tcp --dport 139 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p tcp --dport 445 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p udp --dport 137:138 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p udp --dport 445 -i ${WAN} -j DNAT --to 192.168.0.2

Проброс трафика 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.

# 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 на маршрутизаторе.

# 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-клиент, потому что настройка элементарна.

# 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. Остальные настройки подходят по умолчанию.

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

Теперь вам необходимо стартовать сервис (и снова, настройки по умолчанию подойдут).

# /etc/init.d/rsyncd start
# rc-update add rsyncd default

Все, что остается вам, — сообщить вашим клиентам синхронизироваться с маршрутизатором.

SYNC="rsync://192.168.0.1/gentoo-portage"
Почтовый сервер

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

# emerge netqmail
удостоверьтесь, что вывод `hostname` верный
# emerge --config netqmail
# 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/tcprules.d
# nano tcp.qmail-smtp

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

# make
# rc-update add svscan default
# /etc/init.d/svscan start

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

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

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

# 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, чтобы упростить жизнь.

Проблемы
Полезные утилиты

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

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

При первом старте init.d-сценария 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:

# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Это повлияет на все новые соединения, поэтому для теста просто обновите страницу, с которой у вас проблемы. Если это поможет, то стандартным значением MTU для 100 Мбит/с сетей является 1500; это же относится и к PPPoA. Для PPPoE-соединений оно равняется 1492. Для более детальной информации прочтите главу 15 из документа Linux Advanced Routing & Traffic Control HOWTO.

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

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

Послесловие

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