AI生成

适用场景:跨城市双内网环境(无公网IP),ESXi网段172.31.88.0/24,Windows网段192.168.1.0/24,通过公网域名happy.com(Ubuntu服务器)实现P2P IPsec加密互通与内网共享

前置约定:所有操作涉及的用户名/密码统一为 happy/Huawei@123,IPsec预置共享密钥为 Huawei123;操作前确保公网Ubuntu服务器可正常访问,ESXi主机已开启虚拟化功能,Windows主机具备管理员权限。

一、操作前核心网络技术原理摘要

本次搭建的核心是“P2P NAT穿透+IPsec NAT-T加密+隧道模式网段转发”,核心逻辑如下,理解后可更精准排查操作问题:

1. 核心痛点与解决方案

跨城市内网无法直连的核心是NAT地址隐藏,ESXi原生不支持通用IPsec,因此通过“公网STUN/TURN辅助穿透+ESXi侧虚拟化VPN网关+IPsec加密”解决:

  • 公网Ubuntu(happy.com):部署coturn服务,提供STUN(NAT映射地址发现)和TURN(P2P失败中继兜底)功能;
  • ESXi侧:创建Ubuntu虚拟机作为VPN网关,部署StrongSwan(IPsec服务端),替代ESXi主机实现IPsec协商与流量转发;
  • Windows侧:部署StrongSwan客户端,通过ICE框架与ESXi网关完成P2P打洞,建立IPsec隧道。

2. 关键技术核心

  • IPsec NAT-T:将无端口的ESP加密包封装到UDP 4500端口,解决IPsec穿越NAT的核心问题,是跨内网通信的关键;
  • IKEv2协议:通过4次握手快速建立安全关联(SA),协商加密算法(AES-256)和密钥,支持自动重连,适配动态网络环境;
  • 隧道模式:用新IP头封装原始内网数据包,实现172.31.88.0/24与192.168.1.0/24网段的透明互通,而非仅单点通信。

3. 数据传输路径

正常场景(P2P打洞成功):Windows业务流量 → ESP加密 → UDP 4500封装 → 本地NAT映射 → 公网P2P直连 → ESXi侧NAT解映射 → 网关VM解封装解密 → ESXi内网; 兜底场景(P2P失败):流量经公网happy.com的TURN服务中继,全程密文传输,仅增加少量延迟。

二、操作步骤全流程

模块1:公网Ubuntu服务器(happy.com)配置(STUN/TURN服务部署)

作用:为双内网节点提供NAT穿透辅助,P2P失败时作为流量中继,核心部署coturn服务。

步骤1.1 登录公网Ubuntu服务器

通过SSH登录(若本地可直连则直接操作):


ssh happy@happy.com  # 输入密码:Huawei@123

步骤1.2 安装coturn服务

更新源并安装,Ubuntu默认源已包含coturn:


sudo apt update && sudo apt install coturn -y

步骤1.3 配置coturn服务(核心)

编辑配置文件 /etc/turnserver.conf,替换为以下内容(适配happy.com域名和统一账号):


# 基础配置
listening-port=3478  # STUN/TURN默认端口(UDP/TCP)
tls-listening-port=5349  # 可选,TLS加密端口,本次暂不启用
external-ip=公网服务器实际IP  # 替换为happy.com对应的公网IP(如47.xxx.xxx.3)
realm=happy.com  # 域名标识,与后续IPsec协商一致
server-name=happy.com

# 认证配置(统一账号密码)
user=happy:Huawei@123  # 格式:用户名:密码
lt-cred-mech  # 启用用户名密码认证

# 中继配置
relay-port-min=49152  # 中继端口范围
relay-port-max=65535
min-port=49152
max-port=65535

# 其他优化
fingerprint  # 启用指纹验证
log-file=/var/log/turnserver.log  # 日志路径,便于排查问题
verbose  # 详细日志模式

步骤1.4 启动并验证coturn服务


# 启动服务并设置开机自启
sudo systemctl start coturn
sudo systemctl enable coturn

# 验证服务状态
sudo systemctl status coturn  # 显示active(running)即为正常

# 验证端口监听
sudo netstat -tulnp | grep turnserver  # 应看到3478端口监听

模块2:ESXi侧VPN网关VM配置(IPsec服务端部署)

核心逻辑:ESXi主机不直接部署IPsec,通过创建Ubuntu虚拟机作为网关,承载StrongSwan服务端功能,网关IP规划为172.31.88.10/24(网关为172.31.88.1)。

