Домашний маршрутизатор

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Home Router and the translation is 100% complete.

Other languages:
English • ‎español • ‎日本語 • ‎한국어 • ‎русский

В этом документе подробно рассказывается, как превратить старый компьютер с системой Gentoo в маршрутизатор для соединения домашней сети с интернетом.

Введение

Создание собственного маршрутизатора из старых компонентов имеет массу преимуществ по сравнению с покупкой уже собранного и запечатанного на заводе (Linksys, D-Link, Netgear и т.д.). Самое большое преимущество, безусловно, является контроль над соединением. Остальные преимущества можно оставить на пользовательское воображение. Можно сделать буквально все что угодно; дело лишь в том, действительно ли это нужно.

Это руководство рассказывает, как настроить преобразование сетевых адресов (NAT) на пользовательском маршрутизаторе (ядро и iptables), как добавить и настроить распространённые сервисы (вроде системы доменных имён (DNS) с помощью net-dns/dnsmasq, DHCP с помощью net-misc/dhcpcd, ADSL с помощью net-dialup/ppp). Статья завершается более сложными и интересными вещами на которые способен пользовательский маршрутизатор (проброс портов (port forwarding), шейпинг (traffic shaping), прокси/кэширование и т.д.).

Перед началом, ознакомьтесь со списком основных требований:

  1. в компьютере должны быть установлены как минимум две сетевые платы (NIC)
  2. (необязательно) Wi-Fi-адаптер, поддерживающий master mode (режим точки доступа). Для master mode рекомендуется избегать сетевых плат с функцией bypass (hardware bypass mode), так как для некоторых сетевых адаптеров требуется проприетарный драйвер. Не имея доступа к проприетарному драйверу карта будет оставаться в режиме bypass на постоянной основе и не будет использоваться.
  3. будут нужны настройки для соединения с интернетом (такие вещи как IP/DNS/шлюз/имя пользователя/пароль).
  4. нужно будет немного свободного времени, и любовь к Gentoo для того, чтобы прочитать эту статью и успешно настроить многофункциональный домашний маршрутизатор.

В руководстве используются следующие оговорки:

  • eth0 - сетевая плата, подключенная к локальной сети (LAN) или сетевой мост, состоящий из нескольких сетевых карт
  • eth1 - сетевая плата, подключенная к глобальной сети (WAN)
  • LAN использует частную сеть вида 192.168.0.xxx
  • маршрутизатор жестко привязан к IP-адресу 192.168.0.1
Важно
Из соображений безопасности настоятельно рекомендуется остановить все ненужные сервисы на маршрутизаторе, пока межсетевой экран не запущен. Для отображения текущих запущенных сервисов, просто выполните rc-status.

Настройка ядра (сначала познай себя)

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

root #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.

Заметка
Утилита lspci часть пакета sys-apps/pciutils и может быть установлена запуском команды emerge sys-apps/pciutils.

После того, как марка(и)/модель(и) NIC(ов) были получены, настройте ядро с поддержкой соответствующих драйверов. Для получения дополнительной информации о настройке ядра смотрите руководство по конфигурации ядра.

Далее, необходима поддержка iptables и NAT (а также, по желанию, шейпинга (packet shaping)). Нижеследующий список разделён на всегда необходимое (*), нужное только для ADSL через PPPoE (a), предлагаемое для всех (x), и только для shaping'a (s). Не имеет значения, встраивается ли функцию в ядро, или компилируется как модуль, когда нужна какая-либо функция, нужные модули загружаются автоматически. Более подробную информацию о загрузке модулей можно найти в статье Kernel Modules Guide.

Ядро Включение необходимых сетевых параметров
-*- Networking support  --->
   Networking options  --->
      [*] TCP/IP networking
         [*] IP: advanced router
      [*] Network packet filtering framework (Netfilter)  --->
         [*]   Advanced netfilter configuration
            IPv6: Netfilter Configuration  ---> 
               <*> IPv6 connection tracking support
               <*> IP6 tables support (required for filtering)

Для работы DHCP необходимо включить следующее, если используется ядро 2.4.x :

