基于 TCP 的 FortiClient 拨号
基于 TCP 的 FortiClient 拨号
重要
- 该功能在 FortiOS 7.4.2、7.6.0 及以上版本支持。
- 该功能要求 FortiClient 版本≥7.4.1。
- 该功能仅支持 IKEv2。
- 使用基于 TCP 的 FortiClient IPSec 拨号模式,FortiGate 暂不支持 ESP 流量的 NP 加速(但可以被 CP 芯片加速)。
- 在 FortiClient 7.4.4 及以后版本中,FortiClient VPN only 版本(免费)将不再支持此功能,FortiClient ZTNA 版本(需要 EMS License)仍然支持此功能。
功能介绍
传统拨号 IPsec VPN 流量使用 UDP 或 ESP 协议,在 FortiOS 7.4.3、7.6.0 及以上版本可以通过 TCP 运行。出于以下考量,我们推荐将 FortiClient 拨号模式的 SSL VPN/IPSec over UDP 逐渐迁移至 IPSec over TCP。
- 从 FortiOS 7.6.3 开始,FortiGate 在所有型号上移除了 SSL VPN Tunnel 模式,需要使用 IPSec VPN 拨号模式替代 SSL VPN 的 Tunnel 模式(详情参考:VPN 技术 → SSL_VPN → 开启 SSL VPN 中的“SSL VPN 移除情况”部分)。
- 在高延迟或拥塞的网络中,基于 UDP 的 IPSec VPN 连接可能会出现数据包丢失或性能下降。TCP 具有错误检测和重传机制,可提高 IPSec VPN 连接在此类环境中的可靠性和稳定性。
- 部分运营商可能对 UDP 500/4500、ESP 流量实施策略性限速(如降低 QoS 优先级或设置带宽阈值)或阻断,尤其在高峰时段或跨境链路上。通过将 IPSec VPN 切换至 TCP 传输,可规避此类 UDP 限速策略,利用 TCP 的标准化流量特征获得更稳定的带宽分配,从而保障 VPN 隧道的吞吐量。
网络拓扑

- FortiGate-601F(NP7)配置基于 TCP 的 IKEv2 拨号 IPsec 服务器,自定义 TCP 端口为 4443。
- IKEv2 使用 EAP 进行用户身份验证。
- 客户端使用 FortiClient 7.4.3 版本,配置 TCP 目标端口 4443 连接 FortiGate 的 IPsec。
基础配置
用户配置
创建用于 IPSec 拨号认证的用户和用户组。
config user local edit "user1" set type password set passwd 1q2w3e4r next edit "user2" set type password set passwd 1q2w3e4r next end config user group edit "VPN" set member "user1" "user2" next end配置用于隧道分割的地址对象,可以配置多个。
config firewall address edit "192.168.90.0/24" set subnet 192.168.90.0 255.255.255.0 next end
指定基于 TCP 的 IPSec 端口
指定基于 TCP 的 IPSec VPN 使用的端口(
ike-tcp-port),这里配置为 TCP 4443。重要
- 默认
ike-tcp-port配置:- FortiOS 7.4:4500。
- FortiOS 7.6:443。
- 修改
ike-tcp-port选项是基于当前 VDOM 生效的,该 VDOM 内所有基于 TCP 的 IPSec 连接都将使用指定端口封装 IKE 协商包和 IPSec ESP 报文。若需同时支持其他使用不同 TCP 端口的 IPSec 连接(如与其他 FortiGate 之间),建议通过新建 VDOM 实现。 - 修改
ike-tcp-port选项不会影响基于 UDP 的 IPSec 连接端口(ike-port,默认 500)。
config system settings set ike-tcp-port 4443 end- 默认
如果使用 TCP 443 端口,可能会与 FortiGate 的 HTTPS 管理端口或 SSL VPN 端口冲突,需要修改 HTTPS 管理端口/SSL VPN 为其他端口,IPSec 的 TCP 443 端口才能生效。
HTTPS管理端口: config system global set admin-sport <port> end SSL VPN端口: config vpn ssl settings set port <port> end
FortiGate IPSec 配置
重要
通过 GUI 的配置步骤基于 FortiOS 7.6.3,如果是 7.4.X 版本,请参考通过 CLI 命令配置的部分。
通过 GUI 配置(FortiOS 7.6)
在 FortiGate 进入“VPN → VPN 隧道”页面,点击“新建”按钮,选择“来自模板的 IPSec 隧道”。

在弹出的“VPN 向导”中,填写隧道名称,模板选择“远程访问”类型,然后点击“开始”按钮。

在“VPN 隧道”页面填写“预共享密钥”,传输模式选择“TCP 封装”,用户身份验证方法选择“阶段 1 接口”,选择已创建的 VPN 用户组,其他保持默认,点击“下一个”按钮。
重要
可选配置:
- 传输:
- TCP 封装:强制使用 TCP 封装 IKE 协商报文与 IPSec ESP 报文,TCP 端口会使用已配置的
ike-tcp-port。 - 自动:优先使用 UDP 封装 IKE 协商报文,如果 UDP 连接超时(默认超时时间为 15s)。
- TCP 封装:强制使用 TCP 封装 IKE 协商报文与 IPSec ESP 报文,TCP 端口会使用已配置的
- 使用 Fortinet 封装:
- 开启:使用 Fake TCP 头部封装 ESP(RFC8229),仅适用于 FortiGate 之间建立的 IPSec。
- 关闭:使用标准 TCP 头部封装 ESP(RFC9293),使用 FortiClient 连接时,一定要关闭此选项。
- 用户身份验证方法:
- 阶段 1 接口:在 IPSec 阶段 1 配置中手动选择需要认证的用户组,只能选择一个用户组。
- 从策略继承:在 IPSec 相关的防火墙策略中指定需要认证的用户组,适用于有多个用户组的情况。
- DNS 服务器:
- 使用系统 DNS:分配系统配置的 DNS 服务器给 FortiClient。
- 指定:手工指定给 FortiClient 分配的 DNS 服务器。 :::

