Как сделать роутер из linux

Обновлено: 04.07.2024

Наиболее частым применением Linux серверов является организация общего доступа в интернет. Это обусловлено низкой стоимостью такого решения и невысокими требованиями к железу. Во многих случаях это бывает первый Linux сервер в организации, что способно вызвать у администраторов определенные сложности. В данной статье мы пошагово рассмотрим настройку роутера (NAT + DHCP + Squid) на базе Ubuntu Server 9.04

Внимание! Данный материал устарел, при настройке роутера на базе Ubuntu Server 12.04 и старше рекомендуем воспользоваться обновленной статьей.

Установка и первоначальная настройка

Ubuntu Server отличается от своей настольной версии отсутствием графической оболочки и пользовательских приложений, а также возможностью предустановки заранее выбранных ролей сервера. Несмотря на это, все сказанное будет справедливо для любой версии Ubuntu и, с некоторыми поправками, для любого Linux дистрибутива. Установка Ubuntu Server происходит в текстовом режиме на русском языке и, как правило, не вызывает сложностей. Отдельно стоит только остановится на списке ролей: из предложенного нас, пожалуй, может заинтересовать только OpenSSH, для удаленного доступа, однако воспользовавшись пунктом Manual package selection опытный пользователь может сразу установить необходимые ему пакеты.

NAT-DHCP-Squid-001.jpg

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

NAT-DHCP-Squid-002.jpg

В первую очередь настроим сетевые соединения. Вводим в консоли:

Эта команда откроет в консольном редакторе nano конфигурационный файл с сетевыми интерфейсами, аналогичный рисунку ниже.

NAT-DHCP-Squid-003.jpg

Пока там прописан единственный интерфейс eth0, настроенный на работу по DHCP. К eth0 у нас подключен ADSL модем (или любая сеть провайдера), а eth1 смотрит во внутреннюю сеть. IP адрес на внешнем интерфейсе 192.168.1.2, шлюз (ADSL модем) 192.168.1.1, внутренняя сеть лежит в диапазоне 10.0.0.1 - 254. Тогда настройки будут выглядеть следующим образом:

Сохраняем изменения Ctrl+O и выходим Ctrl+X. Теперь нужно настроить DNS, для этого выполняем:

В этом файле необходимо указать адреса DNS серверов, лучше всего указать DNS провайдера или, как в нашем случае, OpenDNS.

Сохраняем. Теперь нужно перезапустить сетевые службы (либо перезагрузиться):

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

Также рекомендуем обновить версии пакетов до актуальных:

Теперь установим Midnight Commander (mc), файловый менеджер по образу и подобию Norton Commander или Far:

Для запуска Midnight Commander достаточно набрать в консоли его краткое имя: mc. Сразу рекомендуем включить встроенный редактор, более удобный чем nano: F9 - Настройки - Конфигурация - Встроенный редактор.

NAT-DHCP-Squid-004.jpg

Для удаленного управления сервером (не бегать же к нему каждый раз) установим OpenSSH, что позволит подключаться к нему из любого места, даже из дома, по защищенному протоколу:

Для подключения с Windows станций можно использовать программу PuTTY (скачать), для корректного отображения символов перед подключением необходимо на закладке Window - Translation выбрать кодировку UTF8.

NAT-DHCP-Squid-005.PNG

Для ограничения доступа к серверу можно дописать в файл /etc/ssh/sshd_config параметр AllowUsers с указанием пользователя имеющего доступ по SSH, например для пользователя admin:

Также можно разрешить доступ определенной группе пользователей используя параметр AllowGroups, либо запретить доступ определенным пользователям / группам использовав DenyUsers и DenyGroups.

Настраиваем NAT

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

Потом откроем его в редакторе Midnight Commander (F4) и внесем следующий текст:

Сохраняем (F2), для автоматического запуска скрипта снова открываем /etc/network/interfaces и в самый конец файла дописываем:

Также не забываем дать нашему скрипту права на исполнение:

Если нигде не допущено ошибок все должно работать. Для проверки укажем на машинах внутренней сети в качестве шлюза и DNS адрес нашего роутера: 10.0.0.1 и пропингуем любой внешний адрес, например один из OpenDNS серверов: 208.67.222.222. Но интернет пока работать не будет. Почему? Да потому, что мы указали в качестве DNS сервера наш роутер, который пока таковым не является. Можно конечно явно прописать DNS на клиентской машине,однако, это не наш метод, если вдруг DNS сервера изменятся, нам что, бегать перепрописывать?

После установки открываем /etc/dnsmasq.conf, находим, раскомментируем и изменяем следующим образом строку, чтобы разрешить серверу принимать DNS запросы из внутренней сети.:

Перезапускаем DNS сервер:

После чего на клиентских машинах должен заработать интернет.

Настраиваем DHCP

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

Все что нам надо, это задать диапазон выдаваемых адресов (в нашем случае 10.0.0.100-150), сетевую маску и время, на которое выдается IP адрес:

Адреса DNS сервера и шлюза сервер берет автоматически из системных настроек. Еще раз перезапускаем Dnsmasq:

Теперь можно выставить на клиенте автоматическое получение IP адреса и убедиться, что все работает нормально.

NAT-DHCP-Squid-007.jpg

Просмотреть выданные адреса можно командой:

В выдаче будут перечислены выданные IP адреса и MAC адреса которым они выданы.

Настраиваем кеширующий прокси-сервер Squid

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

Останавливаем прокси-сервер и приступаем к настройке:

Открываем /etc/squid/squid.conf, находим и корректируем следующие строки, не забыв их раскомменитровать:

Указываем порт и адрес на котором squid будет принимать соединения:

Указываем внутренние сети, лишние комментируем:

Разрешаем доступ из внутренних сетей (найти и раскомменитровать):

Устанавливаем лимит использования памяти:

Задаем язык вывода ошибок для пользователя

Важное замечание! В Ubuntu 9.10 эта строка может выглядеть так, рекомендуем проверить правильность пути: error_directory /usr/share/squid/errors/ru

Сохраняем файл конфигурации. Теперь строим кэш и запускаем:


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

Компоненты

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

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


Как видно из схемы, нам нужны 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-сервер для локальной сети.

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

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

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


И настроим правила маршрутизации для промаркированных пакетов — мы это делаем вызовом скрипта 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 автоматически передается резервному серверу при выходе из строя основного сервера.

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

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

Favorite

Добавить в избранное

Главное меню » Операционная система Ubuntu » Как создать простой маршрутизатор с Ubuntu Server 18.04.1 LTS (Bionic Beaver)

(1 оценок, среднее: 5,00 из 5)

Как создать простой маршрутизатор с Ubuntu Server 18.04.1 LTS (Bionic Beaver)

Н едавно нашей задачей было установить общедоступные компьютеры за отдельным маршрутизатором для контроля доступа в Интернет. Поскольку у нас полно компьютерных компонентов, мы решили построить маршрутизатор на более старом компьютере с операционной системой Ubuntu Server 18.04.1 LTS (Bionic Beaver).

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

ПРЕДПОСЫЛКИ

Поскольку мы будем изменять брандмауэр, мы бы не советовали настраивать его через SSH. Вы можете заблокировать себя во время процесса.

1. НАСТРОЙКА СЕТЕВЫХ ИНТЕРФЕЙСОВ

Во-первых, нам нужно настроить сетевые интерфейсы, которые мы будем использовать. В нашем случае eth0 будет WAN, а eth1 LAN.

Небольшое замечание: Ubuntu 18.04 не использует традиционный файл конфигурации сети /etc/network/interfaces. Он использует NETPLAN. В нашем случае, есть конфигурационный файл, называется 50-cloud-init.yaml внутри папки /etc/netplan/. В вашем случае файл может иметь другое имя, просто найдите файл с расширением.yaml внутри папки netplan.

Давайте откроем это с помощью nano:

Отредактируйте его в соответствии с потребностями вашей сети, в моем примере я настроил это так:

Подводя итог: eth0, который является WAN, получает IP от модема интернет-провайдера. Eth1 является частью локальной сети маршрутизатора. Нам нужен статический IP и DNS-серверы (в нашем примере мы использовал Google). Также мы не настроили ни один шлюз на eth1.

