Создание отказоустойчивой ИТ инфраструктуры. Часть 3. Организация маршрутизации на роутерах VyOS
Основная цель статьи — показать процесс установки и настройки виртуальных маршрутизаторов VyOS на кластере oVirt, для организации связи на уровне L3 между внутренними и внешними сетями.
Также в статье будут рассмотрены вопросы, связанные с особенностями настройки выхода в Интернет через двух провайдеров, и повышения отказоустойчивости межсетевой маршрутизации.
Вводная часть
Основываясь на двух предыдущих статьях:
Мы к этому времени создали отказоустойчивый кластер oVirt, с подключенным к нему СХД для хранения виртуальных дисков ВМ. При этом все сетевые устройства и хосты коммутируются в стек из двух коммутаторов второго уровня Cisco C2960RX, на котором настроены соответствующие порты в транковом или статическом режимах, и к которым привязаны идентификаторы VLAN.
С формальной и практической точек зрения, у нас имеется полная связность на уровне L2 между устройствами и ВМ в пределах одного и тоже VLAN’а.
VLAN — это «виртуальная» локальная сеть, в которой все хосты взаимодействуют друг с другом в пределах одной широковещательной области (или сети). Обычно широковещательные области изолируются друг от друга с помощью VLAN, настраиваемых на портах коммутатора, хотя давным-давно сети разделяли физически, а не логически, подключая хосты из определённой группы доступа, к своим сетевым концентраторам, или хабам.
Для взаимодействия хостов из разных широковещательных областей (VLAN’ов) между собой, нам необходимо устройство, которое может соединить их на третьем уровне OSI, или по-простому — маршрутизатор. Это устройство, в свою очередь, также может использоваться для подключения к внешним сетям, обеспечивая выход из внутренних сетей в Интернет.
Основная наша задача — это создание отказоустойчивой ИТ инфраструктуры, в том числе и сетевой, поэтому нам потребуется связка из двух маршрутизаторов, где один маршрутизатор является ведущим, а второй ведомым. В случае выхода из строя ведущего маршрутизатора, в дело вступает ведомый, и весь трафик начинает идти через него.
Главное требование к такой схеме — она должна быть устойчивой и абсолютно прозрачной для всех сетевых потребителей, т.е. они не должны страдать от каких-либо потерь во время таких переключений, и тем более на них ничего не нужно дополнительно настраивать, кроме IP адреса, маски и шлюза по умолчанию.
В качестве маршрутизатора был выбран VyOS версии 1.2.2, по причине уже довольно длительной эксплуатации (в нашей организации), в ходе которой он показал себя только с положительной стороны, работая как на физических серверах, так и в виде виртуальных машин под управлением гипервизора KVM.
VyOS содержит в себе много полезного для сетевого администрирования функционала — работу с динамическими протоколами маршрутизации, VPN и IPSec туннелями, WAN load balancing, VRRP, QoS, и т.д.
В основе VyOS лежит ядро Debian, а CLI (командный интерфейс), очень напоминает таковой у Juniper, так что особой сложности у тех, кто с ним уже знаком, он не вызовет.
О наличии GUI (графической оболочки) для VyOS на сегодняшний момент ничего не известно, но работа в его консоли для любого Linux/Cisco/Juniper администратора, не должна вызывать затруднений, тем более что «под капотом» у него Debian, в котором можно при необходимости запускать знакомые системные утилиты, хотя конечно же необходимо использовать в первую очередь CLI самого VyOS.
Как всегда, перед началом работы с новым ПО, желательно ознакомиться с документаций на него — VyOS User Guide, чтобы дальнейшее чтение статьи прошло без сложностей. К тому же на Habr имеется свежая обзорная статья про VyOS, надеюсь что автор будет не против ссылки на неё :)
Дистрибутив VyOS доступен в следующих вариантах:
- по подписке — это стабильные LTS (long-term support) версии;
- в виде rolling releases, выпускающихся ежедневно (использовать в production можно, но только после тщательного и длительного тестирования и конечно на свой страх и риск);
- в виде самостоятельно собранного LTS образа VyOS из исходников.
Для ускорения процесса развёртывания маршрутизаторов, в статье будет использоваться свежий rolling release VyOS 1.2.2, как вариант можно использовать бесплатную предыдущую LTS версию VyOS 1.1.8.
Протоколы и технологии (применительно к VyOS), которые будут задействованы в статье:
Подключение датацентра к Интернет с помощью протокола BGP в этой статье не рассматривается, так как у большинства организаций обычно нет такой необходимости, но при наличии технических возможностей и поддержке со стороны провайдеров, его можно без проблем реализовать.
Итак, после небольшого вступления, перейдём к основной теме статьи. Чтобы было удобно ориентироваться, приведу основные главы статьи:
- Описание тестового стенда.
- Подготовительные работы.
- Начальная настройка маршрутизаторов VyOS.
- Настройка правил на файерволе.
- Настройка vrrp для отказоустойчивой маршрутизации.
- Настройка выхода в Интернет через двух провайдеров.
Описание тестового стенда
Для тестового стенда в качестве внешних IP адресов и сетей, везде указаны приватные IP адреса, что конечно же никак не меняет сути нашей задачи и правил, по которым работают протоколы маршрутизации и функционирует Интернет. Ничто не помешает затем вместо приватных адресов использовать публичные адреса, и подключить нашу инфраструктуру к сети Интернет.
Для реализации отказоустойчивого подключения к сети Интернет и внутренним сетям, будут использоваться:
- два виртуальных маршрутизатора — VyOS1 и VyOS2.
- три виртуальных маршрутизатора с ОС CentOS 7 и пакетом Quagga — Provider-1, Provider-2 и Provider-3, для эмуляции работы сети Интернет.
- несколько клиентских машин с ОС CentOS 7, для тестирования связности между внутренними и внешними сетями.
Все виртуальные маршрутизаторы и клиентские ВМ, будут работать на кластере oVirt. Это не значит, что весь тестовый стенд «заточен» именно под oVirt, его можно реализовать на чём угодно — на ВМ под управлением обычного KVM, VMware, Hyper-V, и даже на физических хостах.
Общая схема сети на уровне L3 для тестового стенда:
На этой схеме имеется несколько допущений:
- все «публичные» сети начинаются с 172.16.x.x, и являются по отношению к сетям в датацентре внешними, это необходимо для эмуляции работы внутренних сетей с хостами в Интернет
- все приватные сети в датацентре начинаются с 172.20.x.x
В составе тестового стенда будут использованы следующие сети, с соответствующими идентификаторами VLAN:
- VLAN17 — сеть 172.20.1.0/24, приватные адреса для хостов в датацентре (IPMI, management)
- VLAN30 — сеть 172.16.1.0/24, «публичная» сеть, связь между VyOS1, VyOS2 и Provider-1
- VLAN31 — сеть 172.16.2.0/24, «публичная» сеть, связь между VyOS1, VyOS2 и Provider-2
- VLAN32 — сеть 172.20.32.0/23, приватные адреса для хостов в датацентре — PROD
- VLAN36 — сеть 172.16.10.8/30, «публичная» P2P сеть, связь между роутерами Provider-1 и Provider-3
- VLAN37 — сеть 172.16.10.12/30, «публичная» P2P сеть, связь между роутерами Provider-2 и Provider-3
- VLAN38 — сеть 172.16.3.0/24, «публичная» сеть для внешних хостов, эмуляция Интернет
- VLAN40 — сеть 172.20.40.0/23, приватные адреса для хостов в датацентре — TEST
В процессе развёртывания тестового стенда, нам придётся настраивать протокол BGP на роутерах Provider-1, Provider-2 и Provider-3, чтобы обеспечить связность между «публичными» сетями 172.16.1.0/24, 172.16.2.0/24 и 172.16.3.0/24
Задачи, которые сетевому администратору предстоит реализовать:
- обеспечить отказоустойчивое подключение к двум независимым провайдерам, для выхода в Интернет из внутренних сетей датацентра;
- все хосты в датацентре с адресами из приватных сетей, должны выходить в Интернет через NAT;
- выход из строя одного из маршрутизаторов VyOS, никак не должен сказываться на доступности хостов между внутренними сетями, и на доступность выхода в Интернет.
Подготовительные работы.
Перед развёртыванием проекта, необходимо создать 9 виртуальных машин в oVirt:
- VyOS — 2 шт., ОС — последний rolling release
- маршрутизаторы с пакетом Quagga — 3 шт., ОС — CentOS 7×86/64 1810 Minimal (можно более свежую)
- клиентские ВМ — 4 шт., ОС — CentOS 7×86/64 1810 Minimal (можно более свежую)
- test-17 — 1 Gb RAM, 1 CPU, 10 Gb HDD
- VLAN17, IP — 172.20.1.239/24, Gateway — 172.20.1.1
- test-IM32 — 1 Gb RAM, 1 CPU, 10 Gb HDD
- VLAN32, IP — 172.20.32.239/23, Gateway — 172.20.32.1
- test-IM40 — 1 Gb RAM, 1 CPU, 10 Gb HDD
- VLAN40, IP — 172.20.40.239/23, Gateway — 172.20.40.1
- test-public — 1 Gb RAM, 1 CPU, 10 Gb HDD,
- VLAN38, IP — 172.16.3.2/24, Gateway — 172.16.3.1
- PROVIDER-1 — 1 Gb RAM, 1 CPU, 10 Gb HDD
- VLAN30, IP — 172.16.1.1/24
- VLAN36, IP — 172.16.10.9/30
- PROVIDER-2 — 1 Gb RAM, 1 CPU, 10 Gb HDD
- VLAN31, IP — 172.16.2.1/24
- VLAN37, IP — 172.16.10.13/30
- PROVIDER-3 — 1 Gb RAM, 1 CPU, 10 Gb HDD
- VLAN36, IP — 172.16.10.10/30
- VLAN37, IP — 172.16.10.14/30
- VLAN38, IP — 172.16.3.1/24
- VyOS1 — 1 Gb RAM, 1 CPU, 10 Gb HDD
- eth0: VLAN17, IP — 172.20.1.253/24
- eth1: VLAN30, IP — 172.16.1.2/24
- eth2: VLAN31, IP — 172.16.2.3/24
- eth3: VLAN32, IP — 172.20.33.253/23
- eth4: VLAN40, IP — 172.20.40.253/23
- VyOS2 — 1 Gb RAM, 1 CPU, 10 Gb HDD
- eth0: VLAN17, IP — 172.20.1.254/24
- eth1: VLAN30, IP — 172.16.1.3/24
- eth2: VLAN31, IP — 172.16.2.2/24
- eth3: VLAN32, IP — 172.20.33.254/23
- eth4: VLAN40, IP — 172.20.40.254/23
Все необходимые идентификаторы VLAN были созданы на коммутаторах и назначены на соответствующие сетевые порты ещё в самой первой статье из цикла.
Из подготовительных работ, нужно ещё сделать следующее:
1) Создать все используемые выше логические сети в административном портале oVirt, а затем назначить их на хосты кластера.
Делаем всё по инструкциям из предыдущей статьи, а также по официальной документации. Результат этой работы можно посмотреть на скриншотах, настройки сети у обоих хостов кластера должны быть идентичны:
2) Установить ОС на виртуальные маршрутизаторы с пакетом Quagga, а также ОС на клиентские ВМ.
После подключения ВМ к соответствующим логическим сетям, устанавливаем на них ОС, и настраиваем IP адреса и шлюзы в соответствии со списком ВМ и со схемой сети.
Добавлять установочные образы с ОС и создавать виртуальные машины мы научились в предыдущей статье, поэтому особых затруднений этот процесс не должен вызвать.
Дальнейшая настройка этих виртуальных машин будет выполнена далее, по ходу статьи.
Начальная настройка маршрутизаторов VyOS.
Официальная документация по установке VyOS, FAQ.
Для установки маршрутизатора VyOs в качестве виртуальной машины под управлением oVirt:
- скачиваем ISO с самым последним rolling release по ссылке
- добавляем этот образ в oVirt
- создаём виртуальную машину и назначаем для неё логические сети
- назначаем первым загрузочным устройством установочный ISO образ с VyOS
- включаем ВМ и приступаем к установке.
После включения ВМ и загрузки с ISO, заходим в консоль ВМ и вводим команду для начала установки ОС:
vyos@vyos:~$ install image
После завершения установки ОС, отсоединяем CD от ВМ, и перезагружаем её:
vyos@vyos:~$ reboot
Логин и пароль по умолчанию для входа в виртуальный маршрутизатор VyOS: vyos / vyos
После перезагрузки виртуального маршрутизатора, заходим в консоль роутера (из административного портала oVirt), и проверяем образ, с которого он загрузился, и с которым мы теперь будем работать.
vyos@VyOS1:~$ sh system image
The system currently has the following image(s) installed:
1: 1.2-rolling-201909060337 (default boot) (running image)
vyos@VyOS1:~$ show version
Version: VyOS 1.2-rolling-201909060337
Built by: autobuild@vyos.net
Built on: Fri 06 Sep 2019 03:37 UTC
Build UUID: 8b5401ba-b2eb-45d9-b267-1e3c5cfba6d7
Build Commit ID: ad4c3805b7b9af
Architecture: x86_64
Boot via: installed image
System type: KVM guest
Hardware vendor: oVirt
Hardware model: oVirt Node
Hardware S/N: 4c4c4544-004a-5010-804e-cac04f4e5232
Hardware UUID: 0f6dcc5e-b60b-4a47-81cc-6885339aa695
Copyright: VyOS maintainers and contributors
Для входа в режим конфигурирования роутера (по аналогии с »configure terminal» для устройств Cisco), вводим команду:
vyos@VyOS1:~$ configure
[edit]
vyos@VyOS1#
Настройка сетевых интерфейсов и других параметров маршрутизатора, может производиться только в режим конфигурирования.
Команды для просмотра сетевых интерфейсов и их настроек:
show interfaces ethernet
show interfaces ethernet detail
show interfaces ethernet eth0
Настройка сетевого интерфейса VLAN17:
set interfaces ethernet eth0 address '172.20.1.253/24'
set interfaces ethernet eth0 description 'VLAN17'
Чтобы удалить IP адрес с интерфейса:
set delete interfaces ethernet eth0 address 172.20.1.253/24
Настройка сетевого интерфейса VLAN30:
set interfaces ethernet eth1 address '172.16.1.2/24'
set interfaces ethernet eth1 description 'VLAN30'
Настройка сетевого интерфейса VLAN31:
set interfaces ethernet eth2 address '172.16.2.3/24'
set interfaces ethernet eth2 description 'VLAN31'
Настройка сетевого интерфейса VLAN32:
set interfaces ethernet eth3 address '172.20.33.253/23'
set interfaces ethernet eth3 description 'VLAN32'
Настройка сетевого интерфейса VLAN40:
set interfaces ethernet eth4 address '172.20.40.253/23'
set interfaces ethernet eth4 description 'VLAN40'
Настройка сетевого интерфейса VLAN17:
set interfaces ethernet eth0 address '172.20.1.254/24'
set interfaces ethernet eth0 description 'VLAN17'
Настройка сетевого интерфейса VLAN30:
set interfaces ethernet eth1 address '172.16.1.3/24'
set interfaces ethernet eth1 description 'VLAN30'
Настройка сетевого интерфейса VLAN31:
set interfaces ethernet eth2 address '172.16.2.2/24'
set interfaces ethernet eth2 description 'VLAN31'
Настройка сетевого интерфейса VLAN32:
set interfaces ethernet eth3 address '172.20.33.254/23'
set interfaces ethernet eth3 description 'VLAN32'
Настройка сетевого интерфейса VLAN40:
set interfaces ethernet eth4 address '172.20.40.254/23'
set interfaces ethernet eth4 description 'VLAN40'
Включение SSH для удалённого управления маршрутизатором
set service ssh port 22
Настройка DNS forwarder для разрешения внешних имён с роутера
set system name-server 1.1.1.1
set system name-server 8.8.8.8
Настройка имени роутера и уровня логирования
set system host-name VyOS1
set system syslog global facility all level 'notice'
Добавление ключа SSH для аутентификации пользователя на роутере
set system login user vyos authentication public-keys 'vyos' key "very_very_very_long_key"
set system login user vyos authentication public-keys 'vyos' type ssh-rsa
Настройка ntp сервера и временной зоны
set system ntp server 0.pool.ntp.org
set system ntp server 1.pool.ntp.org
set system ntp server 2.pool.ntp.org
set system time-zone Europe/Moscow
date
Ускорение медленной работы по SSH (если нет доступа к DNS серверам)
edit service ssh disable-host-validation
Для сохранения всех сделанных изменений, выполняем команды
commit
save
Для отказа от всех сделанных изменений, выполняем команду
discard
Приведённые выше настройки, являются минимально достаточными для начала работы с VyOS через SSH, с аутентификацией по паролю или SSH ключу.
Помимо этих базовых настроек, существует ещё множество других, которые могут пригодиться при дальнейшей работе с VyOS, например, для:
- настройки SNMP для мониторинга параметров маршрутизатора, к примеру, в небезызвестном Zabbix;
- настройки роутера для автоматической выгрузки на tftp сервер всех изменений в конфигурации, после каждого commit’а и мониторинга факта таких изменений в Zabbix;
- настройки резервного копирования конфигурационного файла VyOS на tftp сервер по расписанию;
- и т.п.
Все дополнительные настройки в рамках этой статьи описать нереально, так как потребуется ещё добавлять информацию о шаблонах и параметрах системы мониторинга Zabbix, поэтому их внедрение и использование может быть темой одной из будущих статей.
Настройка правил на файерволе.
Ссылка на документацию — Firewall.
VyOS использует для фильтрации сетевых пакетов netfilter.
Политика для файервола в VyOS может применяться двумя способами:
- политика, применяемая к интерфейсу (Per-Interface)
- политика зоны (Zone Policy).
В статье будет использоваться политика, применяемая к интерфейсу.
Политика для файервола управляется через наборы правил — это раздельные группы правил, пронумерованные от 1 до 9999. Правила выполняются последовательно, в соответствии с номером правила. Если трафик соответствует правилу, действие правила выполняется; если нет, то система переходит к следующему правилу.
Правила выполняют следующие действия:
- Accept — означает, что трафик разрешается
- Drop — означает, что трафик молча отбрасывается
- Reject — означает, что трафик отбрасывается с сообщением «ICMP Port Unreachable».
Наборы правил обычно применяются к интерфейсу, или к нескольким интерфейсам, в следующих направлениях:
- входящий трафик (или in)
Соответствует входящему интерфейсу цепочки FORWARD (netfilter), файервол фильтрует пакеты, которые входят в интерфейс и проходят через VyOS. Можно применить только один входной фильтр пакетов на интерфейс. - исходящий трафик (или out)
Соответствует исходящему интерфейсу цепочки FORWARD (netfilter), файервол фильтрует пакеты, которые покидают интерфейс. Это могут быть как пакеты, проходящие через VyOS, так и созданные на нём самом. Можно применить только один выходной фильтр пакетов на интерфейс. - локальный трафик (или local)
Соответствует цепочке INPUT (netfilter), т.е. трафик, который направляется на сам маршрутизатор VyOS, например, на 22 порт слушающий на его внешнем или внутреннем интерфейсе.
Пример настроек правил:
set firewall name OUTSIDE-IN default-action 'drop'
set firewall name OUTSIDE-IN rule 10 action 'allow'
set firewall name OUTSIDE-IN rule 10 state established 'enable'
set firewall name OUTSIDE-IN rule 10 state related 'enable'
Строка 1 — создает политику файервола с именем «OUTSIDE-IN» для блокировки трафика по умолчанию.
Строка 2 — создает правило файервола (#10), которое разрешает трафик, соответствующий правилу.
Строка 3 — указывает, что правило применимо, когда существует установленный сеанс для трафика.
Строка 4 — указывает, что правило применимо, когда трафик относится к этому соединению.
Пример настройки файервола для блокировки трафика, направленного на сам маршрутизатор:
set firewall name OUTSIDE-LOCAL default-action 'drop'
В этом примере весь трафик отбрасывается по умолчанию.
Пример применения правил для файервола к интерфейсам, в нужных направлениях:
set interfaces ethernet eth0 firewall in name 'OUTSIDE-IN'
set interfaces ethernet eth1 firewall local name 'OUTSIDE-LOCAL'
Строка 1 — привязка политики файервола «OUTSIDE-IN» к интерфейсу eth0, для входящего трафика с внутренних адресов.
Строка 2 — привязка политики файервола «OUTSIDE-LOCAL» к интерфейсу eth1, для трафика, направляемого на сам маршрутизатор.
Настройка локальных правил файервола
Переходим к настройке локальных правил файервола (для трафика, направляемого на сам маршрутизатор).
Основные правила, которые будут использоваться:
- принимаем трафик, относящийся к установленному соединению (established, related), отбрасываем неправильный трафик
- Принимаем ICMP echo-request (ping)
- Принимаем запросы DHCP
- Принимаем запросы DNS
- Ограничиваем соединения по SSH до 4 в минуту на IP адрес и принимаем их только из определённых внутренних сетей (management)
- Принимаем подключения SNMP только из определённых внутренних сетей (management)
- Создаём групповые объекты с внутренними сетями
set firewall group network-group NET-VLAN17 network '172.20.1.0/24' set firewall group network-group NET-VLAN30 network '172.16.1.0/24' set firewall group network-group NET-VLAN31 network '172.16.2.0/24' set firewall group network-group NET-VLAN32 network '172.20.32.0/23' set firewall group network-group NET-VLAN38 network '172.16.3.0/24' set firewall group network-group NET-VLAN40 network '172.20.40.0/23' set firewall group network-group NET-MANAGEMENT network '172.20.32.0/23' set firewall group network-group NET-MANAGEMENT network '172.20.1.0/24'
- Создаём именную локальную политику для каждой сети, или интерфейса, подключенного к маршрутизатору.
set firewall name LOCAL-VLAN30 default-action 'drop' set firewall name LOCAL-VLAN30 rule 1010 action 'accept' set firewall name LOCAL-VLAN30 rule 1010 state established 'enable' set firewall name LOCAL-VLAN30 rule 1010 state related 'enable' set firewall name LOCAL-VLAN30 rule 1011 action 'drop' set firewall name LOCAL-VLAN30 rule 1011 state invalid 'enable' set firewall name LOCAL-VLAN30 rule 1020 action 'accept' set firewall name LOCAL-VLAN30 rule 1020 icmp type-name 'echo-request' set firewall name LOCAL-VLAN30 rule 1020 protocol 'icmp' set firewall name LOCAL-VLAN30 rule 1020 state new 'enable' set firewall name LOCAL-VLAN30 rule 1030 action 'drop' set firewall name LOCAL-VLAN30 rule 1030 destination port '22' set firewall name LOCAL-VLAN30 rule 1030 protocol 'tcp' set firewall name LOCAL-VLAN30 rule 1030 recent count '4' set firewall name LOCAL-VLAN30 rule 1030 recent time '60' set firewall name LOCAL-VLAN30 rule 1030 source group network-group 'NET-MANAGEMENT' set firewall name LOCAL-VLAN30 rule 1030 state new 'enable' set firewall name LOCAL-VLAN30 rule 1040 action 'accept' set firewall name LOCAL-VLAN30 rule 1040 destination port '22' set firewall name LOCAL-VLAN30 rule 1040 protocol 'tcp' set firewall name LOCAL-VLAN30 rule 1040 source group network-group 'NET-MANAGEMENT' set firewall name LOCAL-VLAN30 rule 1040 state new 'enable'
set firewall name LOCAL-VLAN31 default-action 'drop' set firewall name LOCAL-VLAN31 rule 1010 action 'accept' set firewall name LOCAL-VLAN31 rule 1010 state established 'enable' set firewall name LOCAL-VLAN31 rule 1010 state related 'enable' set firewall name LOCAL-VLAN31 rule 1011 action 'drop' set firewall name LOCAL-VLAN31 rule 1011 state invalid 'enable' set firewall name LOCAL-VLAN31 rule 1020 action 'accept' set firewall name LOCAL-VLAN31 rule 1020 icmp type-name 'echo-request' set firewall name LOCAL-VLAN31 rule 1020 protocol 'icmp' set firewall name LOCAL-VLAN31 rule 1020 state new 'enable' set firewall name LOCAL-VLAN31 rule 1030 action 'drop' set firewall name LOCAL-VLAN31 rule 1030 destination port '22' set firewall name LOCAL-VLAN31 rule 1030 protocol 'tcp' set firewall name LOCAL-VLAN31 rule 1030 recent count '4' set firewall name LOCAL-VLAN31 rule 1030 recent time '60' set firewall name LOCAL-VLAN31 rule 1030 source group network-group 'NET-MANAGEMENT' set firewall name LOCAL-VLAN31 rule 1030 state new 'enable' set firewall name LOCAL-VLAN31 rule 1040 action 'accept' set firewall name LOCAL-VLAN31 rule 1040 destination port '22' set firewall name LOCAL-VLAN31 rule 1040 protocol 'tcp' set firewall name LOCAL-VLAN31 rule 1040 source group network-group 'NET-MANAGEMENT' set firewall name LOCAL-VLAN31 rule 1040 state new 'enable'
set firewall name LOCAL-VLAN17 default-action 'drop' set firewall name LOCAL-VLAN17 rule 1001 action 'accept' set firewall name LOCAL-VLAN17 rule 1001 source group network-group 'NET-MANAGEMENT' set firewall name LOCAL-VLAN17 rule 1010 action 'accept' set firewall name LOCAL-VLAN17 rule 1010 state established 'enable' set firewall name LOCAL-VLAN17 rule 1010 state related 'enable' set firewall name LOCAL-VLAN17 rule 1011 action 'drop' set firewall name LOCAL-VLAN17 rule 1011 state invalid 'enable' set firewall name LOCAL-VLAN17 rule 1020 action 'accept' set firewall name LOCAL-VLAN17 rule 1020 icmp type-name 'echo-request' set firewall name LOCAL-VLAN17 rule 1020 protocol 'icmp' set firewall name LOCAL-VLAN17 rule 1020 state new 'enable' set firewall name LOCAL-VLAN17 rule 1040 action 'accept' set firewall name LOCAL-VLAN17 rule 1040 destination port '53' set firewall name LOCAL-VLAN17 rule 1040 protocol 'tcp_udp' set firewall name LOCAL-VLAN17 rule 1040 state new 'enable' set firewall name LOCAL-VLAN17 rule 1100 action 'drop' set firewall name LOCAL-VLAN17 rule 1100 destination port '22' set firewall name LOCAL-VLAN17 rule 1100 protocol 'tcp' set firewall name LOCAL-VLAN17 rule 1100 recent count '4' set firewall name LOCAL-VLAN17 rule 1100 recent time '60' set firewall name LOCAL-VLAN17 rule 1100 source group network-group 'NET-MANAGEMENT' set firewall name LOCAL-VLAN17 rule 1100 state new 'enable' set firewall name LOCAL-VLAN17 rule 1101 action 'accept' set firewall name LOCAL-VLAN17 rule 1101 destination port '22' set firewall name LOCAL-VLAN17 rule 1101 protocol 'tcp' set firewall name LOCAL-VLAN17 rule 1101 source group network-group 'NET-MANAGEMENT' set firewall name LOCAL-VLAN17 rule 1101 state new 'enable' set firewall name LOCAL-VLAN17 rule 1110 action 'accept' set firewall name LOCAL-VLAN17 rule 1110 destination port '161' set firewall name LOCAL-VLAN17 rule 1110 protocol 'udp' set firewall name LOCAL-VLAN17 rule 1110 source group network-group 'NET-MANAGEMENT' set firewall name LOCAL-VLAN17 rule 1110 state new 'enable'
set firewall name LOCAL-VLAN32 default-action 'drop' set firewall name LOCAL-VLAN32 rule 1010 action 'accept' set firewall name LOCAL-VLAN32 rule 1010 state established 'enable' set firewall name LOCAL-VLAN32 rule 1010 state related 'enable' set firewall name LOCAL-VLAN32 rule 1011 action 'drop' set firewall name LOCAL-VLAN32 rule 1011 state invalid 'enable' set firewall name LOCAL-VLAN32 rule 1020 action 'accept' set firewall name LOCAL-VLAN32 rule 1020 icmp type-name 'echo-request' set firewall name LOCAL-VLAN32 rule 1020 protocol 'icmp' set firewall name LOCAL-VLAN32 rule 1020 state new 'enable' set firewall name LOCAL-VLAN32 rule 1030 action 'accept' set firewall name LOCAL-VLAN32 rule 1030 destination port '67' set firewall name LOCAL-VLAN32 rule 1030 protocol 'udp' set firewall name LOCAL-VLAN32 rule 1030 state new 'enable' set firewall name LOCAL-VLAN32 rule 1040 action 'accept' set firewall name LOCAL-VLAN32 rule 1040 destination port '53' set firewall name LOCAL-VLAN32 rule 1040 protocol 'tcp_udp' set firewall name LOCAL-VLAN32 rule 1040 state new 'enable' set firewall name LOCAL-VLAN32 rule 1100 action 'drop' set firewall name LOCAL-VLAN32 rule 1100 destination port '22' set firewall name LOCAL-VLAN32 rule 1100 protocol 'tcp' set firewall name LOCAL-VLAN32 rule 1100 recent count '4' set firewall name LOCAL-VLAN32 rule 1100 recent time '60' set firewall name LOCAL-VLAN32 rule 1100 source group network-group 'NET-MANAGEMENT' set firewall name LOCAL-VLAN32 rule 1100 state new 'enable' set firewall name LOCAL-VLAN32 rule 1101 action 'accept' set firewall name LOCAL-VLAN32 rule 1101 destination port '22' set firewall name LOCAL-VLAN32 rule 1101 protocol 'tcp' set firewall name LOCAL-VLAN32 rule 1101 source group network-group 'NET-MANAGEMENT' set firewall name LOCAL-VLAN32 rule 1101 state new 'enable' set firewall name LOCAL-VLAN32 rule 1110 action 'accept' set firewall name LOCAL-VLAN32 rule 1110 destination port '161' set firewall name LOCAL-VLAN32 rule 1110 protocol 'udp' set firewall name LOCAL-VLAN32 rule 1110 source group network-group 'NET-MANAGEMENT' set firewall name LOCAL-VLAN32 rule 1110 state new 'enable'
set firewall name LOCAL-VLAN40 default-action 'drop' set firewall name LOCAL-VLAN40 rule 1001 action 'accept' set firewall name LOCAL-VLAN40 rule 1001 source group network-group 'NET-MANAGEMENT' set firewall name LOCAL-VLAN40 rule 1010 action 'accept' set firewall name LOCAL-VLAN40 rule 1010 state established 'enable' set firewall name LOCAL-VLAN40 rule 1010 state related 'enable' set firewall name LOCAL-VLAN40 rule 1011 action 'drop' set firewall name LOCAL-VLAN40 rule 1011 state invalid 'enable' set firewall name LOCAL-VLAN40 rule 1020 action 'accept' set firewall name LOCAL-VLAN40 rule 1020 icmp type-name 'echo-request' set firewall name LOCAL-VLAN40 rule 1020 protocol 'icmp' set firewall name LOCAL-VLAN40 rule 1020 state new 'enable'
- Применяем локальную политику к интерфейсам на VyOS1 и VyOS2
set interfaces ethernet eth0 firewall local name 'LOCAL-VLAN17' set interfaces ethernet eth1 firewall local name 'LOCAL-VLAN30' set interfaces ethernet eth2 firewall local name 'LOCAL-VLAN31' set interfaces ethernet eth3 firewall local name 'LOCAL-VLAN32' set interfaces ethernet eth4 firewall local name 'LOCAL-VLAN40'
Настройка правил файервола между защищаемыми внутренними сетями
Создаём политику для входящего трафика из сетей VLAN32 и VLAN17 — политика, которая устанавливается для трафика, который входит на интерфейс из локальной сети, защищаемой файерволом, с последующим его транзитом к другим сетям (снаружи, или защищаемым этим же файерволом).
С целью упрощения конфигурации тестового стенда и диагностики сети, политики для сетей VLAN30, VLAN31 и VLAN40 настраивать не будем, но можете создать правила для них самостоятельно.
Помните, что в производственной среде, отсутствие политики файервола на внешнем интерфейсе недопустимо!
Важное примечание
Все наборы политик для файервола, описанные в этой статье, даны для случаев обычной маршрутизации. Для случаев асимметричной маршрутизации (asymmetric routing), правила будут выглядеть немного по-другому, без поддержки SPI (stateful packet inspection).
- Создаём политики для входящего трафика из сетей VLAN32 и VLAN17 к другим сетям
set firewall name VLAN32-IN default-action 'drop' set firewall name VLAN32-IN rule 1010 action 'accept' set firewall name VLAN32-IN rule 1010 state established 'enable' set firewall name VLAN32-IN rule 1010 state related 'enable' set firewall name VLAN32-IN rule 1011 action 'drop' set firewall name VLAN32-IN rule 1011 state invalid 'enable' set firewall name VLAN32-IN rule 9000 action 'accept' set firewall name VLAN32-IN rule 9000 source group network-group 'NET-VLAN32' set firewall name VLAN32-IN rule 9000 state new 'enable'
set firewall name VLAN17-IN default-action 'drop' set firewall name VLAN17-IN rule 1010 action 'accept' set firewall name VLAN17-IN rule 1010 state established 'enable' set firewall name VLAN17-IN rule 1010 state related 'enable' set firewall name VLAN17-IN rule 1011 action 'drop' set firewall name VLAN17-IN rule 1011 state invalid 'enable' set firewall name VLAN17-IN rule 9000 action 'accept' set firewall name VLAN17-IN rule 9000 source group network-group 'NET-VLAN17' set firewall name VLAN17-IN rule 9000 state new 'enable'
- Применяем политики для входящего трафика, к соответствующим интерфейсам
set interfaces ethernet eth0 firewall in name 'VLAN17-IN' set interfaces ethernet eth2 firewall in name 'VLAN32-IN'
- Создаём политики для исходящего трафика из других сетей, к сетям VLAN32 и VLAN17, т.е. выходящего из интерфейса файервола в защищаемую локальную сеть.
set firewall name VLAN32-OUT default-action 'drop' set firewall name VLAN32-OUT rule 1010 action 'accept' set firewall name VLAN32-OUT rule 1010 state established 'enable' set firewall name VLAN32-OUT rule 1010 state related 'enable' set firewall name VLAN32-OUT rule 1011 action 'drop' set firewall name VLAN32-OUT rule 1011 state invalid 'enable' set firewall name VLAN32-OUT rule 1020 action 'accept' set firewall name VLAN32-OUT rule 1020 icmp type-name 'echo-request' set firewall name VLAN32-OUT rule 1020 protocol 'icmp' set firewall name VLAN32-OUT rule 1020 state new 'enable' set firewall name VLAN32-OUT rule 1100 action 'accept' set firewall name VLAN32-OUT rule 1100 source group network-group 'NET-VLAN40' set firewall name VLAN32-OUT rule 1100 state new 'enable' set firewall name VLAN32-OUT rule 1110 action 'accept' set firewall name VLAN32-OUT rule 1110 source group network-group 'NET-VLAN17' set firewall name VLAN32-OUT rule 1110 state new 'enable' set firewall name VLAN32-OUT rule 1120 action 'accept' set firewall name VLAN32-OUT rule 1120 source group network-group 'NET-VLAN30' set firewall name VLAN32-OUT rule 1120 state new 'enable' set firewall name VLAN32-OUT rule 1130 action 'accept' set firewall name VLAN32-OUT rule 1130 source group network-group 'NET-VLAN31' set firewall name VLAN32-OUT rule 1130 state new 'enable' set firewall name VLAN32-OUT rule 1140 action 'accept' set firewall name VLAN32-OUT rule 1140 source group network-group 'NET-VLAN38' set firewall name VLAN32-OUT rule 1140 state new 'enable'
set firewall name VLAN17-OUT default-action 'drop' set firewall name VLAN17-OUT rule 1010 action 'accept' set firewall name VLAN17-OUT rule 1010 state established 'enable' set firewall name VLAN17-OUT rule 1010 state related 'enable' set firewall name VLAN17-OUT rule 1011 action 'drop' set firewall name VLAN17-OUT rule 1011 state invalid 'enable' set firewall name VLAN17-OUT rule 1020 action 'accept' set firewall name VLAN17-OUT rule 1020 icmp type-name 'echo-request' set firewall name VLAN17-OUT rule 1020 protocol 'icmp' set firewall name VLAN17-OUT rule 1020 state new 'enable' set firewall name VLAN17-OUT rule 1100 action 'accept' set firewall name VLAN17-OUT rule 1100 source group network-group 'NET-VLAN32' set firewall name VLAN17-OUT rule 1100 state new 'enable'
- Применяем политики для исходящего трафика, к соответствующим интерфейсам
set interfaces ethernet eth0 firewall out name 'VLAN17-OUT' set interfaces ethernet eth3 firewall out name 'VLAN32-OUT'
Не забываем, что после создания политик, и их применения к интерфейсам, нужно сделать commit и save.
- включаем логирование по snmp изменений в конфигурации файервола
set firewall config-trap 'enable'
- логируем трафик, который доходит до правила по умолчанию для именованной политики (в нашем случае это default drop)
set firewall name VLAN17-IN 'enable-default-log' set firewall name VLAN17-OUT 'enable-default-log' set firewall name VLAN32-IN 'enable-default-log' set firewall name VLAN32-OUT 'enable-default-log'
- пример, как это работает, когда нужно поймать отбрасываемый трафик:
set firewall name VLAN17-LOCAL 'enable-default-log' commit exit show log firewall name VLAN17-LOCAL configure delete firewall name VLAN17-LOCAL 'enable-default-log' commit
- включаем глобальные настройки файервола, обычно настроенные по умолчанию
set firewall all-ping 'enable' set firewall broadcast-ping 'disable' set firewall config-trap 'disable' set firewall log-martians 'enable' set firewall receive-redirects 'disable' set firewall source-validation 'disable' set firewall syn-cookies 'enable' set firewall send-redirects 'enable' set firewall ipv6-receive-redirects 'disable' set firewall ipv6-src-route 'disable' set firewall ip-src-route 'disable'
Настройка vrrp для отказоустойчивой маршрутизации
Ссылка на документацию — High availability (VRRP).
После выполнения базовых настроек маршрутизаторов VyOS, перейдём к настройке отказоустойчивой связи между хостами во внутренних сетях и их шлюзами по умолчанию.
Достигается это с помощью протокола vrrp, настраиваемого на обоих маршрутизаторах, в результате чего появляется виртуальный высокодоступный IP адрес — HAIP (Highly Available IP), являющийся шлюзом по умолчанию для внутренней сети. Этот адрес активируется на ведущем роутере, и через него идёт обмен трафиком между подключенной к нему какой-либо внутренней сетью, с остальными внутренними или внешними сетями. В случае сбоя ведущего роутера, этот HAIP автоматически переключается на ведомый (резервный) роутер, и трафик начинает идти через него.
Если вы когда-либо использовали HAIP, настраиваемый в keepalived, то это практически тоже самое, но ещё интересным и полезным может отказаться тот факт, что такая связка вполне работает между VyOS и обычным хостом с Linux, на котором настроен HAIP и keepalived (конечно же с идентичными настройками). Такая возможность может пригодиться при каких-то миграциях, или при отладке конфигурации на роутере или другом устройстве.
Для более глубокого погружения в детали настроек vrrp, рекомендуется статья от IBM, она относится к виртуальному маршрутизатору Vyatta 5600 от Brocade, но нам подойдёт, так как корни VyOS растут из проекта Vyatta (который в 2012 году был перекуплен Brocade).
VLAN17, HA VIP — 172.20.1.1/24
Ведущий хост – 172.20.1.253/24
Резервный хост – 172.20.1.254/24
VLAN32, HA VIP — 172.20.32.1/23
Ведущий хост – 172.20.33.253/23
Резервный хост – 172.20.33.254/23
VLAN40, HA VIP — 172.20.40.1/23
Ведущий хост – 172.20.40.253/23
Резервный хост – 172.20.40.254/23
set firewall name LOCAL-VLAN32 rule 1120 action 'accept'
set firewall name LOCAL-VLAN32 rule 1120 protocol 'vrrp'
set firewall name LOCAL-VLAN17 rule 1120 action 'accept'
set firewall name LOCAL-VLAN17 rule 1120 protocol 'vrrp'
set firewall name LOCAL-VLAN40 rule 1030 action 'accept'
set firewall name LOCAL-VLAN40 rule 1030 protocol 'vrrp'
set high-availability vrrp group haip-1 vrid 17
set high-availability vrrp group haip-1 interface eth0
set high-availability vrrp group haip-1 virtual-address 172.20.1.1/24
set high-availability vrrp group haip-1 priority '200'
set high-availability vrrp group haip-1 authentication type 'plaintext-password'
set high-availability vrrp group haip-1 authentication password 'b65495f9'
set high-availability vrrp group haip-1 preempt 2
set high-availability vrrp group haip-1 advertise-interval '1'
set high-availability vrrp group haip-2 vrid 32
set high-availability vrrp group haip-2 interface eth3
set high-availability vrrp group haip-2 virtual-address 172.20.32.1/23
set high-availability vrrp group haip-2 priority '200'
set high-availability vrrp group haip-2 authentication type 'plaintext-password'
set high-availability vrrp group haip-2 authentication password 'b65495f9'
set high-availability vrrp group haip-2 preempt 2
set high-availability vrrp group haip-2 advertise-interval '1'
set high-availability vrrp group haip-3 vrid 40
set high-availability vrrp group haip-3 interface eth4
set high-availability vrrp group haip-3 virtual-address 172.20.40.1/23
set high-availability vrrp group haip-3 priority '200'
set high-availability vrrp group haip-3 authentication type 'plaintext-password'
set high-availability vrrp group haip-3 authentication password 'b65495f9'
set high-availability vrrp group haip-3 preempt 2
set high-availability vrrp group haip-3 advertise-interval '1'
commit
set high-availability vrrp group haip-1 vrid 17
set high-availability vrrp group haip-1 interface eth0
set high-availability vrrp group haip-1 virtual-address 172.20.1.1/24
set high-availability vrrp group haip-1 priority '199'
set high-availability vrrp group haip-1 authentication type 'plaintext-password'
set high-availability vrrp group haip-1 authentication password 'b65495f9'
set high-availability vrrp group haip-1 preempt 2
set high-availability vrrp group haip-1 advertise-interval '1'
set high-availability vrrp group haip-2 vrid 32
set high-availability vrrp group haip-2 interface eth3
set high-availability vrrp group haip-2 virtual-address 172.20.32.1/23
set high-availability vrrp group haip-2 priority '199'
set high-availability vrrp group haip-2 authentication type 'plaintext-password'
set high-availability vrrp group haip-2 authentication password 'b65495f9'
set high-availability vrrp group haip-2 preempt 2
set high-availability vrrp group haip-2 advertise-interval '1'
set high-availability vrrp group haip-3 vrid 40
set high-availability vrrp group haip-3 interface eth4
set high-availability vrrp group haip-3 virtual-address 172.20.40.1/23
set high-availability vrrp group haip-3 priority '199'
set high-availability vrrp group haip-3 authentication type 'plaintext-password'
set high-availability vrrp group haip-3 authentication password 'b65495f9'
set high-availability vrrp group haip-3 preempt 2
set high-availability vrrp group haip-3 advertise-interval '1'
commit