<callout type="success">Источник: https://gamelton.com/2016/03/25/nat-related-issues/</callout>
В данном посте пойдет речь про два не связанных напрямую между собой сетевых механизма: Hairpin NAT и Proxy ARP. Стоит заметить, что их использование необходимо только в определенных случаях NAT, далее будет описано подробнее.
Сценарий: веб сервер и клиент находятся за общим NAT. Веб сервер опубликован на внешнем адресе 80.80.80.80 на порту 80. Внутренние IP адреса у клиента и сервера из одной подсети 10.10.10.0/24.
Клиент не может подключиться к веб серверу по внешнему адресу. При этом от других клиентов (с мобильного телефона, из дома и пр.) доступ работает.
Причина:
Адрес источника | Адрес получателя |
---|---|
10.10.10.50 | 80.80.80.80 |
внутренний адрес клиента | внешний адрес сервера |
Адрес источника | Адрес получателя |
---|---|
10.10.10.50 | 10.10.10.2 |
внутренний адрес клиента | внутренний адрес сервера |
Адрес источника | Адрес получателя |
---|---|
10.10.10.2 | 10.10.10.50 |
Решение: Для того, чтобы разрешить обмен через внешний адрес сервера между клиентом и сервером, находящимися в одной внутренней подсети, следует применять изменение адресов отправителя (SNAT) и получателя (DNAT) — механизм названный hairpin NAT.
Адрес источника | Адрес получателя |
---|---|
10.10.10.50 | 80.80.80.80 |
внутренний адрес клиента | внешний адрес сервера |
Адрес источника | Адрес получателя |
---|---|
10.10.10.1 | 10.10.10.2 |
внутренний адрес маршрутизатора | внутренний адрес сервера |
Адрес источника | Адрес получателя |
---|---|
10.10.10.2 | 10.10.10.1 |
Адрес источника | Адрес получателя |
---|---|
80.80.80.80 | 10.10.10.50 |
Путем hairpin NAT клиент думает, что разговаривает с публичным интерфейсом веб сервера, а веб сервер думает, что разговаривает с внутренним интерфейсом роутера.
Сценарий: для публикации серверов (DNAT) используется целая подсеть 80.80.80.0/24 при этом внешнему интерфейсу маршрутизатора назначен адрес 80.80.80.1.
Клиенты не могут подключиться к веб серверу по внешнему адресу.
Причина:
Адрес источника | Адрес получателя |
---|---|
50.50.50.50 | 80.80.80.80 |
внешний адрес клиента | внешний адрес сервера |
Решение: Для того, чтобы ваш маршрутизатор отвечал на ARP запрос необходимо на его внешнем интерфейсе настроить Proxy ARP. В этом случае ваш маршрутизатор будет отвечать на все ARP запросы по IP адресам, которые вы укажите, вне зависимости от адреса самого интерфейса на который, они будут приходить.