Когда перед инженером встаёт задача связать два географически разнесённых офиса через общедоступную сеть (или частную MPLS/VPN), первое, что приходит на ум — использовать туннелирование. Существует несколько технологий: IP-in-IP, GRE, VXLAN и другие. В этой статье я поделюсь опытом настройки GRE-туннеля между двумя площадками (назовём их Router 1 и Router 2) на оборудовании Eltex, а также покажу, как поднять динамическую маршрутизацию OSPF поверх этого туннеля. Материал рассчитан на тех, кто уже немного знаком с CLI Eltex, но хочет разобраться с нюансами.

Почему GRE, а не IP-in-IP?

Выбор протокола — всегда компромисс. IP-in-IP проще, но он умеет инкапсулировать только IP-пакеты. GRE (Generic Routing Encapsulation) более универсален: он может переносить любые протоколы сетевого уровня (например, IPX, AppleTalk — хотя сейчас это редкость), поддерживает дополнительные опции (проверку последовательности, ключи, TTL). Кроме того, GRE легко комбинируется с IPsec: можно сначала завернуть трафик в GRE, а затем зашифровать его, получив защищённое соединение GRE over IPsec. Именно эта перспектива повлияла на наш выбор.

Этап 1. Создание GRE-туннеля на маршрутизаторе Router 1

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

Пошаговая конфигурация

Переходим в режим настройки туннеля с номером 1 (номер может быть любым, главное — уникальность):

router1(config)# tunnel gre 1

Теперь мы находимся в контексте config-gre. Здесь задаём все параметры.

1. Описание интерфейса — чисто для удобства администрирования:

router1(config-gre)# description to-router2

2. Отключение проверок firewall — на некоторых версиях Eltex по умолчанию включены фильтры, которые могут блокировать трафик через туннель. Чтобы избежать сюрпризов, отключаем их:

router1(config-gre)# ip firewall disable

3. Локальный и удалённый адреса — это «внешние» IP-адреса маршрутизаторов, которые смотрят в транспортную сеть. В нашем случае Router 1 имеет адрес 172.16.4.2, а Router 2 — 172.16.5.2:

router1(config-gre)# local address 172.16.4.2
router1(config-gre)# remote address 172.16.5.2

4. IP-адрес самого туннеля — это «внутренний» адрес, по которому маршрутизаторы будут общаться внутри туннеля. Обычно используют приватные адреса из диапазонов, не пересекающихся с существующими сетями. Мы выбрали подсеть 100.10.10.0/30, где Router 1 получит первый адрес, Router 2 — второй:

router1(config-gre)# ip address 100.10.10.1/30

5. TTL для инкапсулированных пакетов — значение 16 вполне достаточно, чтобы пакет дошёл до удалённого конца, даже если по пути будет несколько хопов. Слишком маленькое TTL может привести к потере пакетов, слишком большое — нецелесообразно:

router1(config-gre)# ttl 16

6. Активация интерфейса — без этой команды туннель будет в состоянии down:

router1(config-gre)# enable

После завершения настроек выходим из контекста:

router1(config-gre)# exit

Важно: точно такая же конфигурация, но с зеркальными адресами, должна быть выполнена на удалённом маршрутизаторе Router 2. Там локальным будет 172.16.5.2, удалённым — 172.16.4.2, а IP-адрес туннеля — 100.10.10.2/30. После этого можно проверить связь через туннель командой ping 100.10.10.2 с Router 1.

Этап 2. Динамическая маршрутизация: почему OSPF?

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

Особенности реализации OSPF на Eltex

Если вы привыкли к Cisco, будьте внимательны: на Eltex есть несколько важных отличий:

  • Области (areas) задаются в формате IPv4-адреса. То есть backbone area — это не просто 0, а 0.0.0.0.

  • Сети указываются точно с той маской, которая настроена на интерфейсе. Нельзя написать обобщённую сеть /24, если интерфейсы имеют разные маски. Каждая подсеть перечисляется отдельно.

  • OSPF необходимо явно включить на каждом интерфейсе, даже если сеть прописана в конфигурации процесса. Для этого используется команда ip ospf instance <номер>.

Настройка аутентификации OSPF (необязательно, но рекомендуется)

Для защиты от несанкционированного соседства используем аутентификацию. Сначала создаём ключевую цепочку:

