, последнее обновление:

Hairpin NAT - делаем доступными одни сервисы из LAN другим, используя внешний IP

Hairpin NAT очень полезная штука в случае когда надо дать доступ внутренним сервисам (находящимся в LAN) друг к другу, используя внешний IP адрес (например, “для единообразия” или если не хочется заморачиваться с DNS).

Делается это просто:

iptables -t nat -A PREROUTING -d ${extip} -p tcp -m tcp --dport ${extport} -j DNAT --to-destination ${localhostip}
iptables -t nat -A POSTROUTING -s ${intnet} -d ${localhostip} -p tcp -m tcp --dport ${intport} -j MASQUERADE

Где:

  • extip - внешний IP адрес.
  • extport - внешний порт.
  • intport - порт сервера в локальной сети.
  • localhostip - IP адрес сервера в локальной сети.
  • intnet - внутренняя подсеть (например, 192.168.0.0/24).

Не добавляйте соответствие интерфейсов (параметр -i) в правило, это сделает Hairpin NAT нерабочим в большинстве случаев!