FreeBSD 10の設定には、公的にアクセス可能なnginx Webサーバーを実行する刑務所の1つと、JettyベースのJavaバックエンドサーバーを実行する別の刑務所があります。各刑務所には、lo1ループバックインターフェイスに接続された独自の内部IPアドレス127.0.1.xがあります。これらはすべて、着信トラフィックをnginx刑務所にリダイレクトし、そこからJetty刑務所にリダイレクトするpfファイアウォールで実行するように構成されています。デフォルトのpf設定は次のとおりです。
これで、httpsを介して外部からアクセスできるGitリポジトリが必要です。これは設定され、うまく機能しますが、外部からのみアクセスできます。桟橋刑務所で接続できません。しかし、パブリックIPアドレスを介してJettyバックエンド刑務所から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
答え1
私の質問に答えるために、次のファイアウォール設定を使用して動作しました。
# 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 Jailの/ etc / hostsファイルにNginx Jailの内部IPアドレスを追加しました。
127.0.1.1 git.mycompany.com
これにより、トラフィックは外部ネットワークデバイスの代わりに内部lo1ループバックインターフェイスを介してルーティングされます。これは私が元の投稿で望んでいたものとまったく一致しませんが、一度設定したら正しく機能します。
外部ネットワークデバイスを使用して予想される方法で問題を解決する方法を知っている人は、まだ答えに興味があります。
答え2
この質問を受けてからかなり時間が経過したことを知っていますが、ここには次のようなものがあります。
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= "contents of 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