router1(config)# key-chain auth_ospf
router1(config-keychain)# key 1
router1(config-keychain-key)# key-string ascii-text password
router1(config-keychain-key)# exit
router1(config-keychain)# exit

Здесь мы задали пароль password для первого ключа. Обратите внимание: на Router 2 должна быть точно такая же цепочка с тем же паролем, иначе аутентификация не сработает.

Конфигурация процесса OSPF

Теперь переходим к настройке самого протокола. Задаём номер процесса (у нас будет 1) и router-id — удобно использовать IP-адрес туннеля, чтобы идентификатор был уникальным и легко запоминался:

router1(config)# router ospf 1
router1(config-ospf)# router-id 100.10.10.1

Входим в настройку области 0.0.0.0:

router1(config-ospf)# area 0.0.0.0

Теперь нужно указать все локальные сети, которые должны анонсироваться в OSPF. В нашем примере у Router 1 есть три подсети: 192.168.10.0/26, 192.168.10.64/28 и 192.168.10.80/29. Перечисляем их по очереди:

router1(config-ospf-area)# network 192.168.10.0/26
router1(config-ospf-area)# network 192.168.10.64/28
router1(config-ospf-area)# network 192.168.10.80/29

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

router1(config-ospf-area)# enable

Выходим из режима области и активируем весь процесс OSPF:

router1(config-ospf-area)# exit
router1(config-ospf)# enable
router1(config-ospf)# exit

Привязка OSPF к туннельному интерфейсу

Теперь самое важное: даже если сети указаны в OSPF, протокол не начнёт обмениваться приветствиями (hello) на интерфейсе туннеля, пока мы не скажем это явно. Возвращаемся в конфигурацию туннеля:

router1(config)# tunnel gre 1

Указываем номер процесса OSPF, который должен работать на этом интерфейсе:

router1(config-if-gi)# ip ospf instance 1

Включаем аутентификацию с использованием созданного key-chain и алгоритма MD5:

router1(config-if-gi)# ip ospf authentication key-chain auth_ospf
router1(config-if-gi)# ip ospf authentication algorithm md5

Выходим в привилегированный режим:

router1(config-if-gi)# end

Сохранение конфигурации

В Eltex используется двухэтапное подтверждение: сначала commit, затем confirm. Это позволяет при возникновении проблем автоматически откатить изменения (если не подтвердить в течение заданного времени).

router1# commit
router1# confirm

После этого конфигурация становится постоянной.

Проверка и отладка

Убедиться, что туннель работает, можно командой ping 100.10.10.2. Для проверки OSPF-соседства используем:

router1# show ip ospf neighbor

В выводе должен появиться сосед с router-id 100.10.10.2 в состоянии FULL.

Анонсированные маршруты смотрим командой:

router1# show ip route ospf

Типичные ошибки и их устранение

  1. Туннель не поднимается (ping не идёт).
    Проверьте, доступны ли внешние адреса друг другу: ping 172.16.5.2 с Router 1. Если нет — проблема в физической связности или маршрутизации до этих адресов. Также убедитесь, что на промежуточных устройствах не блокируется протокол GRE (IP protocol 47).

  2. OSPF соседство не устанавливается.

    • Проверьте совпадение параметров аутентификации (пароль, алгоритм).

    • Убедитесь, что на обоих концах туннеля IP-адреса из одной подсети (у нас /30) и нет конфликтов.

    • Проверьте, что на интерфейсе туннеля включён OSPF командой ip ospf instance.

    • Посмотрите таймеры hello/dead (по умолчанию 10/40). Они должны совпадать.

  3. Сети не анонсируются.
    Внимательно проверьте маски в командах network. Они должны в точности соответствовать маскам, настроенным на интерфейсах маршрутизатора. Например, если на интерфейсе стоит адрес 192.168.10.1 с маской 255.255.255.192 (т.е. /26), то в OSPF надо писать 192.168.10.0/26, а не 192.168.10.0/24.

Заключение

Настройка GRE-туннелей и OSPF на оборудовании Eltex — задача вполне решаемая, если знать особенности платформы. Главные отличия от Cisco: формат области, точное указание сетей и необходимость активации OSPF на интерфейсе. Предложенная конфигурация проверена в лабораторных условиях и успешно работает. Надеюсь, это руководство поможет вам быстро разобраться с подобной задачей и избежать типичных граблей.

Если у вас остались вопросы или вы хотите поделиться своим опытом — добро пожаловать в комментарии!