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/...

相关推荐
㳺三才人子6 小时前
初探 Flask
后端·python·flask·html
星栈独行6 小时前
我在 Rust 全栈项目里用 JWT 做无状态认证
开发语言·后端·rust·前端框架·开源·github·web
Java爱好狂.7 小时前
Java程序员体系化学习路线(2026最新版)
java·后端·java面试·java架构师·java程序员·java八股文·java学习路线
陈随易7 小时前
Redis 8.8发布,一定要更新
前端·后端·程序员
装不满的克莱因瓶7 小时前
SpringBoot 如何将 lib 目录中jar包打包进最终的jar包里面
spring boot·后端·maven·jar·mvn
ltl8 小时前
Transformer 原论文实验结果:为什么 28.4 BLEU 足以改写路线图
后端
excel8 小时前
为什么我推荐使用 Termius:现代 SSH 工具的完整体验
前端·后端
卷毛的技术笔记9 小时前
Java后端硬核实战:用Spring AI Alibaba+Redis给LLM装上“超强记忆中枢”
java·人工智能·redis·后端·spring·ai·系统架构
IT_陈寒10 小时前
Java的Optional差点让我掉坑里,这几个坑你别踩
前端·人工智能·后端
子兮曰10 小时前
Harness 驾驭工程深度教程:从 AGENTS.md 到全链路 AI 编码基础设施
前端·后端·ai编程