- 传输:
在“远程端点”页面填写给 FortiClient 分配的地址池,关闭“EMS SN 验证”,点击“下一个”按钮。

在“本地 FortiGate”页面选择用于接入 IPSec 连接的接口 port6,IPSec 拨号访问的目的接口 port7,“本地地址”选择需要隧道分离的地址对象“192.168.90.0/24”(可选多个),点击“下一个”按钮。

Comment 页面提示会自动下发的地址对象(分配的地址池)、地址组(包含隧道分割的地址对象)、策略(远程到本地放通)的名称,可以点右侧的笔修改名称。

IPSec VPN 连接创建完成。

查看通过向导自动创建的地址和地址组对象。
地址(分配的IP地址池): config firewall address edit "TCP_Dialup_range" set type iprange set comment "VPN: TCP_Dialup -- Created by VPN wizard" set start-ip 10.100.1.100 set end-ip 10.100.1.200 next end 地址组(隧道分割网段): config firewall addrgrp edit "TCP_Dialup_split" set member "192.168.90.0/24" set comment "VPN: TCP_Dialup -- Created by VPN wizard" next end查看通过向导创建的 IPSec 隧道一阶段和二阶段 CLI 配置。
config vpn ipsec phase1-interface edit "TCP_Dialup" set type dynamic set interface "port6" set ike-version 2 set peertype any set net-device disable set mode-cfg enable set proposal aes128-sha256 aes256-sha256 aes128gcm-prfsha256 aes256gcm-prfsha384 chacha20poly1305-prfsha256 set comments "VPN: TCP_Dialup -- Created by VPN wizard" set dhgrp 20 21 set eap enable set eap-identity send-request set wizard-type dialup-forticlient set authusrgrp "VPN" set transport tcp set ipv4-start-ip 10.100.1.100 set ipv4-end-ip 10.100.1.200 set dns-mode auto set ipv4-split-include "TCP_Dialup_split" set save-password enable set psksecret ENC iEMCQpp6y6RY3YqsG30txAPygrAppFQYI9fCj5fb/3SVQKJv4rQ4AkexsTC+z3KnXxUpDygDUCc8znjJQnx06jI0CKMHOR++uVgfEOAoMwwfnNQCHrCBO+I479zBKhDC11kWOGp7IfOX2vWEsZ4LH/MXIuP+vzvD70RqPthkGGz+bnKMgjsr0fkVUwUghtV6PryzeFlmMjY3dkVA next end config vpn ipsec phase2-interface edit "TCP_Dialup" set phase1name "TCP_Dialup" set proposal aes128-sha1 aes256-sha1 aes128-sha256 aes256-sha256 aes128gcm aes256gcm chacha20poly1305 set dhgrp 20 21 set comments "VPN: TCP_Dialup -- Created by VPN wizard" next end查看通过向导自动创建的防火墙策略,默认开启 SNAT,可根据实际需求调整配置。
config firewall policy
edit 22
set name "vpn_TCP_Dialup_local_allow"
set srcintf "TCP_Dialup"
set dstintf "prot7"
set action accept
set srcaddr "TCP_Dialup_range"
set dstaddr "192.168.90.0/24"
set schedule "always"
set service "ALL"
set nat enable
set comments "VPN: TCP_Dialup -- Created by VPN wizard"
next
end通过 CLI 配置(FortiOS 7.4)
创建用于分配 IP 的地址对象和用于隧道分割的地址组对象。
地址(分配的IP地址池): config firewall address edit "TCP_Dialup_range" set type iprange set start-ip 10.100.1.100 set end-ip 10.100.1.200 next end 地址组(隧道分割网段): config firewall address edit "192.168.90.0/24" set subnet 192.168.90.0 255.255.255.0 next end config firewall addrgrp edit "TCP_Dialup_split" set member "192.168.90.0/24" next end配置 IPSec VPN 一阶段。
type:dynamic,拨号模式。interface:port6,选择用于接入 IPSec 连接的接口。ike-verison:2,只有 IKEv2 支持基于 TCP 的 IPSec 模式。mode-cfg:enable,开启为客户端分配 IP 和 DNS 功能。proposal/dhgrp:一阶段安全提议,与 FortiClient 配置一致即可。eap:enable,IKEv2 客户端认证使用 EAP 模式。authusrgrp:VPN,认证使用已创建的 VPN 用户组。transport:tcp,使用 TCP 封装 IKE 协商报文和 ESP 报文。ipv4-start-ip/ipv4-end-ip:为 FortiClient 分配 IP 的地址池。dns-mode:auto,使用系统 DNS 分配给 FortiClient。ipv4-split-include:选择需要隧道分离的地址组对象“TCP_Dialup_split”,这里既可以选择地址组,也可以选择地址对象,但只能选择一个,所以这里以地址组为例,可以包含多个地址对象。save-password:enable,允许 FortiClient 保存密码。psksecret:预共享密钥。
config