Сохраните конфигурацию с помощью следующих команд:

2. НАСТРОЙКА СЕРВЕРА DHCP

Далее мы настроим DHCP-сервер. Мы действительно не хотим настраивать каждый клиент со статическим IP в сети LAN. Для этой задачи нам нужно установить следующий пакет.

Далее нам нужно отредактировать файл /etc/default/isc-dhcp-server. Это сообщает DHCP-серверу, какой сетевой интерфейс он должен прослушивать. В нашем случае это конечно eth1, интерфейс локальной сети.

А под «INTERFACESv4» вставьте сетевой интерфейс вашей локальной сети. В нашем случае это eth1 :

Следующим шагом будет настройка DHCP-сервера. Это делается путем редактирования файла /etc/dhcp/dhcpd.conf

Теперь давайте применим настройки и включим DHCP-сервер при загрузке с помощью следующих команд:

С помощью следующей команды мы проверяем статус.

Если все настроено правильно, должна быть строка «ACTIVE». В противном случае вы что-то напутали в файле /etc/dhcp/dhcpd.conf. Возможно, отсутствует точка с запятой или скобка.

3. НАСТРОЙКА ФАЙЕРВОЛА

Чтобы иметь функциональный маршрутизатор, нам нужно правильно настроить брандмауэр. Это делается путем записи некоторых правил iptables. Чтобы сохранить правила при перезапуске сервера, мы создали скрипт, который будет выполняться во время загрузки.

Сначала давайте включим UFW с…

Далее нам нужно включить пересылку пакетов из WAN в LAN. У нас следующий параметр внутри файла /etc/ufw/sysctl.conf:

В Ubuntu 18.04 файл /etc/rc.local больше не существует. Но мы все еще можем создать это с:

Этот сценарий должен выполняться во время загрузки, поэтому нам нужно сделать файл исполняемым с помощью следующей команды:

И это все. Мы перезагружаем маршрутизатор с помощью команды sudo reboot, и мы готовы к работе. 🙂

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

Прогресс не стоит на месте, и компьютеры, казавшиеся в прошлом или позапрошлом году одними из самых мощных, по своей производительности уже не дотягивают до компьютеров сегмента low-end нынешнего поколения.

Ротация компьютерного «железа» с каждым годом все возрастает, в связи с этим становится актуальной проблема, как поступить с компьютером пятилетней давности, который выбросить жалко, а что с ним делать — непонятно. В то же время системы связи не отстают от компьютерной техники, и на рынке появляется все больше сетевых устройств, которые раньше были ориентированы на установку в организациях, а теперь предназначаются для домашних пользователей, которых с каждым годом становится все больше. При этом стоимость таких устройств не снижается, поскольку в них внедряются новые, более производительные технологии. Кроме того, в больших городах нередки ситуации, когда на один дом приходится несколько локальных сетей и пользователи переходят с одной на другую (в зависимости от привлекательности тарифов), но при этом не желают расставаться с локальными ресурсами уже подключенной сети.

Для решения этих проблем при условии, что компьютер дома выключается редко (что у активных пользователей Интернета бывает в 80% случаев), можно из старого «железа» со­здать простой маршрутизатор на основе Linux, который позволит пользоваться несколькими сетями сразу и одновременно повысит уровень компьютерной грамотности пользователя. Сетевые устройства для конечных пользователей в основном рассчитаны на одного провайдера Интернета (имеется один WAN-порт для подключения к сети провайдера), а что делать, если их несколько? Эту проблему тоже решает компьютер-маршрутизатор!

