Тема этой статьи логически продолжает предыдущую: мы уже создали VLAN 10 и VLAN 20, связали коммутаторы trunk-линком, но обмена трафиком между сегментами всё ещё нет — и это правильное поведение коммутатора второго уровня, а не недоработка. VLAN отлично решают задачу изоляции сегментов, но рано или поздно устройствам из разных VLAN нужно общаться друг с другом — рабочей станции достучаться до сервера, серверу отправить данные в другой сегмент. Коммутатор второго уровня сам по себе трафик между VLAN не пропускает: для этого нужна маршрутизация. В этой статье разберём два классических способа связать VLAN 10 (пользователи) и VLAN 20 (серверы) из сети 192.168.10.0/24, домен itpages.lab.local: router-on-a-stick через маршрутизатор rtr-edge01 и маршрутизацию через SVI на многоуровневом коммутаторе sw-core01.

Первый способ пригодится, когда маршрутизацию делает отдельный маршрутизатор, а коммутаторы — чисто L2 устройства. Второй — когда в сети есть коммутатор третьего уровня (L3 switch), который может маршрутизировать сам, без внешнего роутера. На практике в небольших и средних сетях чаще встречается второй вариант, но начнём с router-on-a-stick — он нагляднее показывает, что вообще происходит.

Router-on-a-stick: подготовка trunk

Схема простая: один физический интерфейс маршрутизатора rtr-edge01 подключается к коммутатору trunk-линком, а на самом маршрутизаторе интерфейс делится на логические субинтерфейсы — по одному на каждый VLAN.

Сначала на коммутаторе, к которому подключается маршрутизатор, настраиваем trunk:

sw-core01(config)# interface gigabitEthernet 1/0/2
sw-core01(config-if)# switchport trunk encapsulation dot1q
sw-core01(config-if)# switchport mode trunk
sw-core01(config-if)# switchport trunk allowed vlan 10,20
sw-core01(config-if)# description Link to rtr-edge01
sw-core01(config-if)# no shutdown
sw-core01(config-if)# exit

Router-on-a-stick: субинтерфейсы на маршрутизаторе

rtr-edge01# configure terminal
rtr-edge01(config)# interface gigabitEthernet 0/0
rtr-edge01(config-if)# no shutdown
rtr-edge01(config-if)# exit

rtr-edge01(config)# interface gigabitEthernet 0/0.10
rtr-edge01(config-subif)# encapsulation dot1Q 10
rtr-edge01(config-subif)# ip address 192.168.10.1 255.255.255.0
rtr-edge01(config-subif)# exit

rtr-edge01(config)# interface gigabitEthernet 0/0.20
rtr-edge01(config-subif)# encapsulation dot1Q 20
rtr-edge01(config-subif)# ip address 192.168.20.1 255.255.255.0
rtr-edge01(config-subif)# exit

Физический интерфейс gigabitEthernet 0/0 не получает собственного IP-адреса — вся адресация живёт на субинтерфейсах. Важная деталь: encapsulation dot1Q 10 должна совпадать с номером VLAN, а сам физический родительский интерфейс обязательно должен быть в состоянии no shutdown, иначе ни один субинтерфейс работать не будет, даже если каждый из них тоже помечен no shutdown.

На рабочих станциях VLAN 10 и серверах VLAN 20 шлюзом по умолчанию нужно указать соответствующий адрес субинтерфейса — 192.168.10.1 и 192.168.20.1.

Альтернатива: маршрутизация через SVI на sw-core01

Если sw-core01 — многоуровневый коммутатор (L3 switch), маршрутизацию можно сделать без отдельного роутера, через виртуальные интерфейсы VLAN (SVI). Это быстрее и не требует trunk-линка наружу.

sw-core01# configure terminal
sw-core01(config)# ip routing
sw-core01(config)# interface vlan 10
sw-core01(config-if)# ip address 192.168.10.1 255.255.255.0
sw-core01(config-if)# no shutdown
sw-core01(config-if)# exit

sw-core01(config)# interface vlan 20
sw-core01(config-if)# ip address 192.168.20.1 255.255.255.0
sw-core01(config-if)# no shutdown
sw-core01(config-if)# exit

Команда ip routing — ключевая и часто забываемая. Без неё коммутатор создаст интерфейсы VLAN, они поднимутся, но пакеты между VLAN маршрутизироваться не будут: коммутатор так и останется L2 устройством с несколькими IP-адресами, а не полноценным маршрутизатором.

Настройка портов под SVI

Для работы SVI-маршрутизации порты, ведущие к рабочим станциям и серверам, должны быть в соответствующих VLAN как access-порты — точно так же, как настраивали в прошлой статье серии:

sw-core01(config)# interface range gigabitEthernet 1/0/10 - 20
sw-core01(config-if-range)# switchport mode access
sw-core01(config-if-range)# switchport access vlan 10
sw-core01(config-if-range)# exit

Статическая маршрутизация до внешней сети

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

sw-core01(config)# ip route 0.0.0.0 0.0.0.0 192.168.10.254

где 192.168.10.254 — адрес следующего маршрутизатора в сторону интернета, например, того самого rtr-edge01, если он выполняет функцию edge-маршрутизатора для всей сети.

Контроль трафика между VLAN через ACL на SVI

Как только маршрутизация между VLAN заработала, стоит сразу подумать, весь ли трафик между сегментами действительно должен ходить свободно. По умолчанию, если ACL нет, маршрутизатор или L3-коммутатор пропускает всё подряд между любыми настроенными сетями. Применить список доступа можно прямо на интерфейсе VLAN, точно так же, как на физическом интерфейсе.

sw-core01(config)# ip access-list extended VLAN10-OUT
sw-core01(config-ext-nacl)# deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 eq 3389
sw-core01(config-ext-nacl)# permit ip any any
sw-core01(config-ext-nacl)# exit

