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

相关推荐
神奇小汤圆20 分钟前
浅析二叉树、B树、B+树和MySQL索引底层原理
后端
文艺理科生29 分钟前
Nginx 路径映射深度解析:从本地开发到生产交付的底层哲学
前端·后端·架构
千寻girling30 分钟前
主管:”人家 Node 框架都用 Nest.js 了 , 你怎么还在用 Express ?“
前端·后端·面试
南极企鹅32 分钟前
springBoot项目有几个端口
java·spring boot·后端
Luke君6079733 分钟前
Spring Flux方法总结
后端
define952737 分钟前
高版本 MySQL 驱动的 DNS 陷阱
后端
忧郁的Mr.Li1 小时前
SpringBoot中实现多数据源配置
java·spring boot·后端
暮色妖娆丶2 小时前
SpringBoot 启动流程源码分析 ~ 它其实不复杂
spring boot·后端·spring
Coder_Boy_2 小时前
Deeplearning4j+ Spring Boot 电商用户复购预测案例中相关概念
java·人工智能·spring boot·后端·spring
Java后端的Ai之路2 小时前
【Spring全家桶】-一文弄懂Spring Cloud Gateway
java·后端·spring cloud·gateway