![Перенаправление портов на основе доменного имени через pf](https://rvso.com/image/632742/%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%B0%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B2%20%D0%BD%D0%B0%20%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5%20%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%B8%D0%BC%D0%B5%D0%BD%D0%B8%20%D1%87%D0%B5%D1%80%D0%B5%D0%B7%20pf.png)
У нас есть публичный IP на машине (machine1), на которой запущен брандмауэр pf. У нас есть несколько машин за этим брандмауэром в локальной сети.
На машине 2 в локальной сети у нас есть служба, работающая на порту 443. Чтобы сделать эту службу доступной за пределами локальной сети (Интернета), мы перенаправляем через pf на машину 1.
rdr on $ext_if proto tcp from any to $ext_addr port 443 -> SOMEIP port 443
Теперь у меня есть machine3 в локальной сети, на которой также запущена служба на порту 443.
У нас есть доменные имена, такие как machine2.example.com и machine3.example.com, оба из которых указывают на публичный IP-адрес на machine1.
Есть ли способ сделать pf "осведомленным о доменном имени", чтобы определить, на какую машину с сервисом на 443 направлять? Изменение портов на любых машинах в локальной сети не должно быть вариантом.
решение1
На основании документации OpenBSD PF поддерживаются полностью квалифицированные доменные имена.
В документации src_addr, dst_addr
упоминается следующее:
Полное доменное имя, которое будет разрешено через DNS при загрузке набора правил. Все полученные IP-адреса будут подставлены в правило.`
решение2
Хотя я не думаю, что iptables способен фильтровать запросы по домену, это звучит как идеальная работа для nginx
. Если вы можете установить его на pfSense, вы можете настроить его как прокси для других серверов на основе различных конфигураций домена/IP. Он даже может действовать как балансировщик нагрузки, если это необходимо, и вам не нужно будет настраивать свой брандмауэр.
В качестве альтернативы вы можете настроить отдельный прокси-сервер nginx на одной из виртуальных машин. Затем ваш брандмауэр будет перенаправлять весь трафик на порты 80 и 443 на эту виртуальную машину, которая затем будет использовать nginx для проксирования запросов на определенные виртуальные машины. Его также можно настроить на любой из существующих виртуальных машин.