零基础搭建混合云架构:从网络互通到业务联调
为什么你需要混合云架构
假设你有一台本地服务器跑着数据库,又买了几台云服务器跑应用。
如果想让应用直接访问本地数据库,又不想暴露公网端口,就需要混合云架构——将本地网络和云上VPC打通,让两台机器像在同一个局域网一样通信。
本文以最简单的混合云网络互通为目标,使用免费的工具WireGuard搭建加密隧道,适合没有任何网络工程基础的站长或运维新手。
读完你会:
- 理解混合云架构的基本原理
- 完成云端与本地服务器之间的内网互联
- 学会验证联通性和排查常见问题
前置准备:你需要什么
- 一台云服务器(例如阿里云ECS,2核4G即可,系统推荐Ubuntu 22.04)
- 一台本地服务器或虚拟机(能通互联网,建议也使用Ubuntu)
- 云服务器安全组放行UDP端口(WireGuard默认端口51820)
- 基本的SSH连接能力(会用终端登录即可)
注意:本文不涉及成本优化或高可用,只聚焦网络打通这一步。如果你的云和本地之间已有专线,可以跳过本教程。
第一步:在云服务器上安装并配置WireGuard
登录云服务器,执行以下命令安装:
sudo apt update
sudo apt install wireguard -y
创建私钥和公钥:
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
创建配置文件 /etc/wireguard/wg0.conf,内容如下:
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <服务器私钥内容>
# 启用IP转发(重要)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# 本地客户端的信息,稍后添加
PublicKey = <本地客户端公钥>
AllowedIPs = 10.0.0.2/32, 192.168.1.0/24
注意替换 eth0 为云服务器实际的外网网卡名称(可用 ip route 查看默认路由的接口)。PostUp 中的 MASQUERADE 让本地流量能通过云服务器访问公网(如果本地没有独立公网IP)。
启动WireGuard:
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
检查状态:
sudo wg show
第二步:在本地服务器上安装并配置WireGuard客户端
同样安装WireGuard:
sudo apt update
sudo apt install wireguard -y
生成密钥对:
wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key
创建配置文件 /etc/wireguard/wg0.conf:
[Interface]
Address = 10.0.0.2/24
PrivateKey = <本地客户端私钥>
[Peer]
PublicKey = <云服务器公钥>
Endpoint = 云服务器公网IP:51820
AllowedIPs = 10.0.0.0/24, 云服务器VPC网段(如192.168.0.0/16)
PersistentKeepalive = 25
AllowedIPs指定哪些目标IP走隧道。如果想让本地访问云上所有资源,可以写上云VPC的网段。PersistentKeepalive保持连接,避免NAT超时断开。
启动客户端:
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
第三步:打通路由与防火墙
在本地服务器上也需要开启IP转发(如果想让其他设备通过本地服务器访问云):
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
云服务器已经在第一步配置了iptables,如果本地的局域网设备也需要访问云,还需要在本地路由器上添加静态路由,或者让本地服务器作为网关。
验证混合云是否打通
在本地服务器上ping云服务器的隧道IP:
ping 10.0.0.1
在云服务器上ping本地服务器的隧道IP:
ping 10.0.0.2
如果都能通,说明隧道建立成功。
接着测试跨子网访问:在云服务器上ping本地内网的一台设备(例如 192.168.1.10),如果能通,则混合云网络已打通。
避坑指南
- 云服务器安全组必须放行UDP 51820,否则无法建立连接。
- 云服务器的网卡名称不一定都是
eth0,请用ip link show确认。 - 本地客户端没有公网IP时,云服务器不能主动连接本地,需要客户端的
PersistentKeepalive保持长连接。 - AllowedIPs写错会导致流量走错路径,建议先只添加隧道IP段测试,确认通后再加局域网段。
高频问题解答
Q:WireGuard配置好后重启服务器,隧道自动恢复吗?
A:我们使用 systemctl enable 设置了开机自启,重启后会自动连接。如果发现未自动连接,请检查 wg-quick@wg0 服务状态。
Q:我在本地服务器上能ping通云服务器隧道IP,但ping不通云上其他ECS。
A:需要在云服务器上添加iptables规则允许转发,并检查云服务器本身是否开启了防火墙(如 ufw)。如果云上ECS在同一个VPC内,通常只要本地服务器的 AllowedIPs 包含了VPC网段,并且云服务器开启了IP转发即可。
Q:混合云网络打通后,数据安全吗?
A:WireGuard使用最新的加密协议,在公网上传输是加密的。但建议混合云架构中敏感业务仍使用TLS等应用层加密。
结语
通过上述步骤,你已经成功搭建了一个基础混合云架构的“网络高速公路”。
后续可以在这条隧道上部署应用、同步数据或搭建运维跳板机。
遇到连接异常时,优先检查 sudo wg show 输出中的 handshake 时间,如果为0,说明隧道未建立,请排查密钥、端口和防火墙。
如果你正在处理混合云架构,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。