Настройка роутера для линукса

Наш рецепт отказоустойчивого Linux-роутера

В высоконагруженных проектах всегда повышенные требования к избыточности и надежности. Одним из важнейших звеньев инфраструктуры является маршрутизатор, потому что от его устойчивости зависит доступность сети в целом. Именно на таких узлах мы используем одну из схем реализации отказоустойчивого виртуального роутера на базе GNU/Linux с использованием iproute2, NetGWM, keepalived, ISC DHCPD, PowerDNS. Как мы всё это настраиваем, читайте в этой статье.

Компоненты

В идеальной схеме отказоустойчивого роутера мы резервируем все элементы, которые могут привести к недоступности сети, то есть:

  • каналы связи,
  • коммутаторы,
  • маршрутизаторы.

В общем виде схема (на уровне L2) выглядит так:

Как видно из схемы, нам нужны 2 коммутатора с поддержкой 802.1Q VLAN. Оператор 1 коммутируется в Коммутатор 1 и ему выделяется отдельный VLAN (например, 110). Оператор 2 коммутируется в Коммутатор 2, в другой VLAN (например, 120). Отдельный VLAN (в нашем случае — 200), выделяется под локальную сеть. Между коммутаторами организуется транк, и транком же линкуем оба маршрутизатора, которые и будут «сердцем» нашего виртуального роутера (схема router-on-a-stick).

Такая компоновка позволяет оставлять работоспособной сеть при выходе из строя любого компонента: роутера, коммутатора или оператора.

Стек базовых компонентов, которые мы используем в работе роутеров:

  • Ubuntu Linux;
  • NetGWM — утилита приоритезации основного шлюза в решении. Это наша Open Source-разработка, о которой мы готовим отдельную статью (пока предлагаю ознакомиться с базовой документацией) [Обновлено 08.08.2017: статья опубликована как «Настройка основного и двух резервных операторов на Linux-роутере с NetGWM»];
  • iproute2 — для создания нескольких таблиц маршрутизации;
  • keepalived — для реализации протокола VRRP в Linux;
  • ISC DHCPD — как горизонтально масштабируемый DHCP-сервер;
  • PowerDNS — как DNS-сервер для локальной сети.

Маршрутизаторы настраиваются примерно одинаково, за исключением конфигурации IP-адресов и keepalived.

Настройка интерфейсов

Настраиваем VLAN. Конфигурация /etc/network/interfaces будет выглядеть примерно так:

  • настраиваем blackhole — хорошая практика для того, чтобы локальные пакеты не улетали по маршруту по умолчанию в сторону провайдера;
  • net.ipv4.conf.$IFACE.rp_filter=0 — необходим для корректной работы multi-wan;
  • для каждого провайдера настраиваем отдельную таблицу маршрутизации с единственным маршрутом по умолчанию.

Настроим маркинг пакетов для направления в определенные таблицы — добавим в iptables правила:

И настроим правила маршрутизации для промаркированных пакетов — мы это делаем вызовом скрипта iprules.sh при выполнении ifup lo (смотри выше в /etc/network/interfaces ). Внутри скрипта:

Эти таблицы маршрутизации необходимо объявить в /etc/iproute2/rt_tables :

Балансировщик основного шлюза

Настроим NetGWM — утилиту для приоритезации основного шлюза. Она будет устанавливать маршрут по умолчанию, выбирая операторов в соответствии с двумя правилами: а) установленным нами приоритетом, б) статусом оператора (жив или нет).

Чтобы установить NetGWM, можно воспользоваться исходниками на GitHub или нашим репозиторием для Ubuntu. Второй способ в случае Ubuntu 14.04 LTS выглядит так:

Укажем в конфиге /etc/netgwm/netgwm.yml , что у нас 2 оператора, маршруты по умолчанию для каждого из них, приоритезацию и настройки для контроля доступности:

Обратите внимание на имена oper1 и oper2 — это названия таблиц маршрутизации из /etc/iproute2/ip_tables . Рестартнем сервис netgwm , чтобы он начал управлять шлюзом по умолчанию для системы:

Настройка keepalived