Ядро Сетевые опции
[*] 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
Заметка
В интерфейсе menuconfig кое-что может немного отличаться в более новых ядрах, однако не сложно выяснить в чем различие. Удачи!

Поближе к WAN (он же Интернет)

Введение

Существует много способов соединения с интернетом, однако, как правило, лишь несколько способов широко используются. ADSL (PPPoE) и кабельными модемами (статическими/динамическими) это два распространенные методы предоставления интернета, которые используют ISP. Если есть другие способы, не стесняйтесь написать их в этой вики статье. Пропускайте любой из разделов этой главы, который не относится к делу. Эта глава рассматривается подключение маршрутизатора к интернету через плату eth1.

ADSL и PPPoE

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

Замените <username> и <user_password> в примере ниже необходимым именем пользователя и паролем:

Файл /etc/conf.d/netИспользовать adsl через eth1 для ppp0
config_ppp0="ppp"
link_ppp0="eth1"
plugins_ppp0="pppoe"
pppd_ppp0="
  defaultroute
  usepeerdns
"
username_ppp0="<username>"
password_ppp0="<user_password>"
root #ln -s net.lo /etc/init.d/net.ppp0
root #rc-update add net.ppp0 default
root #service net.ppp0 start
Предупреждение
Когда активируется интерфейс DSL, он создаст "ppp0" запись в выводе команды ifconfig. Несмотря на то, что сетевая карта называется eth1, IP-адрес на самом деле привязан к ppp0. Начиная с этого момента заменяйте eth1 на ppp0.
Предупреждение
Убедитесь, что изменили доступ к файлу /etc/conf.d/net так, что только пользователь с root привилегиями может его читать/записывать. Это важно, так как имя пользователя и пароль были записаны в файл в формате обычного текста.
Предупреждение
Если пользователи переходят с пакета net-dialup/rp-pppoe, или повезло столкнуться со странными обрывами соединения, смотрите раздел MTU во главе Устранение неполадок ниже.

Проводной динамический/статический IP

Если необходим статический IP, то потребуется немного больше информации. Пользователям со статическим IP-адресом потребуются добавить IP, шлюз (gateway) и DNS-сервера.

Пользователи с динамическим IP:

root #emerge --ask net-misc/dhcpcd
Файл /etc/conf.d/netДинамический IP адрес
config_eth1="dhcp"

Пользователи со статическим IP:

Файл /etc/conf.d/netКонфигурация со статическим IP-адресом
config_eth1="66.92.78.102/24 brd 66.92.78.255"
routes_eth1="default via 66.92.78.1"
Файл /etc/resolv.confДобавляем информацию о DNS
nameserver 123.123.123.123

Как для динамического, так и для статического варианта:

root #ln -s net.lo /etc/init.d/net.eth1
root #rc-update add net.eth1 default
root #service net.eth1 start

После изменений выше система должна быть готова к продолжению.

Настройка LAN (приведем своих друзей)

Этот шаг очень простой, по сравнению с предыдущим. Чтобы использовать более двух устройств (более одной локальной сети и один для WAN), то Network bridge необходимо будет настроить между всеми сетевыми картами, которые будут использованы для локальной сети. Это позволит иметь несколько сетевых адаптеров, которые должны быть доступны под одним и тем же IP-адресом.

Если необходим сетевой мост, то прочитайте инструкции по настройке сетевого моста. Назовите сетевой мост (по умолчанию br0), а затем замените устройства локальной сети eth0 на br0 в действиях, описанных в этой вики. Если на домашнем маршрутизаторе большое количество сетевых устройств, то, для облегчения администрирования, можно переименовать их с помощью Udev. Настройка моста и переименование устройств не является обязательным, но рекомендуется для большой домашней сети.

Когда создаете Wi-Fi точку доступа, убедитесь что Wi-Fi карта поддерживает master mode и настройте Hostapd.

Файл /etc/conf.d/net
config_eth0="192.168.0.1/24 brd 192.168.0.255"
root #rc-update add net.eth0 default
root #service net.eth0 start

Сервисы LAN (мы же хорошие ребята)

DHCP-сервер

