Как открыть сервер с динамическим IPv6-адресом через брандмауэр OpenWrt?

Вопрос или проблема

Я хочу сделать веб-сервер, работающий в моей локальной сети, доступным в интернете. Мой роутер работает на OpenWrt 22.03 с firewall4.

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

С IPv6, как я понимаю, я просто должен дать серверу его собственный публичный IPv6-адрес, а затем настроить брандмауэр роутера для разрешения входящего доступа к порту 443 на этом адресе.

Но я не понимаю, как указать адрес назначения, когда он может измениться в зависимости от префикса IPv6, назначенного моим провайдером. Я мог бы настроить его для конкретного адреса, который есть у сервера сейчас, но если мой провайдер назначит мне другой префикс, это сделает сервер недоступным, пока я не отредактирую конфигурацию брандмауэра с новым адресом.

Как я могу указать динамический адрес назначения в OpenWrt firewall4?

IPv6-адрес может изменяться, но все же существует его статическая часть. Формат IPv6-адреса выглядит как A:B:C:D:E:F:G:H, где A:B:C:D идет от вашего IDC или локального префикса IPv6, а E:F:G:H статичны, поэтому вы можете добавить эту часть адреса в брандмауэр OpenWrt, и ее формат будет выглядеть как ::E:F:G:H/0. Например, у вас был IPv6-адрес типа 2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b, его статическая часть — 0000:0000:1a2f:1a2b, поскольку 0000 можно игнорировать, можно поместить ::1a2f:1a2b/0 в брандмауэр как адрес назначения.

Я просто разрешаю брандмауэру пересылать wan -> lan для любого устройства, использующего 443 в качестве порта назначения:

config rule
        option name 'Allow-HTTPS'
        option src 'wan'
        option dest 'lan'
        option dest_port '443'
        option target 'ACCEPT'

Это работает идеально. Я не вижу причины указывать dest_ip.

Согласно:

OpenWRT имеет специальную функцию под названием “динамическая пересылка префиксов”, которая позволяет указать только последние N (вместо первых N) битов в формате, подобном CIDR. Или: укажите IP-адрес назначения, например, как "::123/-64" (обратите внимание на отрицательные 64).

(Также этот вопрос может быть дубликатом указанного вопроса на superuser, заданного несколько лет назад.)

Ответ или решение

Для успешного предоставления доступа к серверу с динамическим IPv6-адресом через маршрутизатор OpenWrt, использующего firewall4, важно учитывать особенности функционирования IPv6 и настройки файрвола, что в значительной степени отличается от работы с IPv4.

Теория

IPv6 обладает рядом особенностей, которые нужно учитывать при настройке сети. В отличие от IPv4, где для внутренней сети обычно применяется частный диапазон адресов (RFC 1918), а затем выполняется проброс портов, IPv6 позволяет каждому устройству иметь публичный адрес в глобальном пространстве. Это упрощает настройку, однако вызывает сложности в случае, когда провайдер периодически меняет префикс, предоставляемый абоненту. Из-за этого конечный IPv6-адрес вашего сервера может измениться.

Однако в IPv6-адресах часть адреса, генерируемая как EUI-64, остаётся постоянной. Например, если у вашего сервера IPv6-адрес вида 2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b, то его стабильной частью будет ::1a2f:1a2b.

Пример

Для работы с динамическими префиксами в OpenWrt существует функция «динамического проброса префиксов», которая позволяет указать в правилах файрвола лишь последнюю часть адреса. Это делается с использованием CIDR-подобной нотации, где указывается отрицательное число бит. Для примера, ::1a2f:1a2b/-64 позволит обрабатывать пакеты для всех адресов с этой последней частью.

Вот пример настройки правила в файрволе для разрешения входящих соединений на порт 443 по протоколу IPv6, не зависящий от префикса:

config rule
        option name 'Allow-HTTPS'
        option src 'wan'
        option dest 'lan'
        option dest_port '443'
        option dest_ip '::1a2f:1a2b/-64'
        option target 'ACCEPT'

Применение

Давайте разберём, как применить данный метод для настройки вашего маршрутизатора.

  1. Определите стабильную часть адреса сервера. Подключите сервер и зафиксируйте его IPv6-адрес. Сохраните стабильную часть адреса, после нормы ::.

  2. Настройка правила в файрволе. Перейдите в веб-интерфейс OpenWrt или подсоединитесь через SSH, затем откройте файл конфигурации /etc/config/firewall. Добавьте правило, аналогичное тому, что указано выше, заменив стабильную часть адреса на статическую часть вашего сервера.

  3. Тестирование. Проверьте доступность вашего сервера извне, используя другой IPv6-совместимый интернет-соединение. Это подтвердит, что настройка работает корректно, и сервер доступен по нужному порту.

  4. Мониторинг и поддержка. Регулярно проверяйте работоспособность соединения, особенно после изменения IPv6-префиксов со стороны провайдера. В большинстве случаев, если стабильный адрес указан корректно, изменения префиксов не повлияют на доступность сервера.

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

Оцените материал
Добавить комментарий

Капча загружается...