sw-core01(config)# interface vlan 10
sw-core01(config-if)# ip access-group VLAN10-OUT in
sw-core01(config-if)# exit

Подробный синтаксис ACL, wildcard-маски и логику построения списков разберём отдельно в следующей статье серии — здесь важно просто зафиксировать: как только появляется маршрутизация между VLAN, разграничение трафика становится не менее важной задачей, чем сама связность.

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

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

sw-core01(config)# router ospf 1
sw-core01(config-router)# network 192.168.10.0 0.0.0.255 area 0
sw-core01(config-router)# network 192.168.20.0 0.0.0.255 area 0
sw-core01(config-router)# exit

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

Асимметричная маршрутизация: чем она опасна

Когда в сети появляется больше одного маршрутизатора или L3-коммутатора, легко случайно получить ситуацию, при которой пакет идёт в одну сторону через одно устройство, а ответ возвращается через другое. Сама по себе IP-маршрутизация это переживает, но многие механизмы безопасности — например, stateful-инспекция трафика на firewall или reflexive ACL — рассчитывают, что весь диалог проходит через одну точку, и асимметричный путь может привести к необъяснимым обрывам соединений.

Проверить симметричность пути помогает сравнение таблиц маршрутизации на всех задействованных устройствах и трассировка в обе стороны — не только от клиента до сервера, но и обратно. Если в сети только один маршрутизатор или один L3-коммутатор, как в примерах этой статьи, асимметрия невозможна в принципе, но важно держать это в уме при проектировании сети с несколькими путями и резервированием через HSRP.

Проверка маршрутизации

sw-core01# show ip route
sw-core01# show ip interface brief
sw-core01# show vlan brief
sw-core01# ping 192.168.20.10 source vlan 10

show ip route должна показать directly connected сети 192.168.10.0/24 и 192.168.20.0/24 с пометкой C. Если их нет — либо не выполнен ip routing, либо интерфейс VLAN не в состоянии up. Команда ping с явным указанием source vlan 10 проверяет маршрутизацию именно с адреса нужного интерфейса, а не с интерфейса, который выберется автоматически.

Резервирование шлюза через HSRP

В примерах выше шлюзом для VLAN 10 выступает единственное устройство — sw-core01 или rtr-edge01. Если это устройство выйдет из строя, весь сегмент останется без маршрутизации, даже если сама сеть физически исправна. HSRP (Hot Standby Router Protocol) решает эту проблему, позволяя двум маршрутизаторам делить один виртуальный IP-адрес шлюза.

sw-core01(config)# interface vlan 10
sw-core01(config-if)# standby 10 ip 192.168.10.1
sw-core01(config-if)# standby 10 priority 110
sw-core01(config-if)# standby 10 preempt
sw-core01(config-if)# exit

На резервном устройстве настраивается тот же виртуальный адрес 192.168.10.1, но с более низким приоритетом — оно возьмёт на себя роль шлюза автоматически, если основное устройство перестанет отвечать. Рабочие станции при этом продолжают использовать один и тот же адрес шлюза и даже не замечают переключения. Для сети с одним коммутатором ядра HSRP не нужен, но при проектировании отказоустойчивой сети это первое, что стоит добавить после базовой маршрутизации между VLAN.

Routed port вместо SVI

Кроме SVI, на L3-коммутаторе можно превратить обычный физический порт в чисто маршрутизируемый (routed port), без привязки к какому-либо VLAN — по сути, такой порт ведёт себя как интерфейс маршрутизатора. Это полезно для соединений точка-точка между двумя L3-коммутаторами или между коммутатором и маршрutизатором, где VLAN как таковой не нужен.

sw-core01(config)# interface gigabitEthernet 1/0/1
sw-core01(config-if)# no switchport
sw-core01(config-if)# ip address 10.255.255.1 255.255.255.252
sw-core01(config-if)# no shutdown
sw-core01(config-if)# exit

Команда no switchport — ключевая: она выключает у порта коммутационные функции L2 и включает поведение обычного маршрутизируемого интерфейса, на котором сразу можно назначить IP-адрес, без промежуточного SVI и без необходимости заводить отдельный VLAN только ради одного соединения между двумя устройствами.

Частые ошибки и как их избежать

  • Забыли ip routing на L3-коммутаторе. Самая частая причина, почему SVI подняты, адреса назначены, а пинг между VLAN не проходит. Без этой команды коммутатор физически не будет пересылать пакеты между VLAN, даже имея все нужные интерфейсы.
  • Не активирован родительский физический интерфейс при router-on-a-stick. Субинтерфейсы наследуют состояние родителя: если gigabitEthernet 0/0 в состоянии administratively down, все субинтерфейсы 0/0.10 и 0/0.20 тоже будут недоступны, даже если сами явно помечены no shutdown.
  • Неверный VLAN ID в encapsulation dot1Q. Если на субинтерфейсе указан VLAN 10, а trunk-порт коммутатора его не пропускает (не входит в allowed vlan) или на коммутаторе такого VLAN вовсе нет, субинтерфейс поднимется по статусу, но трафик до него не дойдёт. Проверяй согласованность номеров VLAN на обоих концах trunk.
  • Пересекающиеся или дублирующиеся адреса на разных VLAN. Если по ошибке на двух интерфейсах VLAN назначить адреса из одной и той же сети (например, случайно скопировать конфигурацию и забыть поменять подсеть), маршрутизатор откажется поднимать второй интерфейс с ошибкой пересечения адресного пространства. Перед вводом нового VLAN в эксплуатацию сверяйся с общей адресной схемой сети, а не полагайся на память.

Что дальше

Продолжить тему сетевого оборудования Cisco можно так: