Была у меня задача — опубликовать на роутере D-Link DFL службу на ip-адресе, не привязанном к wan-интерфейсу. Но в интернете не нашел инструкцию, которая бы решала эту задачу, поэтому написал свою.
Веб-сервер во внутренней сети с Ip: 192.168.0.2 (порт 8080).
Пул внешних белых адресов, выделенный провайдером: 5.255.255.0/28, шлюз провайдера: 5.255.255.1, оставшиеся «наши» адреса 5.255.255.2-14.
Пусть адреса 5.255.255.2-10 мы используем под NAT и прочие нужды. Линк провайдера подключен к порту wan1. К интерфейсу wan1 привязан адрес 5.255.255.2.
Задача: опубликовать внутренний веб-сервер на публичном адресе 5.255.255.11, на порту 80.
Для публикации службы на ip не соответствующем адресу интерфейса потребуется:
Подготовка
I. Вначале создадим для всех наших нужд «Объекты» (сейчас я покажу процесс для веб-интерфейса, думаю те, кто работают с консолью, смогут перенести действия в команды консоли).
1. Добавляем в адресную книгу два адреса ipv4:
web-server = 192.168.0.2
public-web-server = 5.255.255.11


2. Затем добавляем порты в список сервисов:
int_http = tcp:8080


Порт tcp:80 уже присутствует в списке сервисов, называется http, имеет ограничение в 2000 сессий, ограничение можно скорректировать.
II. Перейдем непосредственно к решению.
Пункт 1 и 2 можно объединить, т.к. при добавлении статического маршрута есть возможность сразу обеспечить ARP. Честно, говоря, я не сразу увидел эту возможность и настраивал публикацию вручную, есть у маршрутизатора и такой функционал.
1. Итак, если вы еще не создавали кучи таблиц маршрутизации и правил для них, то всё можно сделать в основной таблице маршрутизации, она называется main.

В таблице mainбудет по-умолчанию путь до сети 5.255.255.0/28 на интерфейс wan1. И метрика этого маршрута совпадает с метрикой, указанной в настройках интерфейса (по-умолчанию 100).

Для того, чтобы шлюз не отправлял пакеты обратно в интерфейс wan1, нужно создать статический маршрут до адреса public-web-server в интерфейс core с метрикой меньше 100 (меньшей метрики интерфейса wan1) — тогда шлюз будет искать его «внутри себя».
2. Там же при создании маршрута можно настроить Proxy ARP для того, ��тобы шлюз отвечал на ARP запросы. На вкладке Proxy ARP добавляем интерфейс WAN.

создаем маршрут, но не нажимаем OK, а переходим на вторую вкладку Proxy ARP:

ARP, добавляем интерфейс wan1:

3.Наконец переходим к настройки NAT и firewall (это уже достаточно подробно описано в инструкции на сайте dlink.ua).

Создаем правило SAT, чтобы в пакете с интерфейса wan1 с адресом назначения public-web-server портом назначения http, которому мы настроили маршрут на интерфейс core, заменить адрес назначения на внутренний адрес нашего сервера web-server и порт на 8080.

4. И следующим шагом необходимо разрешить такой пакет — создать правило Allow с аналогичными параметрами (удобно скопировать правило SAT и заменить действие на Allow).

В инструкции от D-link глубоко раскрыт функционал SAT, он представляет много интересных возможностей. Моей целью было раскрыть вопрос, не раскрытый в этой инструкции и в других инструкциях. Надеюсь инструкция будет полезной и понятной.
Исходные данные (все адреса взяты для примера)
Веб-сервер во внутренней сети с Ip: 192.168.0.2 (порт 8080).
Пул внешних белых адресов, выделенный провайдером: 5.255.255.0/28, шлюз провайдера: 5.255.255.1, оставшиеся «наши» адреса 5.255.255.2-14.
Пусть адреса 5.255.255.2-10 мы используем под NAT и прочие нужды. Линк провайдера подключен к порту wan1. К интерфейсу wan1 привязан адрес 5.255.255.2.
Задача: опубликовать внутренний веб-сервер на публичном адресе 5.255.255.11, на порту 80.
Решение кратко
Для публикации службы на ip не соответствующем адресу интерфейса потребуется:
- Указать роутеру, что публикуемый ip нужно искать внутри себя, с помощью таблиц маршрутизации.
- Публикация ARP, чтобы роутер отвечал соседям, что публикуемый адрес принадлежит ему.
- Правило firewall (SAT), которое внутри роутера будет менять адрес назначения на адрес конечного сервера.
- Правило firewall (Allow), которое будет разрешать соединение с внешнего интерфейса на публикуемый адрес внутрь роутера
А теперь немного подробнее о каждом пункту
Подготовка
I. Вначале создадим для всех наших нужд «Объекты» (сейчас я покажу процесс для веб-интерфейса, думаю те, кто работают с консолью, смогут перенести действия в команды консоли).
1. Добавляем в адресную книгу два адреса ipv4:
web-server = 192.168.0.2
public-web-server = 5.255.255.11


