是的,在 IPsec IKE 的上下文中,客户端 和服务端 都会使用 UDP 500 和 UDP 4500 端口。具体情况如下:
-
UDP 500:
- 在 IKE 的第一阶段和第二阶段的初始协商过程中,客户端和服务端都分别使用 UDP 500 端口进行通信。
- 这主要用于建立 IKE 协商,交换加密算法、身份验证及其他参数。
-
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 的常见端口。让我们逐一分析这些端口及其使用场景:
-
UDP 68:
- 启动进程为
charon-systemd
,这是用来接收 DHCP(Dynamic Host Configuration Protocol)请求的端口,通常用于获取 IP 地址,是与 VPN 不直接相关的。
- 启动进程为
-
UDP 500:
- 这是 IKE 的标准端口,用于 IKE 协商的第一阶段。这一阶段涉及到加密参数、身份验证和建立安全关联(SA)的交换。所有的 IPsec VPN 客户端和服务器都需要通过此端口进行通信。
-
UDP 4500:
- 这是 NAT-T(NAT Traversal)使用的端口。当 VPN 客户端位于 NAT 设备后时,UDP 4500 端口被用来封装 IKE 和 IPsec 数据包,以确保它们可以顺利通过 NAT。使用此端口时,UDP 数据包会被封装在 UDP 数据包中,使网络地址转换能够正常工作。
-
[::]: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 封装。