У меня есть основы работы с моим брандмауэром pf / маршрутизатором NAT; трафик идет нормально, запросы DNS на порт 53 отображаются во внутреннюю подсеть и успешно возвращаются обратно (без изменения номера порта). Но я застрял в переадресации портов с внутреннего шлюза на машину, где мне нужно перевести порты. Вот что у меня, похоже, не работает:
rdr on $ext_if inet proto tcp from any to 192.168.1.101 port 24 -> 192.168.0.105 port 22
pass in on $ext_if inet proto tcp from any to 192.168.0.105 port 22
Сеть является общедоступным IP => этот шлюз по адресу 192.168.1.101 => машине требуется доступ по ssh по адресу 192.168.0.105
порт 22 общедоступного адреса используется в другой подсети (10. сеть, параллельная сети 192.168.0.1/32).
для справки работает следующая ИС:
rdr on $ext_if proto udp from any to any port 53 -> 192.168.0.105
pass in on $ext_if inet proto udp from any to 192.168.0.105 port 53
РЕДАКТИРОВАТЬ: Итак, добавление «состояния synproxy» привело к тому, что он установил соединение и пытался войти в систему, а затем отключился (тогда как раньше он довольно быстро терпел неудачу). Это может быть просто вопрос тайм-аутов отсюда. Я попробую еще раз когда-нибудь; на данный момент я только что открыл SSH на самом маршрутизаторе и могу входить в систему шаг за шагом (на маршрутизатор, затем на машину).
Вы должны использовать внешний IP-адрес вашего шлюза. Попробуй это:
rdr on $ext_if inet proto tcp from any to ($ext_if:0) port 24 -> 192.168.0.105 port 22
Скобки вставляют IP-адрес, привязанный к этому интерфейсу в настоящий момент, и обновляют его, если он изменяется (например, из-за DHCP). Значение: 0 указывает, что он должен использовать только основной IP-адрес, привязанный к интерфейсу, а не псевдонимы.