混合云网络打通实战:阿里云、腾讯云、本地机房互联

公司业务跑在三个地方:阿里云、腾讯云、自建机房。网络不通,数据同步靠人肉,运维要崩溃了。这篇分享我把三朵云打通的完整过程。

一、背景:多云的痛

我们公司的架构演变:

  • 最早:全在阿里云
  • 后来:核心业务迁到自建机房(省成本)
  • 再后来:灾备放腾讯云(鸡蛋不放一个篮子)

结果就是:

 

阿里云ECS(北京)
↓ 公网
自建机房(上海)
↓ 公网
腾讯云CVM(广州)

问题来了:

  1. 数据同步靠公网

    • MySQL主从同步延迟大
    • 跨云传大文件慢得要死
  2. 内网服务调不了

    • 阿里云的服务想调机房的接口?不行
    • 要走公网绕一圈
  3. 运维噩梦

    • 跳板机要维护三套
    • 部署脚本要区分环境
    • 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 安全建议

  1. 定期更新Token
  2. 只开放必要端口
  3. 配置访问白名单
  4. 日志审计

9.3 高可用

# 每个位置至少部署2个节点
# 配置健康检查和自动切换

十、总结

混合云网络打通,以前是个大工程,现在简单多了:

  1. 评估需求:延迟敏感度、带宽需求、预算
  2. 选择方案:土豪上专线,穷则SD-WAN
  3. 逐步迁移:先打通,再把服务切过去
  4. 持续监控:网络质量、延迟、稳定性

SD-WAN对于我们这种中小公司来说,是性价比最高的选择。配置简单、成本低、效果好。

有问题评论区交流~


posted @ 2025-12-03 16:03  花宝宝  阅读(48)  评论(0)    收藏  举报