Top.Mail.Ru
Ответы

Настройка проброса портов (DNAT) на маршрутизаторах Eltex ESR: открываем доступ к серверам из интернета

Всем привет! Часто возникает задача предоставить доступ к сервисам внутри локальной сети извне. Например, есть веб-сервер и SSH-сервер на одной внутренней машине, и нужно, чтобы они были доступны по конкретным внешним портам с определённого внешнего IP. В этой статье покажу, как настроить статическую трансляцию портов (Destination NAT) на примере оборудования Eltex (серия ESR). Конфигурация будет похожа на ту, что используется в Cisco, но есть свои нюансы.

Исходные данные

Допустим, у нас есть:

  • Внешний интерфейс с IP-адресом 192.168.20.1 (назовём его UPLINK). Это адрес, с которого мы хотим разрешить доступ (или просто внешний IP маршрутизатора, можно указать any).

  • Внутренний сервер с IP 192.168.20.2, на котором работают:

    • Веб-сервер на порту 8080 (внутренний порт).

    • SSH-сервер на нестандартном порту 2024 (внутренний порт, но можно и 22).

  • Мы хотим, чтобы из интернета по протоколу TCP на внешний IP 192.168.20.1:

    • При обращении на порт 80 происходила трансляция на внутренний сервер 192.168.20.2:8080.

    • При обращении на порт 2024 происходила трансляция на внутренний сервер 192.168.20.2:2024 (или на 22, если нужно, но здесь оставим 2024).

Почему именно статическая трансляция портов?

В отличие от SNAT (Source NAT), который меняет источник пакетов для выхода в интернет, Destination NAT (DNAT) меняет адрес назначения. Это позволяет направлять трафик, пришедший на внешний интерфейс, на нужный внутренний ресурс. Проброс портов — это частный случай DNAT, когда мы транслируем не весь IP, а только определённые порты.

Пошаговая настройка на Eltex ESR

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

bash

12
esr> enable
esr# configure terminal

1. Создаём объекты-группы для сервисов (портов)

В Eltex удобно использовать объектные группы для упрощения конфигурации и повторного использования. Создадим группу сервисов HTTP (внешний порт 80) и SSH (внешний порт 2024).

text!

1234567
esr(config)# object-group service HTTP
esr(config-object-group-service)# port-range 8080
esr(config-object-group-service)# exit

esr(config)# object-group service SSH
esr(config-object-group-service)# port-range 2026
esr(config-object-group-service)# exit

Можно было бы указать и диапазон, если нужно несколько портов, но в нашем случае — по одному.

2. Создаём объект-группу сети для внешнего адреса

Хотя часто пробрасывают весь трафик на внешний IP, можно ограничить источник (например, разрешить доступ только с определённого IP в интернете). В примере выше использована группа UPLINK с одним адресом 192.168.20.1. Но если мы хотим разрешить доступ с любого адреса к нашему внешнему IP, то можно не создавать такую группу, а в правиле указать destination-address any или просто не указывать destination-address (тогда будет применяться ко всем пакетам, приходящим на интерфейс). Однако для понимания механики создадим группу, как в исходной инструкции:

text!

123
esr(config)# object-group network UPLINK
esr(config-object-group-network)# ip address-range 172.16.5.2
esr(config-object-group-network)# exit

Если нужно разрешить доступ с любого адреса к внешнему IP, то в правилах можно использовать destination-address any или вовсе опустить, но лучше явно указать интерфейс, на котором применяется NAT (это задаётся в ruleset).

3. Создаём пулы для внутренних серверов

Пулы DNAT определяют, на какой внутренний IP и порт перенаправлять трафик. Создадим два пула: для HTTP и для SSH.

text!

12345678910
esr(config)# nat destination
esr(config-dnat)# pool BR_RTR_HTTP
esr(config-dnat-pool)# ip address 192.168.20.2
esr(config-dnat-pool)# ip port 8080
esr(config-dnat-pool)# exit

esr(config-dnat)# pool BR_RTR_SSH
esr(config-dnat-pool)# ip address 192.168.20.2
esr(config-dnat-pool)# ip port 2026
esr(config-dnat-pool)# exit

Обратите внимание: в пуле мы указываем реальный порт, на котором висит сервис на внутреннем сервере. Для HTTP это 8080, для SSH — 2026.