Рассмотрим следующий пример конфигурации сети на предполагаемом компьютере-маршрутизаторе:

  • сеть с диапазоном IP-адресов 192.168.192.0-192.168.192.255 (сокращенная запись — 192.168.192.0/24 или 192.168.192.0/255.255.255.0) является локальной сетью в квартире. Туда входит несколько компьютеров, их адреса назначаются вручную. Компьютер, который служит маршрутизатором (в дальнейшем — просто сервер), имеет в этой сети IP-адрес 192.168.192.1;
  • сеть с диапазоном IP-адресов 10.0.0.0-10.255.255.255 (10.0.0.0/8 или 10.0.0.0/255.0.0.0) является локальной сетью одного из домовых провайдеров. Сервер имеет в этой сети IP-адрес 10.156.10.100, а шлюзом, выводящим сервер в локальную сеть, служит компьютер с IP-адресом 10.156.0.17. DNS-серверы доступны всегда и имеют IP-адреса 10.0.0.1 и 10.0.0.2;
  • сеть с диапазоном IP-адресов 192.168.0.0-192.168.255.255 (192.168.0.0/16 или 192.168.0.0/255.255.0.0) является локальной сетью другого провайдера. Сервер в этой сети имеет IP-адрес 192.168.11.188, шлюзом является компьютер с IP-адресом 192.168.11.1. DNS-сервер этой сети — 192.168.1.1.

Каждый из провайдеров выдает «серый» IP-адрес для клиентов в Интернете, то есть пользователи находятся за NAT.

Задача заключается в том, чтобы компьютеры домашней сети (первая сеть в списке) имели круглосуточный доступ в Интернет, а также в локальные сети обоих провайдеров. Допускается, что некоторые пользователи локальных сетей провайдеров будут иметь доступ к другой сети через компьютер-сервер. Желательна полная защита компьютера-сервера от вторжений из внешних сетей. Минимальная конфигурация сервера в этом случае должна быть такой:

  • процессор не менее Pentium II с частотой 400 МГц;
  • оперативная память не менее 128 Мбайт (оптимально 256 или 512 Мбайт);
  • жесткий диск 10 Гбайт;
  • три сетевые карты (это более оптимальное по производительности решение, чем одна на все три сети).

Настройка маршрутизации

Для того чтобы настроить локальные сети на сервере, необходимо каждой из сетевых карт прописать соответствующие настройки, для чего в Linux предусмотрена команда управления сетевыми интерфейсами ifconfig. По умолчанию каждому сетевому интерфейсу, работающему в сети Ethernet, назначается одно из виртуальных наименований вида ethX, где X — порядковый номер интерфейса в системе. Подкорректировать конфигурацию каждого из сетевых интерфейсов можно, выполнив следующие команды:

Ifconfig eth0 192.168.192.1 255.255.255.0

Ifconfig eth1 10.156.10.100 255.0.0.0

Ifconfig eth2 192.168.11.188 255.255.0.0

Проверить работоспособность интерфейсов можно посредством команды ping, обращенной к шлюзам локальных сетей:

ping 10.156.0.17

ping 192.168.11.1

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

Как и в среде Windows, в операционной системе Linux существует команда route, которая позволяет управлять и просматривать таблицу маршрутизации на компьютере, но, поскольку системы различны, синтаксис этих команд несколько различается. В системах семейства Linux для просмотра таблицы маршрутизации необходимо выполнить команду route -n, при этом ключ «-n» выводит только IP-адреса, без возможности провести соответствие с DNS-сервером. Пример вывода этой команды приведен на рисунке.

Вывод команды route -n

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

route add –host ip gw ipgw dev ethX,

где ip — IP-адрес компьютера, к которому прокладывается маршрут; ipgw — IP-адрес шлюза локальной сети, через которую прокладывается маршрут; X — номер сетевого интерфейса, соответствующий локальной сети провайдера, через которого прокладывается маршрут.

Поскольку в примере приведены IP-адреса DNS-серверов, необходимо четко указать к ним маршруты:

route add –host 192.168.1.1 gw 192.168.11.1 dev eth2

route add –host 10.0.0.1 gw 10.156.0.17 dev eth1

route add –host 10.0.0.2 gw 10.156.0.17 dev eth1

Затем следует прописать DNS-серверы на сервере, хотя это и необязательно, ведь он будет выполнять лишь роль маршрутизатора. Для этого в файле /etc/resolv.conf необходимо по порядку прописать DNS-провайдеров (в самом файле приведен пример записи DNS-серверов).

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

echo «1» > /proc/sys/net/ipv4/ip_forward

