swanctl 一个 localts 使用多个网段

中文解释:swanctl 中关于多子网的使用

问:我可以在一个 CHILD_SA 中隧道多个子网吗?

答:

  • 使用 IKEv2: 如果你使用 IKEv2 协议,并且对端(peer)支持此功能,那么是可以在一个 CHILD_SA 中隧道多个子网的。然而,并非所有设备都支持此功能。例如,Checkpoint、Cisco 和 Fortinet 的设备可能不支持,因此你需要查阅互操作性部分以获取相关细节。

  • 使用 IKEv1: 如果你使用 IKEv1 协议,你需要处于"道路战士"(road warrior)模式,并且使用 UNITY 扩展。在 strongSwan 中,可以通过 unity 插件来实现这一点。

  • 其他情况: 在其他情况下,如果不满足上述条件,你需要为每对子网定义一个单独的 CHILD_SA。

总结

总之,利用 IKEv2 协议,在对端支持的情况下,可以在同一个 CHILD_SA 中配置多个子网。而在 IKEv1 中,若希望实现相同功能,需借助 UNITY 扩展,并且通常适用在特定模式下。如果都不符合,则需要为每个子网对单独设置一个 CHILD_SA。

而我自己测试下来发现没有得到预期结果,虽然我定义了两个网段,但是只有一条路由

bash 复制代码
      children {
         net-net {
            local_ts = 10.251.138.0/24,10.251.137.0/24
            remote_ts = 2.2.168.0/24
            
            
# ip route show table 220
2.2.168.0/24 via 10.251.174.254 dev bond0.2286 proto static src 10.251.138.32


/etc/swanctl# swanctl --initiate --child net-net  mars-moon
[IKE] establishing CHILD_SA net-net{5}
[ENC] generating CREATE_CHILD_SA request 4 [ SA No KE TSi TSr ]
[NET] sending packet: from 10.251.174.200[4500] to 10.22.255.89[4500] (432 bytes)
[NET] received packet: from 10.22.255.89[4500] to 10.251.174.200[4500] (432 bytes)
[ENC] parsed CREATE_CHILD_SA response 4 [ N(ESP_TFC_PAD_N) N(NON_FIRST_FRAG) SA No KE TSi TSr ]
[IKE] received ESP_TFC_PADDING_NOT_SUPPORTED, not using ESPv3 TFC padding
[CFG] selected proposal: ESP:AES_CBC_256/HMAC_SHA2_256_128/MODP_1536/NO_EXT_SEQ
[IKE] CHILD_SA net-net{5} established with SPIs cce1c71f_i 3062316c_o and TS 10.251.137.0/24 === 2.2.168.0/24
initiate completed successfully

# 在 SA init 阶段可以看到,只有一个 TS,但是路由又是另外一个

# ip route show table 220
2.2.168.0/24 via 10.251.174.254 dev bond0.2286 proto static src 10.251.138.32

创建多个 CHILD_SA

可以看到目前我有 2 个sa,但是依然只有一条路由

bash 复制代码
+ /usr/sbin/swanctl --list-sas
mars-moon2: #1, ESTABLISHED, IKEv2, 56839a77707bb663_i* 3db3e48a2ece5386_r
  local  '10.251.174.200' @ 10.251.174.200[4500]
  remote '10.22.255.89' @ 10.22.255.89[4500]
  AES_CBC-256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_1536
  established 196s ago, rekeying in 83957s
  net-net: #1, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-256/HMAC_SHA2_256_128
    installed 196s ago, rekeying in 84632s, expires in 86204s
    in  ca40d2fd,      0 bytes,     0 packets
    out 5e199c1c,      0 bytes,     0 packets
    local  10.251.138.0/24 # 1
    remote 2.2.168.0/24
  net-net: #2, reqid 2, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-256/HMAC_SHA2_256_128/MODP_1536
    installed 196s ago, rekeying in 84746s, expires in 86204s
    in  c2aad78a,    788 bytes,     3 packets,     6s ago
    out 8247bfb9,    252 bytes,     3 packets,     6s ago
    local  10.251.137.0/24 # 2
    remote 2.2.168.0/24
    
bash 复制代码
# ip route show table 220
2.2.168.0/24 via 10.251.174.254 dev bond0.2286 proto static src 10.251.137.32
bash 复制代码
connections {

    mars-moon2 {
      version = 2
      local_addrs  = 10.251.174.200
      remote_addrs = 10.22.255.89
      dpd_delay = 60
      rekey_time = 84600
      over_time = 1800
      encap = yes
      mobike = yes

      local {
         auth = psk
         id = 10.251.174.200
      }
      remote {
         auth = psk
         id = 10.22.255.89
      }
      children {
         net-net {
            local_ts = 10.251.138.0/24
            remote_ts = 2.2.168.0/24
         }
      }
   }

    mars-moon1 {
      version = 2
      local_addrs  = 10.251.174.200
      remote_addrs = 10.22.255.89
      dpd_delay = 60
      rekey_time = 84600
      over_time = 1800
      encap = yes
      mobike = yes

      local {
         auth = psk
         id = 10.251.174.200
      }
      remote {
         auth = psk
         id = 10.22.255.89
      }
      children {
         net-net {
            local_ts = 10.251.137.0/24 # 10.251.137.32 按照配置的先后顺序
            remote_ts = 2.2.168.0/24
         }
      }
   }
}

某种意义上来说,即使 local ts 有多个,但本地 node 都有这两个网段的 ip 的情况下, 只有一条路由,应该也是不合理的,因为只要有一条路由可以回即可。

只要从对面,确认这两个段的 ip,都可以通即可

相关推荐
干到60岁退休的码农5 分钟前
SpringBoot整合Mybatis-plus
spring boot·后端·mybatis
掘金者阿豪7 分钟前
从Oracle迁到金仓,第一个月踩的最大的坑就是它
前端·后端
aramae11 分钟前
C++11:现代C++的里程碑
c语言·开发语言·c++·windows·git·后端
无相求码36 分钟前
为什么你的第二个 scanf 还没输入就直接跳过了?C语言输入缓冲区陷阱
c语言·后端
叼馒女友郭芙蓉36 分钟前
Function Calling理解
后端
玉宇夕落37 分钟前
LangChain RAG Retriever 的学习
后端
用户2986985301443 分钟前
Python 一键导出 Excel 中的图表和形状为图片
后端·python·excel
用户8130077816371 小时前
PageHelper分页查询步骤
后端
是小李呀1 小时前
MyBatis、MyBatis-Plus 与全自动 ORM 的本质区别
后端
小堂子这厢有礼了1 小时前
Chet.Admin 权限模型:菜单级 + 按钮级 + 行级三层防护
前端·后端·信息可视化·前端框架·.net