Я пытаюсь ретранслировать 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