Keepalived — реализация протокола VRRP для Linux. Этот протокол позволяет реализовать схему с отказоустойчивой маршрутизацией, создавая виртуальный IP, который будет использоваться в качестве маршрута по умолчанию для обслуживаемой сети. Виртуальный IP автоматически передается резервному серверу при выходе из строя основного сервера.

Читайте также:  Root terminal kali linux

На этом этапе мы определяемся, что Маршрутизатор 2 будет играть роль Backup, а Маршрутизатор 1 — роль Master. Настраиваем keepalived, изменяя конфигурационный файл /etc/keepalived/keepalived.conf :

Так как наш отказоустойчивый роутер — многокомпонентный, мы решили использовать режим, в котором переключение keepalived режимов Backup → Master происходит только в случае отказа Master-сервера. За это как раз отвечает параметр nopreempt .

Настройка ISC DHCPD

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

Правим конфиг /etc/dhcp/dhcpd.conf :

Нам понадобится сгенерировать ключ update_key , с помощью которого мы будем обновлять зону mynet . Сгенерируем его и выведем на экран:

Скопируйте сгенерированный ключ и вставьте в конфигурационный файл вместо слова КЛЮЧ.

Настройка PowerDNS

В качестве DNS-сервера мы предпочли PowerDNS, так как он имеет возможность хранить зоны в СУБД MySQL, которую удобно реплицировать между первым и вторым сервером. Кроме того, PoweDNS — это производительное решение, хорошо функционирующее в высоконагруженном роутере.

Настройку PowerDNS начнем с подготовки базы данных.

Теперь нужно настроить PowerDNS и научить его работать с БД. Для этого требуется установить пакет pdns-backend-mysql и изменить конфиг /etc/powerdns/pdns.conf :

На этом базовая конфигурация PowerDNS закончена. Нам же ещё потребуется настроить рекурсор — обработчик рекурсивных DNS-запросов, который позволяет значительно повысить производительность DNS-сервера. Правим файл /etc/powerdns/recursor.conf :

В файл forward_zones вносим зоны intranet, которые обслуживают соседние серверы:

По окончании настройки перезапускаем сервисы pdns и pdns-recursor .

После запуска настраиваем реплику MySQL между серверами.

Заключение

Мы используем данное решение не только в чистом виде. В большинстве случаев оно усложняется добавлением туннелей VTun, OpenVPN или IPSec через основного и резервного оператора связи и динамической маршрутизацией, которая реализуется с помощью Quagga. Поэтому схему, предложенную в статье, предлагаю воспринимать как фундамент для создания более сложных решений.

Будем рады, если вы зададите свои вопросы в комментариях или укажете на места в схеме, которые можно улучшить. И, конечно, подписывайтесь на наш хаб, чтобы не пропускать новые полезные материалы! )

Источник

Настройка Linux-шлюза/маршрутизатора, руководство для не сетевых администраторов

Главное меню » Linux » Настройка Linux-шлюза/маршрутизатора, руководство для не сетевых администраторов

Мы напишем о том, как вы можете настроить обычный дистрибутив Linux в качестве пограничного маршрутизатора/шлюза для вашей локальной сети, но для простоты использования будем основывать свои примеры на Ubuntu.

Мы можем купить маршрутизатор или заменить устройство на что-то, что может обеспечить такую ​​же функциональность. В этом случае мы выбрали сервер Linux, поэтому нам нужно выяснить, какие сервисы предоставляет маршрутизатор, а затем каким-то образом эмулировать их:

  • DHCP для управления арендой
  • DNS для перевода доменов в IP
  • NAT, чтобы мультиплексировать одно соединение
  • Переадресация сервиса, выставление внутренних сервисов во внешнюю сеть

К счастью, Linux поддерживает все это:

  • ISC для DHCP
  • bind9 для DNS
  • iptables для NAT
  • снова iptables, для пересылки услуг

Мы будем настраивать каждую из этих служб в следующих постах, а пока:

Предварительная работа, настройка оборудования

Перед настройкой каких-либо служб вам понадобятся две вещи: две сетевые карты, одна для исходящего соединения, а другая для (коммутируемой) локальной сети, и способ сообщить серверу, что вы хотите, чтобы весь трафик из сети 1 был перенаправлен в сеть 2. Возможно, вы захотите установить более двух карт на случай, если вам потребуется маршрутизировать несколько локальных сетей. Мы увидим это позже.

