У меня есть публичный IP 1.1.1.1 с разными пробросами портов. Например, 1.1.1.1:80 <> 192.168.1.1:80 (так же по 443 и другим). Когда я пытаюсь зайти на домен внутри сети (domain.com = 1.1.1.1), получаю отказ в соединении. Внешний доступ внутрь работает нормально.
jack@apollo:~ » curl 1.1.1.1. 80
curl: (7) Failed to connect to 1.1.1.1 port 80: Connection refused
Я пробовал настроить hairpin NAT, чтобы обойти эту проблему. Ниже мои правила NAT (eth1 — WAN интерфейс):
0 ;;; HAIRPIN
chain=srcnat action=masquerade src-address=192.168.1.0/24 dst-address=192.168.1.0/24 log=yes log-prefix="HAIRPIN!!"
1 ;;; masquerade internal to eth1
chain=srcnat action=masquerade out-interface=ether1 log=no log-prefix=""
2 ;;; 443 to proxy
chain=dstnat action=dst-nat to-addresses=192.168.1.1 to-ports=443 protocol=tcp in-interface=ether1 dst-port=443 log=no log-prefix=""
3 ;;; 80 to proxy
chain=dstnat action=dst-nat to-addresses=192.168.1.1 to-ports=80 protocol=tcp in-interface=ether1 dst-port=80 log=no log-prefix="NATTTT"
Однако это, похоже, не работает. При попытках доступа к ‘domain.com’ счетчик hairpin NAT не растет. Я также пробовал telnet, wget и curl на порт 80, чтобы проверить счетчик — безрезультатно.
Ниже мои правила файрвола, которые не блокируют этот трафик:
0 D ;;; специальное фиктивное правило для отображения счетчиков fasttrack
chain=forward action=passthrough
1 ;;; Разрешить established
chain=input action=accept connection-state=established log=no log-prefix=""
2 ;;; Разрешить related
chain=input action=accept connection-state=related log=no log-prefix=""
3 ;;; Разрешить веб трафик на web.homelab
chain=forward action=accept connection-nat-state=dstnat protocol=tcp dst-address=192.168.1.1 in-interface=ether1 dst-port=80,443,5000 log=no log-prefix=""
4 ;;; DST NAT разрешен
chain=forward action=accept connection-state="" connection-nat-state=dstnat log=no log-prefix=""
5 ;;; defconf: fasttrack
chain=forward action=fasttrack-connection connection-state=established,related log=no log-prefix=""
6 ;;; Блокировать всё с WAN
chain=input action=drop connection-state="" in-interface=ether1 log=no log-prefix=""
7 ;;; Блокировать неверные соединения
chain=input action=drop connection-state=invalid log=no log-prefix=""
8 ;;; Блокировать весь вход с WAN, кроме DSTNAT
chain=forward action=drop connection-state=new connection-nat-state=!dstnat in-interface-list=WAN log=no log-prefix=""
9 ;;; Нет совпадений по правилам
chain=forward action=passthrough log=no log-prefix=""
Даже при выключении всех правил блокировки счетчик hairpin NAT не увеличивается. Буду признателен за любую помощь, идеи кончаются.
jack@apollo:~ » curl 1.1.1.1. 80
curl: (7) Failed to connect to 1.1.1.1 port 80: Connection refused
Я пробовал настроить hairpin NAT, чтобы обойти эту проблему. Ниже мои правила NAT (eth1 — WAN интерфейс):
0 ;;; HAIRPIN
chain=srcnat action=masquerade src-address=192.168.1.0/24 dst-address=192.168.1.0/24 log=yes log-prefix="HAIRPIN!!"
1 ;;; masquerade internal to eth1
chain=srcnat action=masquerade out-interface=ether1 log=no log-prefix=""
2 ;;; 443 to proxy
chain=dstnat action=dst-nat to-addresses=192.168.1.1 to-ports=443 protocol=tcp in-interface=ether1 dst-port=443 log=no log-prefix=""
3 ;;; 80 to proxy
chain=dstnat action=dst-nat to-addresses=192.168.1.1 to-ports=80 protocol=tcp in-interface=ether1 dst-port=80 log=no log-prefix="NATTTT"
Однако это, похоже, не работает. При попытках доступа к ‘domain.com’ счетчик hairpin NAT не растет. Я также пробовал telnet, wget и curl на порт 80, чтобы проверить счетчик — безрезультатно.
Ниже мои правила файрвола, которые не блокируют этот трафик:
0 D ;;; специальное фиктивное правило для отображения счетчиков fasttrack
chain=forward action=passthrough
1 ;;; Разрешить established
chain=input action=accept connection-state=established log=no log-prefix=""
2 ;;; Разрешить related
chain=input action=accept connection-state=related log=no log-prefix=""
3 ;;; Разрешить веб трафик на web.homelab
chain=forward action=accept connection-nat-state=dstnat protocol=tcp dst-address=192.168.1.1 in-interface=ether1 dst-port=80,443,5000 log=no log-prefix=""
4 ;;; DST NAT разрешен
chain=forward action=accept connection-state="" connection-nat-state=dstnat log=no log-prefix=""
5 ;;; defconf: fasttrack
chain=forward action=fasttrack-connection connection-state=established,related log=no log-prefix=""
6 ;;; Блокировать всё с WAN
chain=input action=drop connection-state="" in-interface=ether1 log=no log-prefix=""
7 ;;; Блокировать неверные соединения
chain=input action=drop connection-state=invalid log=no log-prefix=""
8 ;;; Блокировать весь вход с WAN, кроме DSTNAT
chain=forward action=drop connection-state=new connection-nat-state=!dstnat in-interface-list=WAN log=no log-prefix=""
9 ;;; Нет совпадений по правилам
chain=forward action=passthrough log=no log-prefix=""
Даже при выключении всех правил блокировки счетчик hairpin NAT не увеличивается. Буду признателен за любую помощь, идеи кончаются.