多个拨号隧道使用相同 IP 池
多个拨号隧道使用相同 IP 池
问题描述
当多个拨号(dial-up)IPsec 隧道配置了相同的 IP 地址池时,即使每个隧道配置了不同的用户组,同一时间也只能有一个 VPN 用户保持连接。第一个连接的 VPN 用户会在第二个用户连接后立即被断开。
原因分析
这是 FortiOS 的设计行为:相同的 IP 池不能在 FortiGate 上的多个 IPsec 隧道中同时使用。
如果在不同的拨号 IPsec 隧道上配置了相同的 IP 池,如下所示:
config vpn ipsec phase1-interface
edit <tunnel_A>
set type dynamic
set authusrgrp <group_A>
set ipv4-start-ip 10.180.1.1
set ipv4-end-ip 10.180.1.10
next
edit <tunnel_B>
set type dynamic
set authusrgrp <group_B>
set ipv4-start-ip 10.180.1.1
set ipv4-end-ip 10.180.1.10
next
end在 IKE 协商过程中,IKE 守护进程会根据 phase1 中配置的用户组将 IPsec 隧道映射到用户。用户认证成功后,IP 池中第一个可用的 IP 会被分配给该用户。当第二个用户连接 VPN 并认证成功后,IKE 守护进程会尝试将该隧道 IP 池中的第一个 IP 分配给第二个用户,此时会释放第一个已连接 VPN 用户的 IP 地址。
结果就是:第一个已连接的 VPN 用户被断开,第二个 VPN 用户成功连接。
问题配置举例
以下配置示例使用两个不同的用户组(本地用户和 LDAP 组),debug 输出展示了当两个隧道配置相同 IP 池时,第一个 VPN 用户在第二个用户连接后被断开的过程。
配置用户组
为每个拨号 IPsec 隧道配置不同的用户组:
config user local
edit "tester"
set type password
set passwd *****
next
end
config user group
edit "ldap.users"
set member "fortiserver.ldap" "zilan"
config match
edit 1
set server-name "fortiserver.ldap"
set group-name "CN=ldap.group,DC=fortiserver,DC=com"
next
end
next
edit "local.users"
set member "tester"
next
end配置拨号 IPsec 隧道
为不同用户组配置两个拨号 IPsec 隧道(phase1 和 phase2):
config vpn ipsec phase1-interface
edit "fct.1"
set type dynamic
set interface "port4"
set mode aggressive
set mode-cfg enable
set proposal aes128-sha256 aes256-sha256
set xauthtype auto
set authusrgrp "local.users" # ← 本地用户组
set ipv4-start-ip 10.180.1.1
set ipv4-end-ip 10.180.1.10
set psksecret ENC *****
next
edit "fct.2"
set type dynamic
set interface "port4"
set mode aggressive
set mode-cfg enable
set proposal aes128-sha1 aes256-sha1
set xauthtype auto
set authusrgrp "ldap.users" # ← LDAP 用户组
set ipv4-start-ip 10.180.1.1
set ipv4-end-ip 10.180.1.10
set psksecret ENC *****
next
end
config vpn ipsec phase2-interface
edit "fct.1"
set phase1name "fct.1"
set proposal aes128-sha256
set dhgrp 2
next
edit "fct.2"
set phase1name "fct.2"
set proposal aes128-sha256
set dhgrp 5
next
endDebug 分析
第一个用户连接:本地用户 tester 连接 VPN,IKE 守护进程从 IP 池中分配第一个 IP 10.180.1.1:
2025-06-30 13:59:39.847399 ike V=root:0:fct.1:1720: add route 10.180.1.1/255.255.255.255 gw 10.180.1.1 oif fct.1(1364) metric 15 priority 1
2025-06-30 13:59:39.849412 ike V=root:0:fct.1_0:1065:fct:1720: tunnel 1 of VDOM limit 0/0
2025-06-30 13:59:39.850493 ike V=root:0:fct.1_0:1065:fct:1720: add IPsec SA: SPIs=14b059d8/08b06a3f通过 diagnose vpn ike gateway list 确认用户 tester 已连接并被分配 IP 10.180.1.1:
# diagnose vpn ike gateway list
vd: root/0
name: fct.1_0
...
xauth-user: tester # ← 本地用户
assigned IPv4 address: 10.180.1.1/255.255.255.255 # ← 分配的 IP
...第二个用户连接:LDAP 用户 zilan 连接 VPN 后,IKE 守护进程将路由从 fct.1 移动到 fct.2,释放第一个用户的 IP 并重新分配给第二个用户:
2025-06-30 13:59:54.415801 ike V=root:0:fct.1:1720: moving route 10.180.1.1/255.255.255.255 oif fct.1(1364) metric 15 priority 1 to 0:fct.2:1727
# ↑ 将路由从 fct.1 移动到 fct.2
2025-06-30 13:59:54.417456 ike V=fct.1:0:fct.1:1720: del route 10.180.1.1/255.255.255.255 tunnel 10.180.1.1 oif fct.1(1364) metric 15 priority 1
# ↑ 删除 fct.1 的路由
2025-06-30 13:59:54.419296 ike V=root:0:fct.1_0: going to be deleted
# ↑ fct.1 隧道准备删除
2025-06-30 13:59:54.423117 ike V=root:0:fct.1_0: deleting IPsec SA with SPI 08b06a3f
# ↑ 删除 fct.1 的 IPsec SA
2025-06-30 13:59:54.464700 ike V=root:0:fct.1_0: mode-cfg release 10.180.1.1/255.255.255.255
# ↑ 释放第一个用户的 IP 地址
2025-06-30 13:59:54.466634 ike V=root:0:fct.2:1727: add route 10.180.1.1/255.255.255.255 gw 10.0.0.12 oif fct.2(1362) metric 15 priority 1
# ↑ 为第二个用户在 fct.2 上添加路由通过 diagnose vpn ike gateway list 确认用户 zilan 已连接并使用了同一个 IP 10.180.1.1:
# diagnose vpn ike gateway list
vd: root/0
name: fct.2_0
...
xauth-user: zilan # ← LDAP 用户
assigned IPv4 address: 10.180.1.1/255.255.255.255 # ← 使用了同一个 IP
...解决方法
为每个拨号 IPsec 隧道配置不同的、不重叠的 IP 地址池:
config vpn ipsec phase1-interface
edit "fct.1"
set type dynamic
set authusrgrp "local.users"
set ipv4-start-ip 10.180.1.1
set ipv4-end-ip 10.180.1.10 # ← IP 池 1:10.180.1.1 - 10.180.1.10
next
edit "fct.2"
set type dynamic
set authusrgrp "ldap.users"
set ipv4-start-ip 10.180.2.1
set ipv4-end-ip 10.180.2.10 # ← IP 池 2:10.180.2.1 - 10.180.2.10
next
end