Читайте также:  Linux одноранговая сеть windows

Вам также понадобится ОС. Мы выбрали Ubuntu, потому что она очень проста в установке и содержит все необходимое программное обеспечение в репозиториях, но вы можете использовать любой другой дистрибутив, если вам это нужно.

Кроме того, в этой статье мы будем использовать такую ​​настройку:

  • WAN доступ через eth0, адрес DHCP
  • LAN маршрутизация в eth1, сеть 192.168.25.1/24

Если у вас нет всего этого оборудования …

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

  1. Начните с создания того, что будет вашим маршрутизатором VM.
  2. Включите первый сетевой адаптер. Этот должен видеть ваш физический маршрутизатор (т.е. подключаться к глобальной сети).
  3. Включите второй сетевой адаптер. Используйте опцию «Внутренняя сеть» в поле «Прикреплено к». Это будет ваш интерфейс локальной сети.
  4. Создайте вторую виртуальную машину. Этот будет вашим клиентом.
  5. Включите один сетевой адаптер, также подключенный к внутренней сети. Имя этой сети должно совпадать с именем другой виртуальной машины.

Теперь все готово, с помощью этой виртуальной настройки вы можете начать настройку маршрутизатора.

Настройка Linux GW: NATting и пересылка

Для нашего Linux GW такие сервисы, как DNS и DHCP, хороши, но реальное подключение намного важнее. Давайте настроим функции NAT и переадресации соединений нового маршрутизатора, затем мы можем проверить, правильно ли работает наша установка, пропингуя IP одной локальной сети из другой.

Мы сделаем это, настроив NAT с помощью iptables. Нам также нужно будет настроить ОС для переадресации соединений с одной сетевой карты на другую:

Нам также нужно будет настроить IP для eth0, так как не будет DHCP-сервера (мы являемся сервером!). Откройте/etc/network/interfaces и добавьте что-то вроде этого:

После того, как все проверено, перезапустите сетевые сервисы, как ниже:

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

На своем клиентском ПК установите свой IP-адрес:

Проверьте, установлен ли у вас IP:

Если вы получили ответ, ваш новый IP-адрес в порядке, если нет, то проблема с вашим клиентом. Второй шаг, посмотрите, можете ли вы добраться до маршрутизатора:

Обратите внимание, что вам может потребоваться обновить все (т.е. перезапустить сеть и вручную назначить свой IP-адрес) после подключения кабеля.

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

Это должно дать вам ошибку. Конечно, поскольку нет DHCP, маршрут не установлен. Давайте вручную установим маршрут в клиенте:

Магия! Работает! Если это не так, у вас есть проблема либо в конфигурации NAT, либо в IP-пересылке маршрутизатора. Вы можете проверить это с помощью wireshark: если эхо-запросы достигают сервера, но они никогда не получают ответ, тогда это NAT, то есть он может пересылать IP-пакеты на eth1 на eth0, но у маршрутизатора нет NAT, и он не знает, как направить ответ обратно. Если эхо-запросы никогда не достигают eth0, тогда у вас проблема с пересылкой IP.

Сохранение правил пересылки

Чтобы правила пересылки сохранялись после перезагрузки, нам нужно сначала изменить /etc/sysctl.conf, чтобы разрешить пересылку IP. Это просто вопрос раскомментирования этой строки:

У нас также будет много правил iptables, которые нам нужно настроить во время загрузки. Мы создали скрипт в /home/router/set_forwarding.sh, который также связали с /etc/init.d/rc.local, поэтому он запускается всякий раз, когда загружается система.

Читайте также:  Как отключить все обновления windows 10 навсегда 2020

В следующий раз мы перейдем к чему-то более сложному: установке DNS-сервера и использованию доменов вместо IP-адресов.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Мини-обзор дистрибутивов Linux для создания роутера

Существует немецкая компания Mikrotik, которая выпускает отличные роутеры. Благодаря операционной системе, разработанной этой компанией, в роутер можно превратить любой компьютер.
Системные требования – невысоки, и зависят от типа выполняемых задач и нагрузки. Все бы хорошо, но данная операционная система является платной. В то же время, альтернативой для нее считаются сборки Linux router. Это – дистрибутивы, построенные на базе Linux, позволяющие получить от ПК функциональность роутера.

