strongswan ipsec 端口使用

是的,在 IPsec IKE 的上下文中,客户端服务端 都会使用 UDP 500UDP 4500 端口。具体情况如下:

  1. UDP 500

    • 在 IKE 的第一阶段和第二阶段的初始协商过程中,客户端和服务端都分别使用 UDP 500 端口进行通信。
    • 这主要用于建立 IKE 协商,交换加密算法、身份验证及其他参数。
  2. UDP 4500

    • 当存在 NAT 的情况下,UDP 4500 端口用于 NAT-T(NAT Traversal),以保证 IPsec 能够在 NAT 设备后正常工作。
    • 在这种情况下,客户端和服务端都将通过 UDP 4500 端口进行数据的封装和传送,确保能够正确处理由 NAT 引起的地址转换。

IKE 协商的时候可以看到 500 到 500,建联之后,就只基于 4500

bash 复制代码
# conntrack -L | grep -E  "=500 |=4500 "
... 省略了跨节点的业务连接
udp      17 179 src=10.251.174.200 dst=10.22.255.89 sport=4500 dport=4500 src=10.22.255.89 dst=10.251.174.200 sport=4500 dport=4500 [ASSURED] mark=0 use=1

根据你提供的输出,charon 是 StrongSwan 中的 IKEv2 实现,它正在监听用于 IPsec VPN 的常见端口。让我们逐一分析这些端口及其使用场景:

  1. UDP 68

    • 启动进程为 charon-systemd,这是用来接收 DHCP(Dynamic Host Configuration Protocol)请求的端口,通常用于获取 IP 地址,是与 VPN 不直接相关的。
  2. UDP 500

    • 这是 IKE 的标准端口,用于 IKE 协商的第一阶段。这一阶段涉及到加密参数、身份验证和建立安全关联(SA)的交换。所有的 IPsec VPN 客户端和服务器都需要通过此端口进行通信。
  3. UDP 4500

    • 这是 NAT-T(NAT Traversal)使用的端口。当 VPN 客户端位于 NAT 设备后时,UDP 4500 端口被用来封装 IKE 和 IPsec 数据包,以确保它们可以顺利通过 NAT。使用此端口时,UDP 数据包会被封装在 UDP 数据包中,使网络地址转换能够正常工作。
  4. [::]:500 和 [::]:4500

    • 这些条目表示 charon 也在 IPv6 地址空间(使用 :: 表示所有可用 IPv6 地址)上监听 UDP 500 和 UDP 4500 端口。这正在表明服务也支持 IPv6 客户端。

总结

  • UDP 500 用于 IKE 协商的第一阶段,建立和管理安全关联。

  • UDP 4500 用于支持 NAT 的情况下进行加密通信。

  • UDP 68 是与 DHCP 相关的端口,虽与 VPN 不直接相关。

  • 客户端和服务端都会使用 UDP 500 端口进行 IKE 协商 ,同时在有 NAT 的情况下,会使用 UDP 4500 端口进行传输。

2. NAT-T 配置

bash 复制代码
connections {

   nat-t { # 这里
      local_addrs  = 10.1.0.10
      remote_addrs = 192.168.0.2

      local {
         auth = psk
         id = 10.1.0.10
      }
      remote {
         auth = psk
         id = 192.168.0.2
      }
      children {
         nat-t { # 这个配置为 nat-t
            remote_ts = 10.2.0.0/16

            updown = /usr/local/libexec/ipsec/_updown iptables
            esp_proposals = aes128gcm128-x25519
         }
      }
      version = 2
      proposals = aes128-sha256-x25519
   }
}

secrets {
   ike-sun {
      id = 192.168.0.2
      secret = 0sv+NkxY9LLZvwj4qCC2o/gGrWDF2d21jL
   }
}

这个拓扑是使用一个双网卡的主机作为 ipsec 网关,来实现 NAT-T 的功能

IKEv2 协议在核心中包含 NAT 遍历 (NAT-T) standard,但对于供应商来说,它是可选的。strongSwan 天鹅 charon 守护进程无需任何特殊的事先配置即可实现 NAT-Traversal,但也不能禁用该机制。

一些 NAT 路由器具有一项功能,通常称为 IPsec 直通之类的功能 检测来自 NAT 设备后面的单个主机的出站 IKE 流量,以及 将入站 IKE 和 ESP 数据包转发到该特定主机,如 下图

遗憾的是,这不适用于同一 NAT 路由器后面的多个 IPsec 客户端,这些客户端都希望与同一 VPN 网关通信,如下面的网络拓扑所示

RFC 3948 提出的解决方案是将 ESP 数据包封装在 UDP 数据报中,然后允许应用端口地址转换 ,如上图所示。当在两个 IPsec 端点之间检测到 NAT 情况时,众所周知的 NAT 遍历 UDP 端口 4500 与 IKE 协议共享。检测基于 NAT_DETECTION_SOURCE_IP 以及 NAT_DETECTION_DESTINATION_IP 在 IKE_SA_INIT 交换中发送的通知,分别包含源 IP 地址哈希和目标 IP 地址哈希。

即使不存在 NAT 情况,也可以通过设置 encap = yes 对于给定的连接定义 如果启用,则 Charon 守护进程将发送一个纵的 NAT_DETECTION_SOURCE_IP 通知 payload,以便它向远程对等体看齐,就好像存在 NAT 情况一样。

2. IKEv2 NAT-T 不需要上述配置 默认即支持

IKEv2 协议在核心标准中包含 NAT 遍历 (NAT-T),但可以选择实施。strongSwan 实现了它,并且不需要任何特殊配置。IKE_SA_INIT 交换中包含的 NAT_DETECTION_SOURCE/DESTINATION_IP 通知指示对等体的 NAT-T 功能,并允许检测哪个对等体(如果有)位于 NAT 设备后面

如果检测到 NAT 情况,客户端将切换到 UDP 端口 4500 以发送 IKE_AUTH 请求(仅当它最初使用端口 500 时,请参阅下文有关自定义端口的信息),并且将为 IPsec SA 激活 UDP 封装。

参考:

  1. www.strongswan.org/testing/tes...

  2. docs.strongswan.org/docs/latest...

  3. wiki.strongswan.org/projects/1/...

相关推荐
一勺菠萝丶36 分钟前
深入浅出:Spring Boot 中 RestTemplate 的完整使用指南
java·spring boot·后端
海风极客1 小时前
《Go小技巧&易错点100例》第三十二篇
后端·spring·golang
有梦想的攻城狮1 小时前
SpEL(Spring Expression Language)使用详解
java·后端·spring·spel
caihuayuan52 小时前
前端面试2
java·大数据·spring boot·后端·课程设计
郭尘帅6662 小时前
SpringBoot学习(上) , SpringBoot项目的创建(IDEA2024版本)
spring boot·后端·学习
野犬寒鸦3 小时前
MySQL索引详解(下)(SQL性能分析,索引使用)
数据库·后端·sql·mysql
.生产的驴7 小时前
SpringBoot 集成滑块验证码AJ-Captcha行为验证码 Redis分布式 接口限流 防爬虫
java·spring boot·redis·分布式·后端·爬虫·tomcat
野犬寒鸦8 小时前
MySQL索引使用规则详解:从设计到优化的完整指南
java·数据库·后端·sql·mysql
思考的橙子8 小时前
Springboot之会话技术
java·spring boot·后端
兆。11 小时前
电子商城后台管理平台-Flask Vue项目开发
前端·vue.js·后端·python·flask