![透過pf根據域名重定向端口](https://rvso.com/image/632742/%E9%80%8F%E9%81%8Epf%E6%A0%B9%E6%93%9A%E5%9F%9F%E5%90%8D%E9%87%8D%E5%AE%9A%E5%90%91%E7%AB%AF%E5%8F%A3.png)
我們在運行 pf 防火牆的電腦 (machine1) 上有一個面向公眾的 IP。我們在區域網路中的防火牆後面有多台機器。
在 lan 中的 machine2 上,我們有一個在連接埠 443 上運行的服務。
rdr on $ext_if proto tcp from any to $ext_addr port 443 -> SOMEIP port 443
現在我在區域網路中有一台機器 3,並且在連接埠 443 上運行著一個服務。
我們設置了諸如 machine2.example.com 和 machine3.example.com 之類的域名,它們都指向 machine1 上面向公眾的 IP。
有沒有辦法讓 pf “域名感知”,以找出要路由到 443 上有服務的哪台機器?更改 LAN 中任何電腦上的連接埠不應該是一種選擇。
答案1
基於 OpenBSD 的 PF 文檔,支援完全限定的網域名稱。
文件src_addr, dst_addr
提到了這一點:
載入規則集時將透過 DNS 解析的完全限定網域名稱。所有產生的 IP 位址都將替換到規則中。
答案2
雖然我不認為 iptables 能夠按域過濾請求,但這聽起來像是nginx
.如果您可以將其安裝在 pfSense 上,您可以根據各種網域/IP 配置將其設定為其他伺服器的代理程式。如果需要,它甚至可以充當負載平衡器,並且您無需配置防火牆。
或者,您可以在其中一台虛擬機器中設定單獨的 nginx 代理伺服器。然後,您的防火牆將所有流量重新導向到該虛擬機的 80 和 443 端口,然後該虛擬機將使用 nginx 將請求代理到特定虛擬機。它還可以在任何現有虛擬機器上進行設定。