Чтобы при следующей перезагрузке этот параметр сохранился, необходимо отредактировать файл /etc/sysctl.conf и поменять в нем ноль на единицу в этом же параметре (net.ipv4.ip_forward). Тогда при следующей перезагрузке системы маршрутизация пакетов будет включена автоматически.

Теперь рассмотрим сам межсетевой экран iptables. Он представляет собой последовательность цепочек, заключенных в таблицы, по которым в определенной последовательности проходит пакет данных. Для таблицы netfilter, правила которой можно получить по команде iptables -L, первоначально пакет входит в цепочку INPUT, затем переходит в цепочку FORWARD, а потом уходит через цепочку OUTPUT, если, конечно, правила в цепочке этому не препятствуют. Данное объяснение довольно примитивно, однако оно дает четкое представление о принципе работы iptables.

Для осуществления маршрутизации пакетов необходимо в таблицу nat (она отвечает за маршрутизацию пакетов) добавить правила, которые бы регулировали прохождение пакетов с того или иного интерфейса. Поскольку в задачу сервера входит работа по обеспечению доступа в Интернет и сети провайдеров, сети с IP-адресами из локальной сети 192.168.192.0/24, необходимо в командной строке прописать:

iptables -t nat –A POSTROUTING –s 192.168.192.0/255.255.255.0 –j MASQUERADE,

где -t — ключ, который указывает на используемую таблицу (в данном случае это таблица маршрутизации — nat); -A — ключ, который указывает на добавление правила к цепочке POSTROUTING. В таблице nat присутствуют три цепочки: PREROUTING, POSTROUTING и OUTPUT, по смыслу очень схожие с цепочками из основной таблицы netfilter; -s — ключ, определяющий исходящие адреса компьютеров, на которые будет действовать правило (в данном случае диапазон локальной сети); -j — ключ, указывающий на действие, которое будет происходить с пакетом, определенным ранее указанными параметрами. Действие MASQUERADE обозначает не что иное, как подмену исходящего адреса пакетов с IP-адресов локальной сети на IP-адрес сервера, то есть так называемый SNAT. Существует и отдельное правило SNAT, но в нем необходимо указывать точный IP-адрес сервера через дополнительный параметр --to-source, а поскольку точно не известно, на какой из интерфейсов пойдет запрос (для eth1 необходимо назначить параметру IP-адрес 10.156.10.100, а для eth2 192.168.11.188), правило MASQUERADE в данном случае подходит лучше всего. Отметим, что политика MASQUERADE часто «забывает» о завершении соединения, а это при большой активности может отражаться на производительности системы. Также стоит обратить внимание на регистр прописываемых команд: они должны точно соответствовать описанному ранее, в противном случае iptables выдаст ошибку, так как в системе Linux регистр является критичным параметром при вводе любых команд.

Дать одному из пользователей локальной сети доступ в другую сеть, что иногда необходимо, можно, прописав подобную команду, только для ключа -s надо указать IP-адрес этого пользователя и добавить ключ -d, чтобы пользователь имел доступ только к конкретной сети или адресу, например:

iptables –t nat –A POSTROUTING –s 192.168.11.33 –d 10.156.15.150 –j MASQUERADE

Также необходимо учитывать, что этот пользователь должен находиться с сервером в одной подсети; если это не так, пользователь не сможет прописать на своем компьютере в таблицу маршрутизации маршрут, проходящий через сервер. Чтобы добавить в таблицу маршрутизации дополнительный маршрут, необходимо выполнить следующие действия (команды описываются для клиентов систем Windows):

route add ip mask x.x.x.x gw –p,

где ip — IP-адрес или диапазон адресов, к которому прописывается маршрут; x.x.x.x — маска подсети для указанного IP; gw — IP-адрес сервера, через который будет проходить маршрут; -p — ключ, добавляющий маршрут к постоянному списку маршрутов.

Применительно к приведенному примеру, где локальному пользователю с IP-адресом 192.168.11.33 позволяется обращаться к ресурсу с IP-адресом 10.156.15.150 другой сети, команда выглядит следующим образом:

route add 10.156.15.150 mask 255.255.255.255 192.168.11.188 –p

