SNAT 無法保留真實客戶端 IP,MASQUERADE 可以

SNAT 無法保留真實客戶端 IP,MASQUERADE 可以

我有 3 個主機:AAA、BBB、CCC。

  1. 主持人AAA是一個OpenVPN服務帶有 IP 的 r172.17.10.1和遮罩 255.255.255.0。
  2. 主持人血腦屏障有 2 個 tun 介面: • 一個OpenVPN伺服器有IP172.16.10.1和遮罩 255.255.255.0 • 一個OpenVPN 用戶端有IP172.17.10.50(連接到OpenVPN伺服器AAA)
  3. 主持人CCC是具有IP的OpenVPN客戶端172.16.10.50(連接 OpenVPN 伺服器 BBB)。它通過 172.16.10.1 路由到 172.17.10.0/24

在此輸入影像描述

我的目標是主機 CCC 成功 ping 主機 AAA 並主機 AAA 查看來自主機 CCC 的原始 IP (172.16.10.50) 的流量。

iptables -A FORWARD... -J ACCEPT我已經在主機BBB上設定了。

在主機 BBB 上我已經設定後佈線規則。例如,使用 MASQUERADE ping 成功,但問題是主機 AAA 透過這種方式看到 src IP 172.17.10.50(來自主機 BBB 的 IP): iptables -t nat -D POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j MASQUERADE

我將 MASQUERADE 更改為 SNAT,但 ping 失敗iptables -t nat -A POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j SNAT --to-source 172.16.10.50

問題是,透過 tcpdump,我發現流量沒有退出主機 BBB,並且沒有流量到達主機 AAA:

root@BBB:# tcpdump -ni tun17
listening on tun17, link-type RAW (Raw IP), capture size 262144 bytes
12:16:45.777464 IP 172.16.10.50 > 172.17.10.1: ICMP echo request, id 30730, seq 1149, length 64
12:16:46.801548 IP 172.16.10.50 > 172.17.10.1: ICMP echo request, id 30730, seq 1150, length 64

我嘗試將SNAT更改為來源IP 172.17.10.55(來自 172.17.10.0/24 網路的 IP 位址),但 ping 再次失敗,且流量再次不退出主機 BBB:

iptables -t nat -A POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j SNAT --to-source 172.17.10.55

12:16:47.825419 IP 172.17.10.55 > 172.17.10.1: ICMP echo request, id 30730, seq 1151, length 64
12:16:48.849460 IP 172.17.10.55 > 172.17.10.1: ICMP echo request, id 30730, seq 1152, length 64

為什麼我不能將 SNAT 與 --to-source 172.16.10.50 甚至與 --to-source 172.17.10.55 一起使用(哪個 IP 位址來自同一 172.17.10.0/24 網路)從主機 CCC ping 172.17.10.1?

流量似乎位於主機 BBB 上,並且不會從其 tun17 退出。我看到流量從主機 CCC 到主機 BBB,流量從 tun16 轉送到 tun17,但無法透過 SNAT 傳送到主機 AAA。

只有當封包的來源 IP 位址為 172.17.10.50 時,ping 才有效。例如,如果我將來源 IP 變更為 172.17.10.55,則 ping 失敗。

我認為問題不是防火牆,也不是路由,我懷疑有一些 OpenVPN 限制,但我不確定。兩個 OpenVPN 伺服器均處於--topology subnet/24 網路遮罩模式。

答案1

你必須添加路線在 ccd 中操作內部 openvpn 路由表。

否則 openvpn 不知道將封包路由回哪裡。在 openvpn 日誌中,您必須有一行類似“MULTI:來自客戶端 [IP ADDRESS] 的錯誤來源位址,封包遺失”

在這裡閱讀更多內容:

https://community.openvpn.net/openvpn/wiki/RoulatedLans

相關內容