Было бы отлично, если любой желающий в доме просто бы мог подключить свои компьютеры к сети, после чего всё сразу бы заработало. Без необходимости помнить сбивающие с толку данные, или заставлять пялиться на запутанные окна настройки. Жизнь была бы прекрасна, не так ли? Познакомьтесь с протоколом динамической настройки узла (DHCP), и с тем, почему о нём действительно стоит позаботиться.

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

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

root #emerge --ask net-dns/dnsmasq
Файл /etc/dnsmasq.conf
dhcp-range=eth0,192.168.0.100,192.168.0.250,72h
interface=eth0
root #rc-update add dnsmasq default
root #service dnsmasq start

Настроить интерфейс очень важна. Использование параметров по умолчанию в dnsmasq откроет маршрутизатор для DNS amplification атак, которые могут привести к тому что провайдер пришлет вам страшное электронное письмо. Убедитесь, что маршрутизатор не подвержен DNS amplification атакам с помощью [1].

Теперь маленький маршрутизатор является истинным DHCP-сервером! Врубайте компьютеры, и наблюдайте за работой! В системах Windows возможно потребуется зайти в настройки TCP/IP, и включить параметры «Получить IP-адрес автоматически» и «Получить адрес DNS-сервера автоматически». Иногда изменения не сразу применяются, тогда придётся открыть командную строку и выполнить ipconfig /release и ipconfig /renew. Ладно, хватит про Windows, давайте вернёмся к нашим пингвинам.

DNS-сервер

Когда человек хочет посетить место в интернете, он помнит его название, но не строку страшных цифр. Действительно, что легче запомнить, eBay.com, или 66.135.192.87? Именно в этом замешан DNS. Сервера DNS работают по всему интернету, и когда кто-то хочет посетить eBay.com, эти сервера преобразовывают текст "eBay.com" (что нам понятно) в IP-адрес "66.135.192.87" (что понятно нашим компьютерам). За дополнительными сведениями о DNS можно обратиться к Википедии.

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

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

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

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

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

Заметка
Перед тем как начать, удостоверьтесь, что iptables был установлен в системе. Если он не установлен, то установите его: emerge iptables.

После установки iptables очистите правила:

root #iptables -F
root #iptables -t nat -F

Настройте политику по умолчания для обработки пакетов, которые не подпадают ни под одно правило:

root #iptables -P INPUT ACCEPT
root #iptables -P OUTPUT ACCEPT
root #iptables -P FORWARD DROP

Скопируйте и вставьте следующее:

root #export LAN=eth0
root #export WAN=eth1

Далее заблокируйте сервисы, чтобы они были доступны только из локальной сети.

root #iptables -I INPUT 1 -i ${LAN} -j ACCEPT
root #iptables -I INPUT 1 -i lo -j ACCEPT
root #iptables -A INPUT -p UDP --dport bootps ! -i ${LAN} -j REJECT
root #iptables -A INPUT -p UDP --dport domain ! -i ${LAN} -j REJECT

(Необязательно) Разрешите доступ к ssh серверу из WAN:

root #iptables -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT

Отбросьте TCP / UDP пакеты для привилегированных портов:

root #iptables -A INPUT -p TCP ! -i ${LAN} -d 0/0 --dport 0:1023 -j DROP
root #iptables -A INPUT -p UDP ! -i ${LAN} -d 0/0 --dport 0:1023 -j DROP

Наконец, добавьте правила для NAT:

root #iptables -I FORWARD -i ${LAN} -d 192.168.0.0/255.255.0.0 -j DROP
root #iptables -A FORWARD -i ${LAN} -s 192.168.0.0/255.255.0.0 -j ACCEPT
root #iptables -A FORWARD -i ${WAN} -d 192.168.0.0/255.255.0.0 -j ACCEPT
root #iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE

Сообщим ядру, что IP-форвардинг разрешён:

root #echo 1 > /proc/sys/net/ipv4/ip_forward
root #for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done

Скажите iptabes демону сохранит настройки, а затем добавьте iptables на уровень запуска default:

root #/etc/init.d/iptables save
root #rc-update add iptables default
Файл /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1

Если используется динамический IP-адрес, то необходимо активировать следующее:

Файл /etc/sysctl.conf
net.ipv4.ip_dynaddr = 1