После установки этих настроек пользователи локальной сети 192.168.192.0/24 получают доступ в локальные сети. Для проверки работоспособности каждому из клиентов этой сети необходимо прописать в качестве шлюза IP-адрес сервера — 192.168.192.1 и добавить DNS-серверы обоих провайдеров.

Поскольку каждый из провайдеров предоставляет услугу доступа в Интернет с «серым» IP-адресом, для работы с Интернетом необходимо указать на сервере шлюз одного из провайдеров, который будет использоваться системой по умолчанию, например 10.156.0.17. Для этого в командной строке нужно прописать следующую команду:

route add default gw 10.156.0.17 dev eth1

Защита маршрутизатора

Поскольку маршрутизатор не выполняет никаких функций, кроме перенаправления пакетов, можно заблокировать доступ к большинству служб, оставив только доступ к администрированию. Чтобы маршрутизация работала, при блокировке входящих соединений необходимо в таблицу netfilter и ее цепочку FORWARD прописать правило, которое разрешает доступ клиентов к локальной маршрутизации. Сделать это можно так:

iptables –A FORWARD –s 192.168.192.0/255.255.255.0 –j ACCEPT,

где -A FORWARD — указание на используемую цепочку; -s — указание на диапазон IP-адресов, к которым применяется правило; -j ACCEPT — правило разрешения доступа.

Для организации доступа к администрированию сервера по протоколу ssh (используется практически во всех Linux-системах) необходимо также добавить следующее правило:

iptables –A INPUT –s 192.168.192.0/255.255.255.0 –j ACCEPT

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

iptables –P INPUT DROP,

где ключ -P указывает на применение политики DROP ко всей цепочке INPUT. Таким правилом блокируется доступ к серверу любых пакетов, не входящих в правило с политикой ACCEPT. Это одно из грубых решений, однако оно наиболее эффективно для борьбы с хакерами, которые часто обитают внутри локальных сетей (поскольку скорость соединения в локальной сети значительно выше, чем в Интернете, хакеры гораздо более настойчивы и атака типа DDoS может оказаться очень эффективной).

В качестве последнего штриха необходимо сохранить правила в файле /etc/sysconfig/iptables при помощи команды:

iptables-save > /etc/sysconfig/iptables

чтобы при следующей перезагрузке система автоматически подгрузила правила цепочек.

Если в дальнейшем планируется дополнительное изменение цепочек iptables, чтобы каждый раз не применять команду iptables-save, можно в файле /etc/sysconfig/iptables-config изменить значение IPTABLES_SAVE_ON_RESTART с «no» на «yes», поскольку в некоторых версиях Linux сохранение цепочек отключено по умолчанию.

Восстановление работоспособности

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

Создадим файл в папке /root с названием checker и внесем в него следующие строки:

date >> /tmp/chk.log

ethernet2=`route | awk ‘/default/ ’`

if [ $ethernet2 = 192.168.11.1 ]

then

else

ethernet3=0

fi

if [ $ethernet3 > 3 ]

then

route del default

route add default gw 192.168.11.1 dev eth1

fi

if [ $ethernet > 3 ]

then

echo «First ISP working fine» >> /tmp/chk.log

else

echo «First ISP: connection lost» >> /tmp/chk.log

route del default

route add default gw 192.168.11.1 dev eth2

echo «Second ISP connected» >> /tmp/chk.log

fi

Для того чтобы добавить выполнение этого скрипта в планировщик заданий crond, необходимо в файле /var/spool/cron/root добавить строку вида:

*/5 * * * * /home/root/checker,

где число 5 обозначает, через сколько минут запускать скрипт проверки работоспособности интернет-канала.

Затем необходимо перезапустить crond командой:

service crond reload

Теперь маршрутизатор полностью готов к работе. Если все сделано правильно, можно поставить этот сервер в темный уголок, обеспечить его источником бесперебойного питания и забыть о нем на продолжительное время. Отметим, что в данной статье описывается только статическая маршрутизация — для динамической маршрутизации, когда провайдер выдает IP-адреса через DHCP-сервер, настройки будут несколько иные, однако тут нужно понимать, что практически любой провайдер дает одну или несколько подсетей, которые не обслуживаются DHCP-сервером, поэтому можно смело присваивать себе постоянный внутренний IP-адрес.

