添加虛擬 IPsec 適配器需要什麼?
我正在嘗試使用 iproute2 從控制台手動設置 IPsec 連接。我需要的是一個虛擬介面(充其量,虛擬 IP 地址也足夠了),IPsec 轉換一切進入(ESP/TUNNEL 模式)並將其交給 eth0(在我的系統上稱為 em1)。在另一端,對等點從自己的 eth 中獲取數據包,對其進行解密並將其交給另一端的虛擬介面。所以我想建立一個“正常”的 IPsec 隧道。
我對策略和 SA 沒有任何問題,並且在傳輸模式下使用系統的正常乙太網地址很容易配置,即
ip xfrm policy add src 198.51.100.1 dst 198.51.100.2 dir out tmpl proto esp ip xfrm state add src 198.51.100.1 dst 198.51.100.2 spi 24501 proto esp enc des 0xAABBCCDDEEFF0011 ip xfrm state add src 198.51.100.2 dst 198.51.100.1 spi 24501 proto esp enc des 0xAABBCCDDEEFF0022
並且對等體上的對手配置效果很好。
現在我嘗試設置一個虛擬 IP 和一個到另一個系統的路由
ip address add 10.0.0.0 dev em1 ip route add to 10.0.0.2 via 10.0.0.1
反之亦然。這再次運作良好。然後我將 IPsec 策略和 SA 更改為
ip xfrm policy add src 10.0.0.1 dst 10.0.0.2 dir out tmpl src 198.51.100.1 dst 198.51.100.2 proto esp mode tunnel ip xfrm state add src 10.0.0.1 dst 10.0.0.2 spi 24501 proto esp enc des 0xAABBCCDDEEFF0011 ip xfrm state add src 10.0.0.2 dst 10.0.0.1 spi 24501 proto esp enc des 0xAABBCCDDEEFF0022
當我現在嘗試對
tcping
等時,我沒有得到任何答案並setkey -PD
告訴我,從未觸發過安全策略。現在我正在嘗試製作一個有效的虛擬介面來處理 IPsec 隧道,但我不知道如何將其綁定到物理介面以及如何讓核心應用安全策略。對我來說,我可以用 iproute2 解決這個問題至關重要,因為我最終想從 C++ 程序中做到這一點,而且我已經有適當的類來刪除 Netlink 命令的樣式與
ip
命令的樣式相同(我可以用它做什麼ip
,我也可以在我的程式碼中執行)。事實上,第一部分已經在我的程序中執行,我想在其餘部分使用相同的 Netlink API 函式。更新 我發現需要使用隧道地址設置狀態,因此工作 SA 是
ip xfrm state add src 10.0.0.1 dst 10.0.0.2 spi 24501 proto esp enc des 0xAABBCCDDEEFF0011 ip xfrm state add src 10.0.0.2 dst 10.0.0.1 spi 24501 proto esp enc des 0xAABBCCDDEEFF0022
而政策保持不變。現在觸發了策略,我在嗅探埠上看到了一個轉換的數據包。另一台機器上的 iptables 也阻止了數據包,我將其禁用以進行測試。
所以,一個方向現在似乎有效,但我仍然沒有得到答案。我也不知道問題是否出在轉換、路由或介面部分*。*我更喜歡的解決方案仍然是一個包含虛擬介面的解決方案,但我不知道如何將它綁定到物理介面,更不用說轉換是否會以這種方式工作。
通常你使用的是一個隧道,使用
ip tunnel add
. 隧道設備為您提供了一個將 IP 數據包封裝在其他 IP 數據包中的虛擬設備。然後可以使用 IPsec 對封裝的數據包進行加密。例如,您可以使用以下命令創建GRE隧道:
ip tunnel add mytunnel mode gre remote 198.51.100.2 ip addr add 10.0.0.1 peer 10.0.0.2/31 dev mytunnel
然後,您可以配置 IPSec 來加密 GRE 數據包(一般情況下,或者只是到那個目的地)。