Как только текст выше был введен, остальные пользователи сети должны получить возможность использовать интернет так, как будто сами подключились напрямую.

Опция ip_dynaddr полезна для набора по требованию системы или если провайдер выдает динамические адреса. Это работает с проблемой, когда соединение пытается подключиться до того как интернет-интерфейс полностью настроен. Это обеспечивает более гладкой опыт сети для пользователей за маршрутизатором.

Прикольные вещи (для дождливого дня)

Введение

Верите ли, или нет, но все сделано! В этом разделе будут рассмотрены некоторые другие общие темы, которые могут заинтересовать. Чтение всего, что содержится в этом разделе, необязательно.

Переадресация портов (port forwarding)

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

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

root #export LAN=eth0
root #export WAN=eth1

Проброс порта 2 на ssh порт внутреннего хоста:

root #iptables -t nat -A PREROUTING -p tcp --dport 2 -i ${WAN} -j DNAT --to 192.168.0.2:22

Проброс FTP порта на внутренний хост:

root #iptables -t nat -A PREROUTING -p tcp --dport 21 -i ${WAN} -j DNAT --to 192.168.0.56

Проброс HTTP порта на внутренний хост:

root #iptables -t nat -A PREROUTING -p tcp --dport 80 -i ${WAN} -j DNAT --to 192.168.0.56

Проброс VNC порта на внутренний хост:

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

Переадресация SAMBA на внутренний хост (избыток портов для охвата Windows):

root #iptables -t nat -I PREROUTING -p tcp --dport 135 -i ${WAN} -j DNAT --to 192.168.0.2
root #iptables -t nat -I PREROUTING -p tcp --dport 139 -i ${WAN} -j DNAT --to 192.168.0.2
root #iptables -t nat -I PREROUTING -p tcp --dport 445 -i ${WAN} -j DNAT --to 192.168.0.2
root #iptables -t nat -I PREROUTING -p udp --dport 137:138 -i ${WAN} -j DNAT --to 192.168.0.2
root #iptables -t nat -I PREROUTING -p udp --dport 445 -i ${WAN} -j DNAT --to 192.168.0.2

Проброс портов для Bittorrent:

root #iptables -t nat -A PREROUTING -p tcp --dport 6881:6889 -i ${WAN} -j DNAT --to 192.168.0.2

Проброс портов для eDonkey/eMule:

root #iptables -t nat -A PREROUTING -p tcp --dport 4662 -i ${WAN} -j DNAT --to 192.168.0.55

Поддержка Game Cube Warp Pipe:

root #iptables -t nat -A PREROUTING -p udp --dport 4000 -i ${WAN} -j DNAT --to 192.168.0.56

Поддержка Playstation 2 Online:

root #iptables -t nat -A PREROUTING -p tcp --dport 10070:10080 -i ${WAN} -j DNAT --to 192.168.0.11
root #iptables -t nat -A PREROUTING -p udp --dport 10070:10080 -i ${WAN} -j DNAT --to 192.168.0.11

Xbox Live:

root #iptables -t nat -A PREROUTING -p tcp --dport 3074 -i ${WAN} -j DNAT --to 192.168.0.69
root #iptables -t nat -A PREROUTING -p udp --dport 3074 -i ${WAN} -j DNAT --to 192.168.0.69
root #iptables -t nat -A PREROUTING -p udp --dport 88 -i ${WAN} -j DNAT --to 192.168.0.69

Identd (для IRC)

Internet Relay Chat использует ident довольно часто. Теперь, когда IRC-клиенты находятся за маршрутизатором, необходим способ связи с ним для маршрутизатора и клиентов. Для этой цели был создан сервер. Он называется net-misc/midentd.

root #emerge --ask net-misc/midentd
root #rc-update add midentd default
root #service midentd start

Есть несколько других серверов ident в дереве Portage. Другими жизнеспособными вариантами являются net-misc/oidentd и net-misc/fakeidentd.

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

Забота о точности системного времени необходима для поддержки работающей системы. Самый распространенный способ достигнуть этого — использовать Network Time Protocol (NTP), и пакет net-misc/ntp (который включает в себя как серверную, так и клиентскую реализацию).

