我在 DO 基礎設施上運行一個後端,稱之為站點伊維,連接到第三方網站省透過 IPsec 隧道,使用下列 libreswan 配置:
conn prov-client
...
right=$YVI_IP
rightsourceip=10.31.3.1
rightsubnet=10.31.3.0/28
left=$PROV_IP
leftsubnet=10.70.0.36/28
省有一個伺服器正在運行10.70.0.37
,我可以從伊維。
我的問題是,我正在設定一個本地開發環境(另一個網路中的 Ubuntu 盒子),每次我進行更改時,我都必須部署到伊維因為只有從那裡我才能存取 API省。我想透過連接來避免這種情況當地的到伊維並將流量路由到省能夠存取 API省從當地的並簡化開發。
我連接當地的到伊維作為公路戰士,具有以下配置:
conn remote-dev-client
...
left=$YVI_IP
leftsubnet=10.31.3.0/28
right=%any
rightaddresspool=10.31.4.1-10.31.4.254
連線已成功建立並從當地的我可以10.31.3.1
到達伊維。我想要的是10.70.0.37
到達省從當地的。到網路的路由10.70.0.36/28
不會自動添加,所以我嘗試手動設定一些ip xfrm
規則ip route
當地的:
# Outgoing
ip xfrm policy add dst 10.70.0.37 src 10.31.4.1 dir out tmpl src $LOCAL_IP dst $YVI_IP proto esp spi $SPI reqid $REQID mode tunnel priority 100000
# Incoming
ip xfrm policy add dst 10.31.4.1 src 10.70.0.37 dir fwd tmpl src $YVI_IP dst $LOCAL_IP proto esp reqid $REQID mode tunnel priority 100000
ip xfrm policy add dst 10.31.4.1 src 10.70.0.37 dir in tmpl src $YVI_IP dst $LOCAL_IP proto esp reqid $REQID mode tunnel priority 100000
ip route add table 220 src 10.31.4.1 10.70.0.37 via $LOCAL_IP dev $LOCAL_IF proto static
我現在繼續ip xfrm monitor
運行伊維然後從當地的平10.70.0.37
;我可以看到資料包到達伊維(來自 xfrm 監視器伊維),但只有傳出,而不是回應(例如,如果我 ping 10.31.3.1 就可以看到),表明伊維正在接收流量但未將其路由到省?我真的不知道如何解釋這一點。
我想我必須添加路線伊維將流量路由到省API 正確,但添加類似的規則到上面的規則不起作用。我希望能幫助您了解我缺少什麼以及我做錯了什麼。
也歡迎提出不同方法的建議,儘管這是連接到的唯一方法省,我無法控制,是透過 IPsec 隧道從伊維,這是我控制的。
答案1
我能夠用 iptables NAT 規則解決這個問題。這些ip xfrm
政策是沒有必要的。這是對我所做的一個小解釋,對於像我這樣不是專家的人:
從伊維我為公路戰士分配了一個10.31.4.0/24
子網,因此該網路的路由由金鑰守護程式(在我的例子中為 libreswan)自動安裝,因此我在伊維(/etc/ufw/before.rules
,因為我使用的是 UFW,但你可以直接實現相同的目的iptables
):
*nat
-F
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# PRE
-A PREROUTING -s 10.31.4.0/24 -d 10.31.3.2 -j DNAT --to-destination 10.70.0.37
# POST
-A POSTROUTING -s 10.31.4.0/24 -d 10.70.0.37 -j SNAT --to-source 10.31.3.1
COMMIT
告訴*nat
iptables 將規則套用到 NAT 表並實際COMMIT
保存規則。這樣-F
做只是為了方便,因為 UFW 添加了規則,ufw enable
但不會刪除它們,ufw disable
因此最終會出現重複項,因此需要刷新標誌-F
。
此PREROUTING
規則適用於從 Road Warrior 子網路傳入的資料包10.31.3.2
,其目的是將目標位址變更為,10.70.0.37
從而10.31.3.2
有效地將 IP 位址指派給省伺服器,從公路戰士的角度來看。
此POSTROUTING
規則適用於從 Road Warrior 子網路傳入、即將傳送到的資料包10.70.0.37
(因此,剛剛符合預先路由規則的資料包),並將其目標位址從位址 in 變更10.31.4.0/0
為10.31.3.1
。這是必要的,因為我不控制路由、伺服器或任何內容省, 因此,如果省從子網路收到請求10.30.4.0/24
,它不知道如何回應。但它確實知道10.31.3.1
。
就是這樣!現在我可以到達省從當地的透過伊維在10.31.3.2
。