步骤2.1 在ESXi上创建VPN网关VM

  1. 登录ESXi Web管理界面,进入“虚拟机”→“创建/注册虚拟机”;
  2. 选择“创建新虚拟机”,名称设为“ESXi-IPsec-Gateway”,兼容性默认,客户机操作系统选择“Linux”→“Ubuntu 64位”;
  3. 选择存储,配置硬件:CPU 1核、内存1G、硬盘20G,网络适配器选择连接ESXi内网(172.31.88.0/24)的端口组;
  4. 挂载Ubuntu Server 22.04镜像,完成虚拟机创建并启动,安装Ubuntu系统(用户名happy,密码Huawei@123,主机名设为esxi-gateway.happy.com)。

步骤2.2 配置网关VM网络(静态IP)

编辑网络配置文件,设置静态IP 172.31.88.10/24:


sudo nano /etc/netplan/00-installer-config.yaml

替换为以下内容(注意缩进,YAML对缩进敏感):


network:
  ethernets:
    ens160:  # 网卡名称,可通过ip addr查看
      addresses:
        - 172.31.88.10/24
      gateway4: 172.31.88.1
      nameservers:
        addresses: [8.8.8.8, 114.114.114.114]
  version: 2

应用配置并验证:


sudo netplan apply
ip addr  # 确认172.31.88.10已生效
ping happy.com  # 确认可访问公网服务器

步骤2.3 开启IP转发(核心,实现网段转发)

网关VM需开启内核IP转发,才能将IPsec隧道流量转发到ESXi内网(172.31.88.0/24):


# 临时开启(重启失效)
sudo sysctl -w net.ipv4.ip_forward=1

# 永久开启(编辑sysctl配置文件)
sudo nano /etc/sysctl.conf
# 取消以下行的注释,或添加该行
net.ipv4.ip_forward=1

# 生效配置
sudo sysctl -p

步骤2.4 部署StrongSwan(IPsec服务端)

2.4.1 安装StrongSwan


sudo apt update && sudo apt install strongswan strongswan-pki -y

2.4.2 配置IPsec主配置文件(ipsec.conf)


sudo nano /etc/ipsec.conf

替换为以下内容(适配预置密钥和网段):


# 全局配置
config setup
    charondebug="all"  # 调试日志,部署完成后可改为"critical"
    uniqueids=yes  # 每个客户端使用唯一标识

# 连接配置(定义Windows客户端与本网关的连接)
conn windows-esxi-ipsec
    auto=add  # 自动加载连接,不自动发起
    keyexchange=ikev2  # 使用IKEv2协议
    ikelifetime=1h  # IKE SA有效期
    keylife=10m  # ESP SA有效期
    rekeymargin=3m  # 重协商预留时间
    keyingtries=3  # 重协商重试次数
    dpdaction=restart  # DPD检测失败后重启连接
    dpddelay=30s  # DPD检测间隔
    dpdtimeout=120s  # DPD超时时间

    # 加密算法配置
    ike=aes256-sha256-modp2048!  # IKE协商算法(AES-256加密,SHA-256认证)
    esp=aes256-sha256!  # ESP加密算法

    # 身份与认证(预置共享密钥)
    left=%any  # 服务端监听所有网卡
    leftid=esxi-gateway.happy.com  # 服务端身份标识(与主机名一致)
    leftsubnet=172.31.88.0/24  # 服务端侧共享网段(ESXi内网)
    leftfirewall=yes  # 自动配置防火墙规则

    right=%any  # 客户端IP任意(动态)
    rightid=%any  # 客户端身份任意
    rightsubnet=192.168.1.0/24  # 客户端侧共享网段(Windows内网)
    rightauth=psk  # 客户端使用预共享密钥认证
    leftauth=psk  # 服务端使用预共享密钥认证

    # NAT-T配置(强制启用,解决跨NAT问题)
    nat_traversal=yes
    forceencaps=yes  # 强制封装ESP到UDP 4500
    leftprotoport=udp/4500
    rightprotoport=udp/4500

2.4.3 配置预共享密钥(ipsec.secrets)


sudo nano /etc/ipsec.secrets

添加以下内容(统一预置密钥Huawei123):


# 格式:服务端身份 客户端身份 : PSK "共享密钥"
esxi-gateway.happy.com %any : PSK "Huawei123"

2.4.4 启动并验证StrongSwan服务


# 重启服务并设置开机自启
sudo systemctl restart strongswan-starter
sudo systemctl enable strongswan-starter

# 验证服务状态
sudo systemctl status strongswan-starter  # 显示active(running)即为正常

# 查看IPsec连接状态(此时无客户端连接,应为空)
sudo ipsec statusall

模块3:Windows客户端配置(IPsec客户端部署)

核心:部署StrongSwan Windows客户端,配置IPsec连接参数,与ESXi侧网关建立P2P隧道。