У многих запущен ntp-клиент на компьютере. Очевидно, что чем больше пользователей, тем большую нагрузку должны выдерживать ntp-сервера. Однако в случаях, подобных домашней сети, NTP-сервер может быть настроен локально, что может снизить нагрузку на публичные сервера, продолжая при этом обеспечивать точным временем все локальные компьютеры. Тем самым получим еще один бонус: локальные клиенты будут быстрее обновлять время в локальной сети! Настройка проста — просто запустите NTP-сервер на маршрутизаторе, который синхронизирует сам себя с публичными серверами в интернете, при этом передавая время остальным компьютерам в сети. Начните с команды emerge ntp на маршрутизаторе, и отредактируйте файл /etc/conf.d/ntp-client как необходимо.

root #rc-update add ntp-client default
Файл /etc/ntp.conf
restrict default ignore
restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap

Это позволит использовать NTP-сервер лишь тем NTP-клиентам, IP-адрес которых находится в пределах 192.168.0.xxx.

root #rc-update add ntpd default
root #service ntpd start
Заметка
Убедиться, что разрешили входящие и исходящие соединения для порта NTP (123/udp) когда настраивали сервер. Для NTP-клиента нужно разрешить только исходящие соединения для порта 123 (UDP).

Теперь запустите emerge ntp и на клиентских компьютерах. На них мы просто запустим NTP-клиент, поэтому настройка будет намного проще.

В файле /etc/conf.d/ntp-client измените значение переменной NTPCLIENT_OPTS с pool.ntp.org на 192.168.0.1.

root #rc-update add ntp-client default
root #service ntp-client start

Rsync сервер

Если в одной сети под управлением находится несколько ящиков с Gentoo, то не целесообразно каждой машине emerge --sync (синхронизироватся) с удаленными серверами. Создав локальный rsync, сохраните пропускную способность как личную, так и для Gentoo rsync серверов. Процесс настройки относительно прост.

Заметка
Гораздо более глубокое руководства по rsync доступно в официальном rsync рководстве.

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

Файл /etc/rsyncd.conf
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

Затем сервис должен быть запущен (также добавьте на уровень запуска default).

root #service rsyncd start
root #rc-update add rsyncd default

Осталось только сказать клиентам чтобы они синхронизировались с маршрутизатором. Отредактируйте конфигурационный файл /etc/portage/repos.conf/gentoo.conf. Если этот файл не существует, то создайте каталог в /etc/portage с названием repos.conf и скопируйте файл /usr/share/portage/config/repos.conf в этот каталог. Затем настройте этот файл соответствующим образом - не забудьте, sync-uri должен совпадать с адресом сервера (домашнего маршрутизатора).

Файл /etc/portage/repos.conf/gentoo.confНастройка клиента на новый сервер rsync
[DEFAULT]
main-repo = gentoo
 
[gentoo]
location = /usr/portage
sync-type = rsync
sync-uri = rsync://192.168.0.1/gentoo-portage
auto-sync = yes

Почтовый сервер

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

root #emerge --ask mail-mta/netqmail

Убедитесь, что вывод hostname команды правильный:

root #emerge --config netqmail
root #iptables -I INPUT -p tcp --dport smtp ! -i ${LAN} -j REJECT
root #ln -s /var/qmail/supervise/qmail-send /service/qmail-send
root #ln -s /var/qmail/supervise/qmail-smtpd /service/qmail-smtpd
root #cd /etc/tcprules.d

Отредактируйте tcp.qmail-smtp и добавьте примерно такую запись в секцию allow:

Файл niltcp.qmail-smtp
192.168.0.:allow,RELAYCLIENT=""
root #make
root #rc-update add svscan default
root #service svscan start

Когда будете настраивать e-mail на компьютерах в сети, укажите, что сервер SMTP - это 192.168.0.1. Посетите домашнюю страницу netqmail для дополнительной документации об использовании netqmail.

Полнофукциональный сервер DHCP

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

root #emerge --ask net-misc/dhcp
Файл /etc/dhcp/dhcpd.confВот простой файл конфигурации
authoritative;
ddns-update-style interim;
subnet 192.168.0.0 netmask 255.255.255.0 {
    pool {
      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;
   }
}