Дистрибутивы с низкими системными требованиями

Сразу отметим, что о машинах с 486-м процессором здесь речь не идет. Роутер можно собрать, если есть плата с процессором Pentium 166 МГц или выше. Современное ядро Linux – достаточно прожорливо, что поделать.
Ознакомьтесь с требованиями к железу, актуальными для каждого дистрибутива. Лучшим вариантом «апгрейда» ПК, используемого как роутер, можно считать добавление в него оперативной памяти. Впрочем, для начала будет достаточно и 32-х мегабайт… Рассматриваемые дистрибутивы поддерживают разные протоколы подключения (и даже через внешний COM-модем).

SmoothWall Express

Данный проект ведет свое начало с 2000 года. Дистрибутив сделан не на основе какой-либо готовой сборки, однако, распространяется под лицензией GPL. Актуальная сегодня версия: 3.1.

Системные требования:

  • Процессор – Pentium 166 МГц (можно без модуля MMX)
  • ОЗУ – 32 Мб
  • HDD – 2 Гб

Действуем так: скачиваем образ дистрибутива для требуемой архитектуры («686» значит «32-разрядный процессор», что подходит всем). В компьютер можно установить включительно до 4-х сетевых карт (проводных или беспроводных), большее число – не поддерживается.
Установка идет очень просто: нажимаем несколько раз «OK», выбираем раскладку клавиатуры и сетевое имя «роутера». В качестве политики исходящего трафика рекомендуем выбрать «Open».

IPCop Firewall

Эта сборка базировалась на SmoothWall, но затем родство потерялось. В задачу разработчиков входило сделать интерфейс настройки простым и понятным. То есть, похожим на web-интерфейс «обычного» роутера.

Системные требования:

  • Процессор – Pentium II 233 МГц (обязательно)
  • ОЗУ – 64 Мб
  • HDD – 2 Гб

Из протоколов VPN поддерживается только Open VPN. Интерфейс выглядит так:

Endian Firewall Community

Не что иное, как улучшенная версия предыдущего дистрибутива. Улучшения коснулись интерфейса и опций безопасности.

Системные требования – стали более «лояльными»:

  • Процессор – Pentium 166 МГц
  • ОЗУ – 64 Мб
  • HDD – 2 Гб

Впрочем, от IPCop в данном дистрибутиве осталось мало чего, так как он теперь построен на базе CentOS. Плюсы: можно сохранять настройки на отдельной USB-флешке. Минусы: по-прежнему, работает четыре сетевых порта.

Дистрибутивы для современных ПК

Рассматриваемые здесь сборки реализуют возможности профессионального роутера. Для дома и малого офиса – это избыточно. Например, дистрибутив Untangle подходит для средних организаций (50-300 рабочих станций и сетевых устройств). Мы приводим лишь минимальные системные требования и рассматриваем основные особенности.

Untangle Gateway

Не устанавливайте этот дистрибутив у себя дома. Интерфейс роутера здесь построен полностью на Java. Плюсы: все отображается «в реальном времени». Минусы: web-интерфейс требует много ресурсов, в том числе, на стороне терминала.

Потребуется:

  • Процессор – 800 МГц и выше (приводится «минимум», актуальный для 50-ти пользователей)
  • ОЗУ – 512 Мб
  • HDD – 20 Гб

Подключаемые модули есть во всех рассмотренных дистрибутивах. Но здесь в их числе будут: антивирус Касперского (платный), приложение для Active Directory, Web Filter от eSoft. Вообще, сборку считают функциональным аналогом системы ISA Server.

Vyatta CE

Установив данную операционную систему, пользователь получит аналог роутера Cisco. Все опции здесь доступны из командной строки, а web-интерфейс неудобен и требует знания синтаксиса:

Список системных требований:

  • Pentium III 450 МГц
  • ОЗУ – 128 Мб
  • HDD – 2 Гб

Кстати, Vyatta базируется на дистрибутиве Debian.

Источник

Оцените статью