4. Создаём набор правил DNAT (ruleset)

Теперь самое интересное — создаём ruleset с именем, например, DNAT, указываем, с какого интерфейса применяем (обычно из внешней сети). В исходной инструкции указано from default, что означает применение ко всем интерфейсам, но лучше указать конкретный внешний интерфейс (например, from gigabitethernet 1/0/1). Для простоты оставим default.

text!

12
esr(config-dnat)# ruleset DNAT
esr(config-dnat-ruleset)# from default

Теперь добавляем правило для HTTP:

text!

1234567
esr(config-dnat-ruleset)# rule 1
esr(config-dnat-rule)# match protocol tcp
esr(config-dnat-rule)# match destination-address UPLINK
esr(config-dnat-rule)# match destination-port HTTP
esr(config-dnat-rule)# action destination-nat pool 2_HTTP
esr(config-dnat-rule)# enable
esr(config-dnat-rule)# exit

Пояснения:

  • match protocol tcp — протокол TCP.

  • match destination-address UPLINK — пакеты, предназначенные для адреса из группы UPLINK (наш внешний IP).

  • match destination-port HTTP — порт назначения из группы HTTP (т.е. 80).

  • action destination-nat pool 2_HTTP — перенаправляем на пул внутреннего сервера с портом 8080.

  • enable — активируем правило.

Аналогично для SSH:

text!

1234567
esr(config-dnat-ruleset)# rule 2
esr(config-dnat-rule)# match protocol tcp
esr(config-dnat-rule)# match destination-address UPLINK
esr(config-dnat-rule)# match destination-port SSH
esr(config-dnat-rule)# action destination-nat pool 2_SSH
esr(config-dnat-rule)# enable
esr(config-dnat-rule)# exit

Выходим из режима настройки правил:

text!

1
esr(config-dnat-ruleset)# end

5. Применяем конфигурацию

На Eltex изменения не применяются автоматически — нужно выполнить commit и confirm.

text!

12
esr# commit
esr# confirm

Конфигурация вступит в силу. Чтобы убедиться, можно посмотреть текущие правила DNAT:

text

1
esr# show nat destination ruleset DNAT

Или более детально:

text

1
esr# show running-config

Дополнительные проверки и отладка

Проверка доступности сервисов извне: можно попробовать подключиться к внешнему IP на порт 80 (или 2024) из другой сети. Для теста используйте telnet или nc. Например:

bash

1
telnet 192.168.20.1 80

Если ответ от веб-сервера получен — всё работает.

Логирование: если что-то не так, включите логирование для правил DNAT. Например, добавить в правило log:

text

1
esr(config-dnat-rule)# log

Затем посмотреть логи: show log.

Проверка статистики по правилам:

text

1
esr# show nat destination statistics ruleset DNAT

Часто встречающиеся проблемы и их решение

  • Правила не срабатывают, хотя конфигурация верна. Проверьте, не блокирует ли межсетевой экран (firewall) входящие соединения. На Eltex по умолчанию могут быть политики безопасности. Нужно разрешить трафик на внешнем интерфейсе. Например, создать правило в security zone-pair разрешающее TCP на порты 80 и 2024 из зоны untrust в зону trust.

  • Неправильно указан порт в пуле. Убедитесь, что внутренний сервер действительно слушает нужный порт (8080, 2024). Можно проверить командой ss -tln на сервере.

  • Использование групп: если вы меняете группу UPLINK или сервисы, не забудьте переприменить конфигурацию (commit).

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

Альтернативные варианты

Можно не создавать объектные группы, а указывать порты и адреса прямо в правиле. Например:

text

12
match destination-port 80
action destination-nat ip address 192.168.20.2 port 8080

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

Также можно настроить NAT не только для TCP, но и для UDP (например, для DNS).

Заключение

Настройка DNAT на Eltex ESR — процесс несложный, но требует внимательности при указании портов и адресов. Главное — помнить про порядок правил (они выполняются по номерам, но в данном случае они независимы) и включить сами правила командой enable. Не забудьте также настроить маршрутизацию и файрвол, чтобы разрешить обратный трафик.

Надеюсь, эта инструкция поможет вам открыть доступ к вашим внутренним ресурсам из интернета. Если остались вопросы — пишите в комментарии!



Видео по теме