混合云网络打通实战:阿里云、腾讯云、本地机房互联
公司业务跑在三个地方:阿里云、腾讯云、自建机房。网络不通,数据同步靠人肉,运维要崩溃了。这篇分享我把三朵云打通的完整过程。
一、背景:多云的痛
我们公司的架构演变:
- 最早:全在阿里云
- 后来:核心业务迁到自建机房(省成本)
- 再后来:灾备放腾讯云(鸡蛋不放一个篮子)
结果就是:
阿里云ECS(北京)
↓ 公网
自建机房(上海)
↓ 公网
腾讯云CVM(广州)
问题来了:
-
数据同步靠公网
- MySQL主从同步延迟大
- 跨云传大文件慢得要死
-
内网服务调不了
- 阿里云的服务想调机房的接口?不行
- 要走公网绕一圈
-
运维噩梦
- 跳板机要维护三套
- 部署脚本要区分环境
- VPN经常断
理想状态:
阿里云 ←→ 自建机房 ←→ 腾讯云
192.168.1.x 192.168.2.x 192.168.3.x
↘ ↓ ↙
内网互通
二、方案对比
方案1:云厂商专线
阿里云有云企业网(CEN),腾讯云有云联网(CCN),但只能打通自家的。
跨云怎么办?拉专线。
成本:
- 阿里云到机房:专线端口费 + 带宽费 ≈ 5000元/月起
- 机房到腾讯云:再来一条 ≈ 5000元/月起
- 合计:1万元/月起步
适合: 大企业、对延迟极度敏感的场景
方案2:IPSec VPN
在各个云上部署VPN网关,互相建立IPSec隧道。
阿里云VPN网关 ←IPSec→ 机房VPN ←IPSec→ 腾讯云VPN网关
成本:
- 阿里云VPN网关:300-600元/月
- 腾讯云VPN网关:300-500元/月
- 机房软件VPN:免费(但要人维护)
- 合计:约1000元/月
问题:
- 配置复杂(证书、密钥、路由)
- 稳定性一般(断了要手动排查)
- 带宽有限(公网带宽贵)
方案3:SD-WAN
软件定义广域网,不依赖硬件专线,在各节点部署软件Agent即可。
分类:
- 商业方案:思科SD-WAN、华为SD-WAN(贵)
- 开源方案:WireGuard + 自建中继(要自己搭)
- SaaS方案:Tailscale、ZeroTier、星空组网(即开即用)
我最后选的是星空组网:
- 国内服务器,速度快
- 免费版够用(20设备)
- P2P直连,延迟低
- 5分钟部署完
三、星空组网部署实战
3.1 整体规划
| 位置 | 节点 | 虚拟IP |
|---|---|---|
| 阿里云北京 | ali-bj-01 | 192.168.188.10 |
| 阿里云北京 | ali-bj-02 | 192.168.188.11 |
| 自建机房上海 | idc-sh-01 | 192.168.188.20 |
| 自建机房上海 | idc-sh-02 | 192.168.188.21 |
| 腾讯云广州 | tx-gz-01 | 192.168.188.30 |
| 腾讯云广州 | tx-gz-02 | 192.168.188.31 |
3.2 部署步骤
所有节点执行:
# 下载安装
curl -sSL https://down.starvpn.cn/linux.sh | bash
# 登录(用同一个token)
xkcli login your_team_token
# 启动
xkcli up
# 查看状态
xkcli status
验证连通性:
# 在阿里云节点ping腾讯云节点
ping 192.168.188.30
# PING 192.168.188.30: 64 bytes, time=35ms
# ping自建机房
ping 192.168.188.20
# PING 192.168.188.20: 64 bytes, time=28ms
5分钟,三朵云打通了。
3.3 配置开机自启
# 创建systemd服务
cat > /etc/systemd/system/xknet.service << 'EOF'
[Unit]
Description=XingKong Network Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/xkcli up --daemon=false
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable xknet
systemctl start xknet
四、网络配置进阶
4.1 配置网关节点
如果想让整个子网都能互通(不是每台机器都装客户端),需要配置网关节点:
场景: 机房有100台服务器,不想每台都装客户端
方案: 选一台做网关,配置路由转发
# 在网关节点开启IP转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
# 配置NAT(让其他机器通过网关访问虚拟网络)
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o xknet0 -j MASQUERADE
其他机器配置路由:
# 访问192.168.188.0/24网段走网关
ip route add 192.168.188.0/24 via 192.168.2.1
4.2 DNS配置
让各节点能通过域名访问:
# 方案1:修改hosts文件
echo "192.168.188.10 ali-bj-01.internal" >> /etc/hosts
echo "192.168.188.20 idc-sh-01.internal" >> /etc/hosts
echo "192.168.188.30 tx-gz-01.internal" >> /etc/hosts
# 方案2:部署内部DNS服务器
# 在机房部署dnsmasq,配置各节点的解析
4.3 安全组配置
阿里云安全组:
# 允许虚拟网段访问
入方向:192.168.188.0/24 → 全部端口
出方向:全部允许
腾讯云安全组:
# 同样配置
入方向:192.168.188.0/24 → 全部端口
机房防火墙:
# firewalld放行
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.188.0/24" accept'
firewall-cmd --reload
五、实际应用场景
5.1 MySQL跨云主从同步
之前: 走公网,延迟高、不安全
阿里云MySQL(主) --公网--> 机房MySQL(从)
延迟:50-100ms
现在: 走虚拟内网
阿里云MySQL(主) --虚拟网络--> 机房MySQL(从)
延迟:25-35ms
从库配置:
CHANGE MASTER TO
MASTER_HOST='192.168.188.10', -- 使用虚拟IP
MASTER_USER='repl',
MASTER_PASSWORD='xxx',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0;
START SLAVE;
5.2 Redis跨云集群
# redis-cluster配置使用虚拟IP
redis-cli --cluster create \
192.168.188.10:6379 \
192.168.188.11:6379 \
192.168.188.20:6379 \
192.168.188.21:6379 \
192.168.188.30:6379 \
192.168.188.31:6379 \
--cluster-replicas 1
5.3 跨云服务调用
Spring Cloud配置:
# application.yml
eureka:
client:
service-url:
defaultZone: http://192.168.188.10:8761/eureka/,http://192.168.188.20:8761/eureka/
instance:
prefer-ip-address: true
ip-address: ${VIRTUAL_IP} # 使用虚拟IP注册
服务调用:
// 不用关心服务在哪朵云,直接调
@FeignClient("order-service")
public interface OrderClient {
@GetMapping("/orders/{id}")
Order getOrder(@PathVariable Long id);
}
5.4 统一运维管理
Ansible批量管理:
# inventory/hosts
[aliyun]
192.168.188.10
192.168.188.11
[idc]
192.168.188.20
192.168.188.21
[tencent]
192.168.188.30
192.168.188.31
[all:vars]
ansible_user=root
# 批量执行命令
ansible all -m shell -a "uptime"
# 批量部署
ansible-playbook deploy.yml
5.5 跨云文件传输
rsync同步:
# 机房同步到腾讯云灾备
rsync -avz --progress /data/backup/ root@192.168.188.30:/data/backup/
# 速度对比
# 走公网:20-30MB/s
# 走虚拟网络:80-100MB/s(受限于云服务器带宽)
六、网络质量测试
6.1 延迟测试
# ping测试
ping -c 100 192.168.188.30
# 结果
--- 192.168.188.30 ping statistics ---
100 packets transmitted, 100 received, 0% packet loss
rtt min/avg/max/mdev = 32.123/35.456/42.789/2.345 ms
6.2 带宽测试
# 安装iperf3
yum install -y iperf3
# 服务端(腾讯云)
iperf3 -s
# 客户端(阿里云)
iperf3 -c 192.168.188.30 -t 30
# 结果
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-30.00 sec 2.45 GBytes 702 Mbits/sec sender
6.3 稳定性监控
# 写个脚本持续监控
cat > /opt/network_monitor.sh << 'EOF'
#!/bin/bash
while true; do
for ip in 192.168.188.10 192.168.188.20 192.168.188.30; do
result=$(ping -c 1 -W 2 $ip 2>&1)
if [ $? -ne 0 ]; then
echo "$(date) - $ip 不通" >> /var/log/network_monitor.log
# 发送告警
fi
done
sleep 60
done
EOF
chmod +x /opt/network_monitor.sh
nohup /opt/network_monitor.sh &
七、故障排查
7.1 节点离线
# 检查服务状态
xkcli status
# 重启服务
systemctl restart xknet
# 查看日志
journalctl -u xknet -f
7.2 延迟突然变高
# 检查是否走中继了
xkcli peers
# 如果显示Relay,说明P2P没建立成功
# 常见原因:防火墙、NAT类型限制
# 解决:开放UDP端口,或检查安全组
7.3 某些端口不通
# 检查安全组是否放行
# 阿里云/腾讯云安全组要放行192.168.188.0/24
# 检查本地防火墙
firewall-cmd --list-all
八、成本对比
| 方案 | 月成本 | 配置复杂度 | 稳定性 | 延迟 |
|---|---|---|---|---|
| 云专线 | 1万+ | 低(但要走采购) | 高 | 最低 |
| IPSec VPN | 1000+ | 高 | 中 | 中 |
| 星空组网 | 0-300 | 低 | 高 | 低 |
我们的选择: 星空组网企业版(300元/月)
省下的钱:
- 原来阿里云VPN网关:500元/月
- 原来腾讯云VPN网关:400元/月
- 人工维护成本:无法估量
九、最佳实践
9.1 网络规划
# 建议的IP规划
192.168.188.1-50 → 阿里云
192.168.188.51-100 → 腾讯云
192.168.188.101-200 → 自建机房
192.168.188.201-254 → 预留
9.2 安全建议
- 定期更新Token
- 只开放必要端口
- 配置访问白名单
- 日志审计
9.3 高可用
# 每个位置至少部署2个节点
# 配置健康检查和自动切换
十、总结
混合云网络打通,以前是个大工程,现在简单多了:
- 评估需求:延迟敏感度、带宽需求、预算
- 选择方案:土豪上专线,穷则SD-WAN
- 逐步迁移:先打通,再把服务切过去
- 持续监控:网络质量、延迟、稳定性
SD-WAN对于我们这种中小公司来说,是性价比最高的选择。配置简单、成本低、效果好。
有问题评论区交流~

浙公网安备 33010602011771号