FortiGate与StrongSwan IPsec VPN隧道实现互联互通

如何利用 IPsec VPN 技术,在 FortiGate防火墙 与 StrongSwan 开源IPsec工具之间建立稳定且安全的互联互通隧道。IPsec VPN作为一种成熟可靠的加密隧道技术,广泛应用于连接不同的分支机构或云环境,确保跨网络通信的安全。实现两端网络的加密通信。

拓扑概述

在开始配置之前,请确保您对IPsec VPN的基本概念有一定了解。本文的配置基于以下假设:

  • FortiGate 端:公网IP为 10.10.20.1,内部网络为 192.168.1.0/24
  • StrongSwan 端:公网IP为 10.10.10.1,内部网络为 192.168.2.0/24
  • 预共享密钥 (PSK)qixinlee.com

我们的目标是建立一个IPsec隧道,使 192.168.1.0/24192.168.2.0/24 两个子网能够相互通信。

StrongSwan配置步骤

StrongSwan是一款功能强大的开源IPsec实现,常用于Linux系统。以下是详细的配置步骤:

1. 系统准备与安装

首先更新系统并安装StrongSwan:

apt update
apt install strongswan -y

2. 启用IP转发

为了让StrongSwan服务器能够转发来自VPN隧道的数据包,您需要启用IPv4转发:

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sysctl -p

运行sysctl -p是为了立即应用配置,无需重启系统。

3. 配置防火墙(UFW)

如果您的StrongSwan服务器启用了UFW防火墙,需要允许IPsec相关的流量通过:

ufw allow 500/udp   # IKE(Internet Key Exchange)端口
ufw allow 4500/udp  # NAT-T(NAT Traversal)端口
ufw allow proto esp from any to any # 允许ESP协议
ufw allow proto ah from any to any  # 允许AH协议(如果使用)

注意: 在调试阶段,您可以临时禁用UFW (ufw disable) 以排除防火墙引起的问题,但在生产环境中务必重新启用并配置正确的规则。

4. 配置预共享密钥

编辑 /etc/ipsec.secrets 文件,添加FortiGate的公网IP、StrongSwan的公网IP和预共享密钥:

vim /etc/ipsec.secrets
10.10.10.1 10.10.20.1 : PSK "qixinlee.com"

重要提示: 密钥应使用强密码,并妥善保管。

5. 配置IPsec连接

编辑 /etc/ipsec.conf 文件,定义IPsec连接的详细参数:

vim /etc/ipsec.conf
config setup
    charondebug="ike 2, knl 2, cfg 2, net 2"

conn fortigate-cloud-vpn
    auto=start # StrongSwan启动时自动建立连接
    keyexchange=ikev2 # 使用IKEv2协议,更安全高效
    ike=aes256-sha256-modp2048! # 阶段1加密算法:AES256, 完整性算法:SHA256, DH组:MODP2048 (Group 14)
    esp=aes256-sha256! # 阶段2加密算法:AES256, 完整性算法:SHA256
    ikelifetime=8h # 阶段1密钥生存周期
    lifetime=1h # 阶段2密钥生存周期
    dpddelay=30 # DPD检测间隔
    dpdtimeout=120 # DPD超时时间
    dpdaction=restart # DPD超时后重启隧道
    authby=secret # 认证方式为预共享密钥

    left=%defaultroute # StrongSwan的本地IP使用默认路由接口IP
    leftid=10.10.10.1 # StrongSwan的本地ID,应与FortiGate配置的远端ID匹配
    leftsubnet=192.168.2.0/24 # StrongSwan本地网络的子网

    right=10.10.20.1 # FortiGate的对端公网IP
    rightid=10.10.20.1 # FortiGate的对端ID,应与FortiGate配置的本地ID匹配
    rightsubnet=192.168.1.0/24 # FortiGate远程网络的子网

6. 重启IPsec服务并检查状态

保存 ipsec.conf 文件后,重启StrongSwan服务并检查隧道状态:

ipsec down fortigate-cloud-vpn # 如果连接已存在,先关闭
ipsec restart # 重启StrongSwan服务
ipsec up fortigate-cloud-vpn # 尝试建立连接
ipsec status # 查看IPsec隧道状态

您应该能看到隧道建立成功的相关信息。

FortiGate配置步骤

