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
- 登录ESXi Web管理界面,进入“虚拟机”→“创建/注册虚拟机”;
- 选择“创建新虚拟机”,名称设为“ESXi-IPsec-Gateway”,兼容性默认,客户机操作系统选择“Linux”→“Ubuntu 64位”;
- 选择存储,配置硬件:CPU 1核、内存1G、硬盘20G,网络适配器选择连接ESXi内网(172.31.88.0/24)的端口组;
- 挂载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客户端
- 下载StrongSwan Windows客户端:https://download.strongswan.org/Windows/,选择最新稳定版(如strongswan-5.9.10-Win64.msi);
- 双击安装,默认下一步即可,安装完成后启动StrongSwan客户端(桌面快捷方式)。
步骤3.2 配置IPsec连接
打开StrongSwan客户端,点击“添加”按钮,进入连接配置界面;
配置基本信息:
- 名称:自定义(如ESXi-IPsec-Tunnel);
- 网关:happy.com(公网服务器域名,实际会通过STUN发现ESXi网关的NAT映射地址);
- 类型:IKEv2(预共享密钥);
配置身份认证:
- 预共享密钥:Huawei123(与服务端一致);
- 客户端ID:可自定义(如windows-client.happy.com),也可留空;
配置网络设置(关键,实现网段共享):
- 远程网络:172.31.88.0/24(ESXi侧共享网段);
- 本地网络:192.168.1.0/24(Windows侧共享网段);
- DNS:可选,填写8.8.8.8或ESXi内网DNS;
高级设置(NAT-T优化):
- IKE端口:4500(UDP);
- ESP端口:4500(UDP);
- 启用NAT-T:勾选(默认已勾选);
- STUN服务器:happy.com:3478(公网STUN服务地址);
点击“保存”,完成连接配置。
步骤3.3 建立IPsec隧道并验证
- 在StrongSwan客户端,选中配置好的连接,点击“连接”,等待连接成功(状态栏显示“已连接”);
- 本地验证(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`
- 服务端验证(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工具)。
- 检查happy.com域名是否可解析(Windows执行
连接成功但无法ping通对方网段:
- 检查ESXi网关VM的IP转发是否开启(
sysctl net.ipv4.ip_forward,返回1即为开启); - 检查Windows防火墙是否放行ICMP(ping)流量;
- 检查IPsec配置中的leftsubnet/rightsubnet是否与实际网段一致。
- 检查ESXi网关VM的IP转发是否开启(
连接频繁断开:
- 检查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网段的加密共享。