2. Затем добавляем порты в список сервисов:
int_http = tcp:8080


Порт tcp:80 уже присутствует в списке сервисов, называется http, имеет ограничение в 2000 сессий, ограничение можно скорректировать.
ой
Оказалось, что добавлять порт сервера во внутренней сети вовсе не нужно, но оставляю, т.к. пример может понадобиться для публичного порта, а добавляются они одинаково
II. Перейдем непосредственно к решению.
Пункт 1 и 2 можно объединить, т.к. при добавлении статического маршрута есть возможность сразу обеспечить ARP. Честно, говоря, я не сразу увидел эту возможность и настраивал публикацию вручную, есть у маршрутизатора и такой функционал.
1. Итак, если вы еще не создавали кучи таблиц маршрутизации и правил для них, то всё можно сделать в основной таблице маршрутизации, она называется main.

В таблице mainбудет по-умолчанию путь до сети 5.255.255.0/28 на интерфейс wan1. И метрика этого маршрута совпадает с метрикой, указанной в настройках интерфейса (по-умолчанию 100).

Для того, чтобы шлюз не отправлял пакеты обратно в интерфейс wan1, нужно создать статический маршрут до адреса public-web-server в интерфейс core с метрикой меньше 100 (меньшей метрики интерфейса wan1) — тогда шлюз будет искать его «внутри себя».
2. Там же при создании маршрута можно настроить Proxy ARP для того, ��тобы шлюз отвечал на ARP запросы. На вкладке Proxy ARP добавляем интерфейс WAN.

создаем маршрут, но не нажимаем OK, а переходим на вторую вкладку Proxy ARP:

ARP, добавляем интерфейс wan1:

3.Наконец переходим к настройки NAT и firewall (это уже достаточно подробно описано в инструкции на сайте dlink.ua).

Создаем правило SAT, чтобы в пакете с интерфейса wan1 с адресом назначения public-web-server портом назначения http, которому мы настроили маршрут на интерфейс core, заменить адрес назначения на внутренний адрес нашего сервера web-server и порт на 8080.

4. И следующим шагом необходимо разрешить такой пакет — создать правило Allow с аналогичными параметрами (удобно скопировать правило SAT и заменить действие на Allow).

примечание
При этом правила должны быть именно в таком порядке: сначала SAT, затем Allow:
При этом правило allow создается также для публичного порта и адреса:
Мне казалось, что пакет уже обработан правилом SAT строкой раньше, и адрес и порт назначения в нем новые, но нет, похоже замена происходит когда-то после отработки всех прочих правил.
Не забывайте, что правило SAT должно находиться выше разрешающего правила. Это связано с тем, что пакет, попадая в разрешающее или запрещающее правило, дальше не идёт по таблице «Rules».dlink.ua
При этом правило allow создается также для публичного порта и адреса:
обратите внимание, что бы параметры протокола, интерфейсов и сетей в разрешающем правиле были такие же, как и в правиле с действием «SAT».
Мне казалось, что пакет уже обработан правилом SAT строкой раньше, и адрес и порт назначения в нем новые, но нет, похоже замена происходит когда-то после отработки всех прочих правил.
В инструкции от D-link глубоко раскрыт функционал SAT, он представляет много интересных возможностей. Моей целью было раскрыть вопрос, не раскрытый в этой инструкции и в других инструкциях. Надеюсь инструкция будет полезной и понятной.