FortiGate防火墙的配置通常通过图形界面完成,以下将列出关键配置项:

1. 网络配置(FortiGate VPN阶段1通用设置)

  • IP版本: IPv4
  • 远端网关: 静态IP地址,填写StrongSwan的公网IP 10.10.10.1
  • 接口: 填写 FortiGate 出口到公网的网卡(例如 wan1
  • NAT穿越: 启用
  • 保持存活: 10 秒
  • 对等体状态探测(DPD): 按需
  • DPD重试计数: 4
  • DPD重试间隔: 30 秒

2. 认证(FortiGate VPN阶段1认证设置)

  • 方法: 预共享密钥
  • 预共享密钥: qixinlee.com
  • IKE版本: 2

3. VPN阶段1(Phase 1)配置

阶段1定义了ISAKMP(Internet Security Association and Key Management Protocol)的安全参数:

  • 加密算法: AES256
  • 认证算法: SHA256
  • Diffie-Hellman组: 组 14 (与StrongSwan的 modp2048 对应)
  • 密钥生存时间 (秒): 28800 (8小时,与StrongSwan的 ikelifetime 对应)
  • 本地ID: 10.10.20.1 (FortiGate的公网IP)。这个ID与StrongSwan的 rightid 对应。

4. VPN阶段2(Phase 2)配置

阶段2定义了IPsec隧道的安全参数:

  • 本地地址: 子网 192.168.1.0/24
  • 对端地址: 子网 192.168.2.0/24
  • 加密算法: AES256
  • 认证算法: SHA256
  • Diffie-Hellman组: 组 14 (与StrongSwan的 modp2048 对应)
  • 启用重放检测: 启用
  • PFS (Perfect Forward Secrecy): 启用
  • 本地端口: 全部
  • 对端端口: 全部
  • 协议: 全部
  • 密钥周期 (秒/kb): 3600 秒 (1小时,与StrongSwan的 lifetime 对应)

5. 隧道接口与策略路由

建立IPsec隧道后,您需要配置相应的策略路由和防火墙策略,以允许流量通过隧道:

  • 创建IPsec隧道接口: 在FortiGate中,您需要创建一个虚拟IPsec隧道接口,例如 VPN_to_StrongSwan
  • 策略路由:
    • FG_to_VPN (FortiGate到VPN):
      • 源接口: 内部网络接口 (例如 lan)。
      • 源地址: 192.168.1.0/24
      • 目的接口: VPN_to_StrongSwan 隧道接口。
      • 目的地址: 192.168.2.0/24
      • 动作: 接受 (ACCEPT)。
      • NAT: 不启用 NAT。
    • VPN_to_FG (VPN到FortiGate):
      • 源接口: VPN_to_StrongSwan 隧道接口。
      • 源地址: 192.168.2.0/24
      • 目的接口: 内部网络接口 (例如 lan)。
      • 目的地址: 192.168.1.0/24
      • 动作: 接受 (ACCEPT)。
      • NAT: 不启用 NAT。

验证与故障排除

配置完成后,请务必进行验证:

  1. 检查IPsec状态: 在StrongSwan端运行 ipsec status,在FortiGate端查看VPN监控界面。
  2. Ping测试: 从StrongSwan内部网络的主机Ping FortiGate内部网络的主机,反之亦然。
  3. 抓包分析: 如果通信不畅,可以使用tcpdump (StrongSwan) 或 FortiGate的诊断工具进行抓包分析,查看是否有加密和解密的数据包。
  4. 日志分析: 检查FortiGate和StrongSwan的系统日志,寻找任何错误或警告信息。StrongSwan的 charondebug 参数可以帮助提供详细的IKE日志。

常见问题与排查思路:

  • 预共享密钥不匹配: 确保两端的PSK完全一致。
  • IKE/ESP参数不匹配: 加密算法、认证算法、DH组、密钥生存周期等参数必须严格一致。
  • NAT穿越问题: 如果任何一端位于NAT设备后面,确保端口 500/udp4500/udp 已正确转发。
  • 防火墙规则: 确保两端防火墙都允许IPsec流量(UDP 500, UDP 4500, ESP协议)。
  • 子网定义错误: 确保 leftsubnetrightsubnet 定义正确,且与实际网络匹配。
  • 路由问题: 检查路由表,确保流量被正确地送入IPsec隧道。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注