FreeBSD 10のセットアップでは、公的にアクセス可能なnginx Webサーバーを実行するjailと、Jettyに基づくJavaバックエンドサーバー用の別のjailがあります。各jailには独自の内部IPアドレス127.0.1があります。 xはlo1ループバックインターフェースに接続されています。これはすべて、着信トラフィックをnginx刑務所にリダイレクトし、そこからJetty刑務所にリダイレクトするpfファイアウォールで実行するように構成されています。基本的なpf構成を以下に示します。
ここで、httpsを介して外部からアクセスできるGitリポジトリを作成したいと思います。これはすでに設定されており、正常に機能しますが、外部からアクセスする必要があります。桟橋の刑務所からは、接続できません。ただし、Jettyバックエンド刑務所からパブリックIPアドレスを介してGitリポジトリにアクセスしたいと思います。
私はこれをpfで有効にするために次の行のようなものを試しましたが成功しませんでした:
rdr pass proto tcp from $ip_jetty to $ip_public port https -> $ip_nginx
私のpfファイアウォール構成は次のようになります。
ip_public = "6.7.8.9"
if_external = "igb0"
net_jails = "127.0.1.0/24"
ip_nginx = "127.0.1.1"
ip_jetty = "127.0.1.10"
# Allow traffic from jails to outside world, enabled by network address translation
nat pass on $if_external from $net_jails to any -> $ip_public
# Redirect incoming web traffic to nginx jail
rdr pass on $if_external proto tcp from any to $ip_public port { http, https } -> $ip_nginx
# Allow outgoing connections
pass out all
# Allow nginx access to Jetty backend
pass in on lo1 proto tcp from $ip_nginx to $ip_jetty port 8080
私自身の質問に答えるために、次のファイアウォール構成を使用して動作させることができました。
# Allow dynaserv jail to access git on https port of web jail
pass in on lo1 proto tcp from $ip_jetty to $ip_nginx port https
また、Jetty刑務所の/ etc/hostsファイルに、Nginx刑務所の内部IPアドレスを追加しました。
127.0.1.1 git.mycompany.com
このように、トラフィックは外部ネットワークデバイスではなく内部lo1ループバックインターフェイスを介してルーティングされます。これは、元の投稿で望んでいたものではありませんが、構成するとうまく機能します。
誰かが(外部ネットワークデバイスを使用して)意図した方法で質問を解決する方法をまだ考えている場合、私はまだ答えに興味があります。
これが尋ねられてからしばらく経ちましたが、ここに行きます:
OPで説明しているのは、「ヘアピンNAT」として知られています。ただし、ゲートウェイに不要な負荷を追加する代わりに、PFにすべての変換を処理させる必要があります。私はあなたが探している答えがここの一番上の答えの最初のコメントにリストされていると信じています: https://serverfault.com/questions/55611/loopback-to-forwarded-public-ip-address-from-local- network-hairpin-nat 。
基本的に、PFはこれをそのままでは実行しませんが、次のように実行できます(ここで、$ hairpin_intは新しいvNICです。/etc/rc.confにはcloned_interfaces = "lo1のようなものがあります。 hp1 "):
no nat on $int_if proto tcp from $int_if to $int_net
nat on $int_if proto tcp from $int_net to $hairpin_int port $hairpin_ports -> $int_if
rdr on $int_if proto tcp from $int_net to $ext_if port $hairpin_ports -> $hairpin_int