Назад | Перейти на главную страницу

pfctl не передает пакет SYN, ACK после NAT

Я пытаюсь ретранслировать SSH-соединения с хостов LAN на хосты за пределами VPN. Только один хост-маршрутизатор в локальной сети имеет VPN-соединение для повторного использования другими хостами в локальной сети.

Ниже представлена ​​конфигурация pfctl на маршрутизаторе.

extif = "utun0"
intif = "en1"
set skip on lo0
set ruleset-optimization none
set optimization normal
set timeout { tcp.established 360, tcp.closing 60 }
nat log on $extif from $intif:network to any -> ($extif)
pass in log on $extif from any to any
pass out log on $extif from any to any
pass in log on $intif from any to any
pass out log on $intif from any to any

Интерфейс utun0 (у него IP-адрес 10.66.20.3) выше - это интерфейс, обращенный к VPN.

IP-адрес хоста LAN 192.168.1.34.

Хост за пределами VPN, к которому я пытаюсь подключиться по SSH, имеет IP-адрес 172.19.13.63.

Проблема в том, что pfctl маршрутизатора выполняет NAT только для пакета SYN, но не возвращает ответ SYN ACK 172.19.13.63 на хост LAN.

Тем временем маршрутизатор успешно выполняет NAT-пакеты ICMP от узлов локальной сети, то есть 192.168.1.34 пингует 172.19.13.63, и я вижу в tcpdump, что NAT выполняется маршрутизатором.

Ниже приведен результат sudo pfctl -ss, когда я нахожусь на хосте SSH (172.19.13.63:22) с хоста LAN (192.168.1.34): ВСЕ tcp 192.168.1.34:50298 -> 10.66.20.3:37149 -> 172.19. 13.63: 22 УСТАНОВЛЕНО: SYN_SENT

tcpdump также подтверждает, что SYN ACK не пересылается обратно на хост LAN.

Что следует изменить в файле конфигурации pfctl, чтобы NAT работал правильно для SSH-подключений к узлам за пределами VPN?

Ниже приведен снимок экрана с снимком экрана wirehark на интерфейсе utun0:

Ниже показано состояние в pfctl во время попытки подключения по SSH:

$ sudo pfctl -s all | grep "\.34" | grep tcp
ALL tcp 172.19.13.63:22 <- 192.168.1.34:51856       CLOSED:SYN_SENT
ALL tcp 192.168.1.34:51856 -> 10.66.20.3:42525 -> 172.19.13.63:22       ESTABLISHED:SYN_SENT