[ipsec][strongswan] 使用VTI配置基于路由的ipsec
之前寫的一個:[dev][ipsec] 基于路由的VPrivateN
一
我們默認用strongswan的時候基于策略的. 也就是policy. 基于策略的ipsec中, policy承擔了兩部分功能
一是訪問權限的控制功能, 另一個是路由的功能. linux kernel做完路由之后會在查詢policy,從而確定要將包轉發給哪一個SA.
二
基于一中的描述, 我們現在要做基于路由的ipsec, 也就是說將路由功能從policy中去除出來, 在路由表中使用路由條目來做.
于是在這里需要解決的就是路由指向下一條的問題, 而這個下一條就是Ipsec SA.
三
現在引入一個概念叫做VTI(Vitual Tunnel Interface), VTI是內核中的一種設備. 使用如下命令添加:
ip link add name vti1 type vti key VTI_KEY local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR
我們看見, 創建vti時指定了一個key, 這個key便是與SA之間的關聯. 見下面的例子如何完成這樣一個關聯:
# ip link add name vti1 type vti key VTI_KEY local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR # ip link set vti1 up # ip addr add LOCAL_VIRTUAL_ADDR/24 dev vti1 # ip xfrm state add src LOCAL_IPv4_ADDR dst REMOTE_IPv4_ADDR spi SPI PROTO ALGR mode tunnel # ip xfrm state add src REMOTE_IPv4_ADDR dst LOCAL_IPv4_ADDR spi SPI PROTO ALGR mode tunnel # ip xfrm policy add dir in tmpl src REMOTE_IPv4_ADDR dst LOCAL_IPv4_ADDR PROTO mode tunnel mark VTI_KEY # ip xfrm policy add dir out tmpl src LOCAL_IPv4_ADDR dst REMOTE_IPv4_ADDR PROTO mode tunnel mark VTI_KEY
這樣呢. 這個新增的VTI就等價于SA, 我們只有正常的配置路由, 將流量路由到這個VTI上, 便等于完成了基于路由的IPsec.
參考:https://developers.redhat.com/blog/2019/05/17/an-introduction-to-linux-virtual-interfaces-tunnels/
四
三里邊我們使用iproute工具做的配置, strongsan里同樣如此. 在配置的時候, 比如有一個mark的配置項,用來關聯SA
mark_in = mark_out = 42
五
基于一中的分析. 我們在基于路由的場景下將police的功能進行了分離. 所以policy的原有的策略控制功能和定義并沒有發生變化.
雙端還是可以自由的協商出需要的安全策略.
六
VTI是有很多局限性的, 最新的kernel里新增了類型名叫做xfrm的interface, 作為VTI的下一代. 見:
https://lwn.net/Articles/757391/
七
基于二, 我們解決這個問題的方法有很多, 只要能達成路由到SA的包轉發.
處理VTI, XFRM, 還可以用GRE.
見:https://wiki.strongswan.org/projects/strongswan/wiki/RouteBasedVPN
八
所有問題的關鍵,都在于將作為工具的interface將SA進行關聯.
VTI用了 key/mark (mark_in=mark_out=42)
XFRM用了 interface Id(if_id_in|outinswanctl.conf)
GRE在strongswan中使用這樣一個配置:(local|remote_ts=dynamic[gre]inswanctl.conf)
另外, 如果你使用strongswan的話, 需要改一下這個, 因為基于策略時他會在路由表里加東西:charon.install_routes=0
總結
以上是生活随笔為你收集整理的[ipsec][strongswan] 使用VTI配置基于路由的ipsec的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言实现字符串IP与整数型IP的相互转
- 下一篇: 颜色 color 字体 font 图标字