В /etc/conf.d/dhcpd установите значение IFACE равным "eth0".

root #rc-update add dhcpd default
root #service dhcpd start

Это минимальная настройка, необходимая для замены функциональности DHCP, ранее предоставляемой dnsmasq. Функции DHCP в dnsmasq должны быть отключены? Если еще нет, то закоментируйте настройку dhcp-range в /etc/dnsmasq.conf и перезапустите сервис.

Присоединение другой LAN (или двух, или трёх, или...)

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

Сперва настройте сетевой интерфейс. Примените инструкции из этого раздела, но замените config_eth0="192.168.0.1/24 brd 192.168.0.255" на config_eth2="192.168.1.1/24 brd 192.168.1.255".

Настройте dnsmasq для обслуживания нового интерфейса. Отредактируйте снова файл /etc/conf.d/dnsmasq и добавьте -i eth2 в DNSMASQ_OPTS; использовать -i несколько раз можно. Далее отредактируйте файл /etc/dnsmasq.conf другую строку похожую на строку dhcp-range в этом разделе, заменив dhcp-range=eth0,192.168.0.100,192.168.0.250,72h на dhcp-range=eth2,192.168.1.100,192.168.1.250,72h и interface=eth0 на interface=eth2. Нет ничего плохого, если будет несколько строк с dhcp-range и interface.

Наконец, проверьте этот раздел и продублируйте правила в которых есть -i ${LAN}. Чтобы упростить это, создайте другую переменную, например LAN2.

Устранение проблем

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

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

Утилита Описание
net-analyzer/wireshark графическая утилита для просмотра всех исходных данных сети в соответствии с фильтрами
net-analyzer/tcpdump консольный инструмент для дампа всех исходных данных сети в соответствии с фильтрами
net-analyzer/iptraf-ng утилита на основе ncurses для мониторинга IP LAN
net-analyzer/ettercap утилита на основе ncurses для мониторинга/контроля сети

DHCP не запускается

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

root #service dhcp start
 * Setting ownership on dhcp.leases ...          [ ok ]
 * Starting dhcpd ...                            [ !! ]

Фокус в том, чтобы знать, куда dhcpd направляет вывод. Перейдите в /var/log и прочитайте файлы журналов. Если какой-то файл журнала зависит от пакета, который используется в качестве syslog, попробуйте запустить grep -Rl dhcpd /var/log, чтобы сузить круг поиска. Скорее всего, была допущена опечатка в конфигурационном файле. Также можно запустить dhcpd -d -f (сокращенно debug / foreground). Вывод программы может помочь в отладке ошибок.

Неправильное значение MTU

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

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

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

Если предыдущая команда не работает, то попробуйте добавить это правило в таблицу mangle. Просто добавьте -t mangle в команду.

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

Если (по какой-либо причине) нужно напрямую соединить два компьютера, без использования концентратора (хаба) или свитча, то скорее всего это не получится сделать обычным Ethernet-кабелем, если только нет сетевой платы с поддержкой Auto MDI/MDI-X (также известное как "автоопределение"). Также понадобится перекрёстный (crossover) кабель для подключения непосредственно сетевой карты к другой сетевой карте. На странице Wikipedia содержится подробная низкоуровневая информация.

Завершающие заметки

Здесь нет завершающих заметок. Если есть проблемы с этим руководством, то либо напишите правильную информацию в статью, либо оставте короткое сообщение на странице обсуждения этой статьи с кратким изложением что именно не верно (на английском языке, прим. перев.). В конце концов кто-то прочтет это сообщение и исправит эту проблему(ы). Также можно оформите баг на багтрекере Gentoo (опять же, на английском языке, прим. перев.). Если есть некоторая информация, которая может улучшить данную статью, то сразу же включите ее в статью! Самое худшее, что может случиться - она может быть удалена, если не корректна.
This article is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Mike Frysinger (vapier)
They are listed here as the Wiki history does not allow for any external attribution. If you edit the Wiki article, please do not add yourself here; your contributions are recorded on the history page.