![pf 経由のドメイン名に基づくポートのリダイレクト](https://rvso.com/image/632742/pf%20%E7%B5%8C%E7%94%B1%E3%81%AE%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E5%90%8D%E3%81%AB%E5%9F%BA%E3%81%A5%E3%81%8F%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AE%E3%83%AA%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88.png)
PF ファイアウォールを実行しているマシン (machine1) にパブリック IP があります。LAN 内のそのファイアウォールの背後には複数のマシンがあります。
LAN 内の machine2 では、ポート 443 でサービスが実行されています。そのサービスを LAN (インターネット) の外部で利用できるようにするには、machine1 で pf 経由でリダイレクトします。
rdr on $ext_if proto tcp from any to $ext_addr port 443 -> SOMEIP port 443
現在、LAN 内に machine3 があり、ポート 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 構成に基づいて他のサーバーへのプロキシとして設定できます。必要に応じてロード バランサーとして機能することもでき、ファイアウォールを構成する必要はありません。
あるいは、VM の 1 つに別の nginx プロキシ サーバーを設定することもできます。そうすると、ファイアウォールで 80 および 443 ポートへのすべてのトラフィックがその VM にリダイレクトされ、nginx を使用して特定の VM へのリクエストがプロキシされます。既存の VM のいずれかに設定することもできます。