pfSense から Vagrant VM への奇妙な NAT 問題

pfSense から Vagrant VM への奇妙な NAT 問題

これには困惑しました:

私は pfSense ファイアウォール (と呼ぶことにしますpfs) を持っており、その背後には複数のサーバーがあります。パブリック IP から LAN 上のさまざまなサーバーに複数のサービスを問題なく NAT しています。

サーバーの1つ( と呼ぶことにします)で、( の)VM( と呼ぶことにします)s1を実行しています。vagrantlibvirtv1公共ネットワークが設定され、DHCP サーバー192.168.1.159経由でIP を取得します。pfs

ここで、の SSHpfsにアクセスするためにに単純な NAT を設定し、でアクセスします。問題ありません。s1<wan>:6622 -> s1:22mydomain.com:6622

有効なsshユーザーでアクセスv1:22(または同等の)することもできます192.168.1.159:22LAN内から問題なく。

pfsここで、たとえばに単純なNATを追加します<wan>:6722 -> v1:22。アクセスしようとしていますmydomain.com:6722 ではない仕事?!

目的は、さらに「別のレイヤー」を追加することです。つまり、 などのパブリック ポートを持つコンテナーを で実行し--publish 9980:80、などの対応する NAT を使用して や からv1としてそれらにアクセスします。v1:9980mydomain.com:9980pfs<wan>:9980 -> v1:9980LANからv1:9980これも期待どおりに動作しています (つまり、 LAN からアクセスできます) が、NAT 経由pfsは動作しません。

同じネットワーク内の異なるマシンで問題なく動作する同様の設定があります。 には別のlibvirtVM (非 Vagrant ですが )もありs1、パブリック IP 経由で NAT 経由で ssh できます。しかし、どういうわけか上記の方法はマシンでは機能せずvagrant、この問題の原因が何なのかまったくわかりません。 (参考net.ipv4.forwardまでに、 では有効にしていますv1)。

編集:

vagrant一歩近づきました。を使用して VMの最初の既存の NIC を削除しvirt-manager、2 番目の VM をrtl8139の代わりにに設定しvirtio(その後再起動) ると、vagrant ssh機能は失われますが、NAT は機能します。そこで疑問になるのが、vagrantプロビジョニングを介して同様の構成にするにはどうすればよいかということです。つまり、パブリック ネットワークはデフォルトのインターフェイス上にある必要があるということですか?

答え1

解決:

原因は、vagrantローカルインターフェース(プライベートネットワーク)をプライマリとして必要とし(したがって設定し)、それをオーバーライドする標準的な方法がないことです。(一部の情報はここしかし、vagrant人々は自分たち自身もこの話題に困惑していることを認めています...)

デフォルト ルートを微調整するという概念の (より堅牢な) バリエーションが解決策をもたらしました。私はansibleプロビジョナーを使用しており、以下を実行します (ゲスト上で、プロビジョニング プレイブックを介して)。

  - name: remove wrong default route on eth0 (again)
    shell: |
      eval $(route -n | awk '$0~/[.0]{4}/ && $3~/[.0]{4}/ && $8~/eth0/ { printf "ip route del default via %s dev %s; ",$3,$8 }')

(興味深いことに、プロビジョニング スクリプトの開始時にネットワークが完全に起動していないため、2 回 (またはしばらくしてから?) 実行する必要があります。)

これにより、 のデフォルト ルートが削除されeth0( はによってpublic_networkのみ に自動的に設定されます)、外部接続が期待どおりに動作するようになります。これはおそらく (推測ですが)、着信 NAT 要求への応答がデフォルトで のデフォルト ルート (デフォルトで優先されます) 経由でファイアウォールにルーティングされ、VM の で着信するため NAT FW が混乱するためと考えられます。したがって、 を削除すると、着信と同じインターフェイスで外部要求にデフォルトで応答します。eth1vagranteth0vagranteth1eth0

関連情報