為什麼這個 MASQUERADE 規則是必要的?
我目前有一個 VPN 站點到站點設置,其中將 Centos7 伺服器設置為遠端站點隧道的 VPN 客戶端。隧道建立良好,我試圖通過隧道訪問遠端站點的資源,但到目前為止,除了 VPN 客戶端本身之外,我無法 ping 任何東西,後面什麼都沒有。
遠端站點 VPN 客戶端(centos7 伺服器)可以 ping 和訪問資源,但 VPN 客戶端防火牆後面的客戶端不能。
設置:
主站點:路由器/防火牆:192.168.150.1(執行 openvpn/sophos 防火牆)
客戶端:Centos7 伺服器 192.168.200.1(eth0 地址)/192.168.201.1(tun0 地址)
主站點(例如 192.168.150.2)的客戶端可以 ping 192.168.200.1 和 192.168.201.2。但不是 192.168.200.50(客戶端站點上的資源)。
在客戶端站點上,我在 firewalld 中有以下直接規則:
ipv4 filter FORWARD 0 -i tun0 -o eth0 -p icmp -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT ipv4 filter FORWARD 0 -i eth0 -o tun0 -p icmp -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
核心中已啟用 ipv4 轉發。每個介面都在 firewalld 中自己的區域中。
添加此規則可解決問題,並建立連接。但為什麼?我不想要任何經過 NAT 處理的東西。
ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE
從完整的描述中,我可以猜到在“主站點”上一切順利,並且所有需要的路由內容都已正確設置。我會在 IP 為 192.168.200.50 的主機上看到的“問題”(否則只有一個 MASQUERADE 規則是不夠的)。
這種行為意味著,一旦您嘗試從主站點與 192.168.200.50 通信,它就會通過 VPN 隧道正確路由到 192.168.201.1 而不是 192.168.200.50(您可以嘗試擷取 192.168.200.50 上的流量,最有可能您將看到傳入的數據)。問題在於回复。192.168.200.50 節點不知道如何與 192.168.201.0/x 和 192.168.150.0/y 通信。結果是響應被路由到預設網關並且沒有到達目的地……
使用 NAT 規則,流量似乎源自 192.168.200.1,因此 192.168.200.50 將其正確地引導回“去 NATed”的“VPN GW”並通過隧道正確發回。
嘗試在 192.168.200.50 上添加這些規則(假設兩個遮罩 /24):
ip route add 192.168.201.0/24 via 192.168.200.1 ip route add 192.168.150.0/24 via 192.168.200.1
然後在 192.168.200.1 上重試沒有 MASQUERADE 規則的通信,我認為它會像假設的那樣工作。祝你好運 !
– 編輯 / 2019 年 6 月 22 日星期六 21:09 UTC –
或者,您可以嘗試在預設 GW 上為 192.168.200.0/24 添加靜態路由(因為 VPN 使用 .1,GW 可能是 .254 :))。然後它也可以工作,因為 192.168.200.50 會通過預設 GW 正常發送回來,但它會發送回“VPN GW”……