patashnik
@patashnik

FreeBSD, Packet filter (PF) и перенаправление портов?

Стандартная ситуация: локальная сеть 192.168.1.0/24 (интерфейс em0), сеть провайдера, шлюз на FreeBSD/PF (192.168.1.1). Этот шлюз получает интернет через vpn-соединение с провайдером (интерфейс ng0, выдается внещний IP-адрес «X»). На шлюзе настроены правила NAT для работы интернета из локальной сети.

nat on ng0 from em0 to any -> (ng0)

Есть правило, которое перенаправляет все внешние соединения из интернет на порт 80 на соответствующий веб-сервер 192.168.1.2

rdr on ng0 proto tcp from any to "X" port 80 -> 192.168.1.2


Не получается сделать так, чтобы при обращении из внутренней сети по внешнему адресу «X» срабатывало перенаправление портов. Есть какие-нибудь идеи?
  • Вопрос задан
  • 9987 просмотров
Решения вопроса 1
DmZ
@DmZ
Уже не один раз обсуждалось. Читайте как работает NAT и для чего он нужен.
Роутер все заворачивает правильно, просто в данном случае работать оно не будет:
  • Из мира приходит пакет (предположим 8.8.8.8 -> 80.*.*.*), роутер его днатит в локальный адрес (8.8.8.8 -> 192.168.1.33), вебсервер получает запрос от 8.8.8.8 и шлет ответ обратно на роутер (дефолт-роут), роутер проводит пакет обратно по нат и отправляет в мир;
  • Если пакет приходит из локалки (предположим 192.168.1.2 -> 80.*.*.*), роутер его днатит в локальный адрес (192.168.1.2 -> 192.168.1.33), вебсервер получает запрос от 192.168.1.2 и шлет ответ обратно в ЛОКАЛЬНУЮ сеть, компьютер 192.168.1.2 не получает ожидаемого ответа от 80.*.*.* а ответ от 192.168.1.33 считает инвалидным, так как не отправлял туда запрос. Соотв. TCP соединение не устанавливается.


(отсюда)

Если хочется именно НАТом это сделать, то пакеты приходящие от em0 на Х нужно натить в адрес em0, чтобы вебсервер отвечал роутеру, а не напрямую в локалку.
nat on em0 proto tcp from 192.168.1.0/24 to 192.168.1.2 port 80 -> (em0)

Или можно локально поднять net/bounce, его поставить слушать 127.0.0.1:8080->192.168.1.2:80 а редирект заменить на:
rdr on ng0 proto tcp from any to "X" port 80 -> 127.0.0.1 port 8080
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы