在兩個 IPsec 隧道之間路由流量

在兩個 IPsec 隧道之間路由流量

我在 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

告訴*natiptables 將規則套用到 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/010.31.3.1。這是必要的,因為我不控制路由、伺服器或任何內容, 因此,如果從子網路收到請求10.30.4.0/24,它不知道如何回應。但它確實知道10.31.3.1

就是這樣!現在我可以到達當地的透過伊維10.31.3.2

相關內容