步骤3.1 安装StrongSwan Windows客户端

  1. 下载StrongSwan Windows客户端:https://download.strongswan.org/Windows/,选择最新稳定版(如strongswan-5.9.10-Win64.msi);
  2. 双击安装,默认下一步即可,安装完成后启动StrongSwan客户端(桌面快捷方式)。

步骤3.2 配置IPsec连接

  1. 打开StrongSwan客户端,点击“添加”按钮,进入连接配置界面;

  2. 配置基本信息:

    • 名称:自定义(如ESXi-IPsec-Tunnel);
    • 网关:happy.com(公网服务器域名,实际会通过STUN发现ESXi网关的NAT映射地址);
    • 类型:IKEv2(预共享密钥);
  3. 配置身份认证:

    • 预共享密钥:Huawei123(与服务端一致);
    • 客户端ID:可自定义(如windows-client.happy.com),也可留空;
  4. 配置网络设置(关键,实现网段共享):

    • 远程网络:172.31.88.0/24(ESXi侧共享网段);
    • 本地网络:192.168.1.0/24(Windows侧共享网段);
    • DNS:可选,填写8.8.8.8或ESXi内网DNS;
  5. 高级设置(NAT-T优化):

    • IKE端口:4500(UDP);
    • ESP端口:4500(UDP);
    • 启用NAT-T:勾选(默认已勾选);
    • STUN服务器:happy.com:3478(公网STUN服务地址);
  6. 点击“保存”,完成连接配置。

步骤3.3 建立IPsec隧道并验证

  1. 在StrongSwan客户端,选中配置好的连接,点击“连接”,等待连接成功(状态栏显示“已连接”);
  2. 本地验证(Windows命令行): `# 查看路由表,确认172.31.88.0/24的路由指向IPsec隧道 route print | findstr “172.31.88”

ping ESXi侧网关VM的IP,验证连通性

ping 172.31.88.10

ping ESXi侧其他内网节点(如172.31.88.20),验证网段共享

ping 172.31.88.20`

  1. 服务端验证(ESXi网关VM命令行): `# 查看IPsec连接状态,应显示已建立的连接 sudo ipsec statusall

查看隧道流量,确认有收发数据

sudo ipsec trafficstatus`

三、关键验证与问题排查

1. 核心验证点

  • 连通性:Windows可ping通172.31.88.10(ESXi网关)和172.31.88.0/24其他节点;ESXi侧节点可ping通192.168.1.0/24节点;
  • 隧道状态:StrongSwan客户端显示“已连接”,ESXi网关执行 ipsec statusall可见“ESTABLISHED”状态;
  • 流量加密:通过Wireshark抓包(公网链路),仅能看到UDP 3478/4500的密文流量,无法解析原始业务数据。

2. 常见问题排查

  • 连接失败,提示“无法找到网关”:

    • 检查happy.com域名是否可解析(Windows执行 nslookup happy.com);
    • 检查公网服务器3478/4500端口是否开放(可通过 telnet happy.com 3478验证,UDP可使用nc工具)。
  • 连接成功但无法ping通对方网段:

    • 检查ESXi网关VM的IP转发是否开启(sysctl net.ipv4.ip_forward,返回1即为开启);
    • 检查Windows防火墙是否放行ICMP(ping)流量;
    • 检查IPsec配置中的leftsubnet/rightsubnet是否与实际网段一致。
  • 连接频繁断开:

    • 检查DPD配置(ipsec.conf中的dpddelay/dpdtimeout),可适当增大超时时间;
    • 检查公网网络稳定性,若为对称NAT,可能因P2P打洞失败导致频繁切换中继,可查看coturn日志(/var/log/turnserver.log)。

四、注意事项

  • 密钥安全:预置共享密钥Huawei123仅为示例,生产环境建议使用更复杂密钥,并定期更换;
  • ESXi资源预留:VPN网关VM仅需1核1G资源,避免占用过多ESXi主机资源影响其他虚拟机;
  • 端口放行:确保公网服务器、ESXi侧NAT设备、Windows侧NAT设备放行UDP 3478(STUN/TURN)和UDP 4500(IPsec NAT-T)端口;
  • 日志排查:遇到问题时,优先查看coturn日志(/var/log/turnserver.log)和StrongSwan日志(/var/log/strongswan/charon.log);
  • 性能优化:若需传输大文件,建议确认P2P打洞成功(可通过coturn日志查看),避免TURN中继带来的带宽损耗。

总结

本方案通过“公网STUN/TURN辅助+ESXi虚拟化网关+IKEv2 IPsec”的组合,完美解决了跨城市双内网无公网IP的互通问题。核心操作聚焦于三个模块:公网coturn服务部署、ESXi侧VPN网关配置、Windows客户端连接设置,只要严格遵循步骤并保证参数一致,即可实现172.31.88.0/24与192.168.1.0/24网段的加密共享。