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,都可以通即可

相关推荐
小蒜学长1 小时前
springboot多功能智能手机阅读APP设计与实现(代码+数据库+LW)
java·spring boot·后端·智能手机
追逐时光者2 小时前
精选 4 款开源免费、美观实用的 MAUI UI 组件库,助力轻松构建美观且功能丰富的应用程序!
后端·.net
你的人类朋友3 小时前
【Docker】说说卷挂载与绑定挂载
后端·docker·容器
间彧4 小时前
在高并发场景下,如何平衡QPS和TPS的监控资源消耗?
后端
间彧4 小时前
QPS和TPS的区别,在实际项目中,如何准确测量和监控QPS和TPS?
后端
间彧4 小时前
消息队列(RocketMQ、RabbitMQ、Kafka、ActiveMQ)对比与选型指南
后端·消息队列
brzhang5 小时前
AI Agent 干不好活,不是它笨,告诉你一个残忍的现实,是你给他的工具太难用了
前端·后端·架构
brzhang5 小时前
一文说明白为什么现在 AI Agent 都把重点放在上下文工程(context engineering)上?
前端·后端·架构
Roye_ack6 小时前
【项目实战 Day9】springboot + vue 苍穹外卖系统(用户端订单模块 + 商家端订单管理模块 完结)
java·vue.js·spring boot·后端·mybatis
AAA修煤气灶刘哥7 小时前
面试必问的CAS和ConcurrentHashMap,你搞懂了吗?
后端·面试