pfSense 到 vagrant VM 的奇怪 NAT 問題

pfSense 到 vagrant VM 的奇怪 NAT 問題

這讓我很困惑:

我有一個 pfSense 防火牆(我們稱之為pfs),後面有幾台伺服器。我將多個服務從我的公用 IP NAT 到 LAN 上的不同伺服器,沒有任何問題。

在其中一台伺服器(我們稱之為s1)上,我正在運行一個vagrant(帶有libvirt)VM(我們稱之為v1民眾192.168.1.159網路已配置,透過pfsDHCP 伺服器取得 IP 。

現在我在 上配置一個簡單的 NATpfs來存取s1的 SSH,比如說<wan>:6622 -> s1:22並在 上存取它mydomain.com:6622。沒問題。

我還可以訪問v1:22(或同等的192.168.1.159:22使用有效的 ssh 使用者從 LAN 內沒有問題。

現在我加入一個簡單的 NAT pfs,比如說<wan>:6722 -> v1:22。現在正在嘗試訪問mydomain.com:6722 才不是工作?

目標是添加“另一層”:使用公共連接埠運行容器,例如,--publish 9980:80並使用例如相應的 NAT來v1存取它們v1:9980mydomain.com:9980pfs<wan>:9980 -> v1:9980從區域網路這也按預期工作(即我可以v1:9980從 LAN 存取),但 NAT via 則pfs不行。

我有類似的設定在不同機器上的同一網路中工作,沒有問題。我甚至還有另一個(非流浪者,但也是libvirt)虛擬機s1,我可以透過我的公共 IP 透過 NAT 進行 ssh ,效果非常好。但不知何故,上述內容不適用於機器vagrant,我真的不知道可能導致此問題的原因。 (FWIW 我已net.ipv4.forward啟用v1)。

編輯:

我更近了一步:如果我vagrant使用 NUKE 虛擬機器的第一個現有 NIC virt-manager,並將第二個虛擬機器設為rtl8139virtio然後重新啟動),我會失去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 }')

(有趣的是,它需要執行兩次(或一段時間後?),可能是因為供應腳本啟動時網路尚未完全啟動?)

這將刪除預設路由eth0(只能由public_network自動配置)並使外部連線按預期工作。這大概是(此處推測)是因為對傳入 NAT 請求的響應默認通過默認路由(默認情況下具有優先級)路由到防火牆,這使 NAT 防火牆感到困惑,因為它來自 VM 的.因此,在外部請求進入的相同介面上刪除對外部請求的預設回應。eth1vagranteth0vagranteth1eth0

相關內容