Как мы и ожидали в предыдущих уроках этого LFCE (Сертифицированный инженер Linux Foundation), в этой статье мы обсудим статическую и динамическую маршрутизацию IP-трафика для конкретных приложений.Зна

Содержание:

Как мы и ожидали в предыдущих уроках этого LFCE (Сертифицированный инженер Linux Foundation), в этой статье мы обсудим статическую и динамическую маршрутизацию IP-трафика для конкретных приложений.

Знакомство с программой сертификации Linux Foundation

Перво-наперво, давайте определимся прямо:

Расширенная настройка IP и сетевых устройств

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

Центральное коммунальное предприятие в iproute люкс называется просто ip. Его основной синтаксис выглядит следующим образом:

где объект может быть только одним из следующих (показаны только наиболее часто встречающиеся объекты - вы можете обратиться к man ip для полного списка):

  1. ссылка: сетевое устройство.
  2. адрес: протокол (IP или IPv6) адрес устройства.
  3. маршрут: запись в таблице маршрутизации.
  4. правило: правило в базе данных политик маршрутизации.

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

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

Для таких дополнительных примеров "ip‘, Прочтите 10 полезных команд‘ ip ’для настройки IP-адреса

Пример 1: Отключение и включение сетевого интерфейса

В этом примере мы отключим и включим eth1:

Если вы хотите снова включить eth1,

Вместо отображения всех сетевых интерфейсов мы можем указать один из них:

Что вернет всю информацию для eth1.

Пример 2: Отображение основной таблицы маршрутизации

Вы можете просмотреть свою текущую основную таблицу маршрутизации с помощью любой из следующих 3 команд:

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

Хотя в наши дни команда ip предпочтительнее маршрута, вы все равно можете обратиться к мужчине ip-маршрут а также человек маршрут для подробного объяснения остальных столбцов.

Пример 3: Использование сервера Linux для маршрутизации пакетов между двумя частными сетями

Мы хотим проложить маршрут icmp (ping) пакеты от dev2 до dev4 и наоборот (обратите внимание, что обе клиентские машины находятся в разных сетях). Имя каждой сетевой карты вместе с соответствующим IPv4-адресом приводится в квадратных скобках.

Наша тестовая среда выглядит следующим образом:

Клиент 1: CentOS 7 [enp0s3: 192.168.0.17/24] - dev1 Маршрутизатор: Debian Wheezy 7.7 [eth0: 192.168.0.15/24, eth1: 10.0.0.15/24] - dev2 Клиент 2: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

Давайте посмотрим на таблицу маршрутизации в dev1 (поле CentOS):

а затем измените его, чтобы использовать его enp0s3 Сетевая карта и подключение к 192.168.0.15 для доступа к хостам в сети 10.0.0.0/24:

Аналогично в dev4 (поле openSUSE) для проверки связи с хостами в сети 192.168.0.0/24:

Наконец, нам нужно включить пересылку в нашем маршрутизаторе Debian:

А теперь пингуем:

Чтобы сделать эти настройки постоянными при разных загрузках, отредактируйте /etc/sysctl.conf на маршрутизаторе и убедитесь, что net.ipv4.ip_forward переменная устанавливается в значение true следующим образом:

Кроме того, настройте сетевые адаптеры на обоих клиентах (найдите файл конфигурации в / и т.д. / sysconfig / сеть на openSUSE и / и т.д. / sysconfig / сетевые сценарии в CentOS - в обоих случаях он называется ifcfg-enp0s3).

Вот файл конфигурации из окна openSUSE:

BOOTPROTO = статический BROADCAST = 10.0.0.255 IPADDR = 10.0.0.18 NETMASK = 255.255.255.0 GATEWAY = 10.0.0.15 NAME = enp0s3 NETWORK = 10.0.0.0 ONBOOT = да

Пример 4: Использование сервера Linux для маршрутизации пакетов между частной сетью и Интернетом

