跨云混合架构中,WireGuard通过UDP隧道(如51820端口)替代暴露SSH、HTTP等公网端口,采用Hub-Spoke拓扑:Hub节点作为唯一出入口并启用NAT转发,Spoke节点仅需 outbound访问Hub且关闭所有入向端口,所有流量经加密隧道转发,实现端口闭环与安全加固。

跨云混合架构中配置 WireGuard 加密隧道并关闭原生公网端口,核心在于用 WireGuard 的 UDP 隧道替代直接暴露服务端口(如 SSH 22、HTTP 80/443 或 K8s API 6443),同时确保所有跨云流量仅经加密隧道转发。这不是简单“开个 wg0 接口”,而是重构网络路径和访问控制逻辑。
明确隧道角色与地址规划
WireGuard 在跨云场景中通常采用“中心辐射型”或“全互联型”拓扑。推荐中心辐射型(Hub-Spoke)以降低管理复杂度:
- Hub 节点:部署在具备稳定公网 IP 的云环境(如 AWS EC2 或阿里云 ECS),作为唯一出入口,监听 UDP 51820(可自定义),不开放其他服务端口
- Spoke 节点:包括私有云服务器、IDC 主机、边缘节点等,仅需能 outbound 访问 Hub 的 UDP 端口,无需公网 IP;其 WireGuard IP(如 10.100.0.0/16 子网)用于内部通信
- 避免使用公有云默认网卡名(如 eth0)硬编码,改用
ip -o -4 route show to default | awk '{print $5}'动态获取真实出口接口
服务端(Hub)配置要点
以 CentOS 7 或 Ubuntu 22.04 为例,关键操作如下:
- 启用内核转发:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p - 生成密钥对:
wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey - 创建
/etc/wireguard/wg0.conf,重点包含:-
[Interface]中设置Address = 10.100.0.1/16(Hub 的隧道 IP) -
ListenPort = 51820(非 53、80、443 等易被扫描端口) -
PostUp启用 NAT 转发,但仅限隧道内网段:iptables -t nat -A POSTROUTING -s 10.100.0.0/16 -o eth0 -j MASQUERADE -
PostDown对应清理规则
-
- 启动前执行:
chmod 600 /etc/wireguard/*.key /etc/wireguard/wg0.conf
客户端(Spoke)配置与端口收敛
关闭原生公网端口的前提是所有远程访问必须走隧道。操作分三步:
-
禁用直连服务:用
ufw或firewalld拒绝所有入向连接(除已知管理通道外),例如:ufw default deny incoming;确认ss -tuln | grep ':22'仅监听 127.0.0.1:22(本地 SSH) -
配置 Spoke 端 wg0.conf:
-
[Interface]设置私有隧道 IP(如Address = 10.100.0.10/16)和本地私钥 -
[Peer]填写 Hub 公钥、Hub 公网 IP 和端口(Endpoint = 203.0.113.10:51820) - 添加
AllowedIPs = 10.100.0.0/16, 10.42.0.0/16(后者为 K8s Pod 网段,实现跨集群访问)
-
-
启用路由接管:在 Spoke 上运行
wg-quick up wg0后,验证wg show显示 handshake 成功,并通过ping 10.100.0.1确认连通
安全加固与端口闭环
完成隧道后,必须切断所有非隧道访问路径:
- 云平台安全组/ACL:仅放行 Hub 的 UDP 51820 入向,其他端口全部拒绝;Spoke 安全组禁止任何入向(0.0.0.0/0)
- 主机防火墙补充限制:
iptables -A INPUT ! -i wg0 -p tcp --dport 22 -j DROP(阻止非隧道接口的 SSH 入向) - 验证端口关闭效果:从公网执行
nmap -sU -p 51820,22,80,443 your-hub-ip,应仅 51820 开放且为 UDP;TCP 端口全部 filtered 或 closed - 应用层访问统一走隧道 IP:例如登录 Spoke 服务器,不再用公网 IP,而用
ssh user@10.100.0.10