Другой сценарий, в котором компьютер с Linux можно использовать в качестве маршрутизатора, - это когда вам нужно использовать подключение к Интернету совместно с частной локальной сетью.

Маршрутизатор: Debian Wheezy 7.7 [eth0: общедоступный IP-адрес, eth1: 10.0.0.15/24] - dev2 Клиент: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

В дополнение к настройке пересылки пакетов и статической таблицы маршрутизации в клиенте, как в предыдущем примере, нам необходимо добавить несколько правил iptables в маршрутизатор:

Первая команда добавляет правило к РАЗМЕЩЕНИЕ в таблице nat (преобразование сетевых адресов), указывая, что сетевая карта eth0 должна использоваться для исходящих пакетов.

Только часть вывода:

показано на следующем снимке экрана.

Где выделены источник (частный IP-адрес openSUSE box) и пункт назначения (Google DNS) пакетов. Это результат бега:

в окне openSUSE.

Как я уверен, вы уже догадались, маршрутизатор использует Google 8.8.8.8 в качестве сервера имен, что объясняет, почему пункт назначения исходящих пакетов указывает на этот адрес.

Не забудьте сделать свои правила iptables постоянными, выполнив действия, описанные в части 8 - Настройка брандмауэра Iptables этой серии.

Динамическая маршрутизация с Quagga

В настоящее время наиболее часто используемым инструментом для динамической маршрутизации в Linux является квагга. Это позволяет системным администраторам реализовать на относительно недорогом сервере Linux те же функции, что и мощные (и дорогие) маршрутизаторы Cisco.

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

Поскольку это форк zebra, программы, разработка которой прекратилась некоторое время назад, по историческим причинам она поддерживает те же команды и структуру, что и zebra. Вот почему с этого момента вы увидите много упоминаний о зебре.

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

Установка Quagga в Linux

Чтобы установить quagga в выбранный вами дистрибутив:

Мы будем использовать ту же среду, что и в примере № 3, с той лишь разницей, что eth0 подключен к главному шлюзу-маршрутизатору с IP 192.168.0.1.

Далее редактируем / и т. д. / quagga / демоны с,

зебра = 1 рипд = 1

Теперь создайте следующие файлы конфигурации.

и добавьте эти строки (замените имя хоста и пароль на ваш выбор):

сервис quagga перезапустить имя хоста dev2 пароль quagga

Запись: Который ripd.conf - это файл конфигурации для протокола информации о маршрутизации, который предоставляет маршрутизатору информацию о том, какие сети могут быть доступны и как далеко (с точки зрения количества переходов) они находятся.

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

Пример 5: Настройка quagga для динамической маршрутизации IP-трафика

Важный: Не забудьте повторить следующую настройку для обоих маршрутизаторов.

Подключиться к зебре (прослушивание порта 2601), который является логическим посредником между маршрутизатором и ядром:

Введите пароль, который был установлен в /etc/quagga/zebra.conf файл, а затем включите конфигурацию:

включить настроить терминал

Введите IP-адрес и сетевую маску каждой сетевой карты:

inter eth0 ip адрес 192.168.0.15 inter eth1 ip адрес 10.0.0.15 выход выход запись

Теперь нам нужно подключиться к ПОКОЙСЯ С МИРОМ терминал демона (порт 2602):

Введите имя пользователя и пароль, как настроено в /etc/quagga/ripd.conf файл, а затем введите следующие команды полужирным шрифтом (комментарии добавлены для пояснения):

включить включает команду привилегированного режима. настроить терминал переходит в режим конфигурации. Эта команда - первый шаг к настройке роутер включает RIP. сеть 10.0.0.0/24 устанавливает интерфейс включения RIP для сети 10.0.0.0/24. ВыходВыходзаписывать записывает текущую конфигурацию в файл конфигурации.

Запись: В обоих случаях конфигурация добавляется к строкам, которые мы добавили ранее (/etc/quagga/zebra.conf а также /etc/quagga/ripd.conf).

Если вы хотите попробовать другие протоколы или настройки, вы можете обратиться к сайту проекта Quagga для получения дополнительной документации.

Вывод

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

Читайте также: