VPS 私有网络怎么用:跨机内网通信、省流量又防嗅探
2026-08-15 · DevCraft Studio
多家 VPS 厂商提供私有网络/VLAN。讲清它干啥用、怎么让数据库只走内网、用 WireGuard 给没有内网的厂商 DIY 一个,以及安全要点。
你买了一台 VPS 跑网站,又买了一台跑数据库,两台之间每天要来回搬运大量查询和备份数据。如果都走公网 IP,不仅延迟高、还要为出流量买单,更糟的是数据库端口直接暴露在公网上,等于把家门钥匙挂在门把手上。私有网络(Private Networking / VLAN)就是用来解决这件事的:给机器之间拉一条「只属于你、不经过公网」的专用通道。本文先把概念讲清楚,再分别讲「厂商自带内网」和「自己用 WireGuard 攒一个」两种玩法,最后说说防火墙怎么收口才安全。
延伸阅读
更多相关攻略推荐:2026 边缘 CDN 加速对决:Cloudflare 还是 Bun、2026 独立站防 DDoS 与防爬:Cloudflare+WAF 、【CF 防护 01】Cloudflare + VPS 防 DDoS 、【发行版选型 10】如何选择合适的 Linux 发行版、VPS 装什么系统好?Ubuntu、Debian、CentOS 大白。
一、私有网络到底是什么,和公网 IP 差在哪
公网 IP 是互联网上能直接被任何人访问的地址,VPS 出厂自带的那块网卡就是公网口。私有网络则是给你账号下、同一地域内的机器之间用的一块「内网网卡」,它分配的通常是 10.x / 172.16.x / 192.168.x 这类保留地址,路由上根本出不了机房,外部互联网也碰不到它。
差别主要在三件事上。第一是费用:以 Vultr 为例,附加的私有网络(VPC)是免费且不计量(unmetered)的,而公网 IPv4 通常每月要 2~3 美元;把机器间的大流量挪到内网,等于省下实打实的出网带宽费。第二是延迟与吞吐:内网走的是机房内部交换,延迟通常 sub-millisecond 到一两毫秒,比绕公网快一大截,跑数据库主从复制、备份同步尤其明显。第三是安全面:数据不经过公网,就少了一层被嗅探、被扫描、被暴力破解的暴露面。
要注意一个有名的限制:私有网络一般只在同一个地域(region)内有效。你在东京和法兰克福各有一台机器,它们的内网网卡是互不相通的,跨地域通信要么走公网,要么自己架隧道。Vultr 还允许每个地域挂载最多 5 个 VPC,并且从 2018 年起就支持「多个私有网络」,可以把前端、数据库、管理面分到不同的隔离网段。
二、厂商自带私有网络怎么开(以 Vultr 为例)
像 Vultr 这类厂商,开内网几乎零门槛。新建实例时在部署页勾选「Enable Private Networking」,开机后 cloud-init 会自动把内网网卡配好,你什么都不用做。已经开好的机器,进实例的 Settings → IPv4 标签,点「Enable Private Networking」按钮也能挂上,不过这种事后追加的情况需要你手动写一下网卡配置。
想用命令行或自动化,Vultr 的 CLI 也很直白:先用 vultr-cli vpc list 看现有网络,再 vultr-cli instance vpc attach --vpc-id="..." 把某台机器接进去;习惯 Terraform 的,在实例资源里加一行 vpc_ids = [vultr_vpc.private_net.id] 即可。私有网络默认会自动分配一个 IPv4 段,你也能在创建 VPC 时手动指定,比如 10.10.0.0/24,方便自己规划地址。
但不是每家厂商都送内网。预算型厂商里,RackNerd、DMIT 这类主要以独立 IP + 高性价比套餐见长的,很多低价套餐并不带私有网络功能。这时候你有两个选择:要么把需要内网通信的机器放在同一台高配机器上用容器隔离,要么就用下一节的办法——自己用 WireGuard 建一条加密隧道,效果上等价于一条跨机内网。
三、让数据库只走内网:省流量、降延迟、防嗅探
最典型的用法是「应用服务器走公网对外服务,数据库服务器只听内网」。做法是:数据库机器干脆不开放公网上的 3306(MySQL)/5432(PostgreSQL)端口,应用服务器用数据库机器的内网地址(如 10.10.0.20)来连。这样一来,每月的数据库查询流量全部走不计量的内网,公网出流量只剩下真正发给用户的网页,带宽账单直接瘦身;同时数据库端口对公网不可见,扫描器根本摸不到它。
备份也是同理。让 nightly 备份任务把数据从应用机 rsync / rclone 到另一台只连内网的存储机,备份流量不占公网额度。主从复制(replication)更该走内网:binlog 流如果走公网,既慢又贵还容易被截获。把 replica 的 master_host 指向主库的内网地址,复制流量就彻底留在内网里。
一个小提醒:内网不是保险箱。同一内网段里如果混了不可信的机器(比如和其他人共享 VLAN,或容器逃逸风险),内网里的明文 MySQL 流量依然可能被同段机器嗅探。所以即便走了内网,该有的 TLS、强密码、最小权限一样不能省——私有网络只是把暴露面从「整个互联网」缩小到「内网段」,它不替代应用层安全。
四、没有内网怎么办:用 WireGuard 自己搭一条加密隧道
WireGuard 是个现代 VPN 协议,2020 年起进 Linux 内核(5.6+),代码量只有约 4000 行,对比 OpenVPN 的十几万行,攻击面小得多。它用 Curve25519 做密钥交换、ChaCha20-Poly1305 做加密,在没 AES 加速的低端 VPS 上反而更快。它默认监听 UDP 51820 端口,配置就是一个文件,非常适合给没有内网的厂商 DIY 一条站点到站点(site-to-site)的加密内网。
假设你在两家都不带内网的厂商各有一台机器 A(公网 a.a.a.a)和 B(公网 b.b.b.b),想让它们像在同一内网里互访。先在两边都装好:
sudo apt update && sudo apt install -y wireguard
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system每台机器各生成一对密钥,私钥只允许 root 读:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
sudo chmod 600 /etc/wireguard/privatekey在 A 上写 /etc/wireguard/wg0.conf,让它拥有隧道地址 10.10.10.1/24,并把 B 作为对端,AllowedIPs 里除了 B 的隧道地址,还放进 B 那边的内网段(这里用 10.10.2.0/24 举例),这样去 B 内网的流量才会被路由进隧道:
[Interface]
Address = 10.10.10.1/24
PrivateKey = <A的私钥>
ListenPort = 51820
[Peer]
PublicKey = <B的公钥>
AllowedIPs = 10.10.10.2/32, 10.10.2.0/24
Endpoint = b.b.b.b:51820
PersistentKeepalive = 15B 的配置是镜像的,把地址换成 10.10.10.2/24,对端指向 A 的公钥与公网地址,AllowedIPs 换成 A 的内网段。两边启用:
sudo systemctl enable --now wg-quick@wg0
sudo wg show起来后用 ping 10.10.10.2 验证,能通就说明加密隧道建好了。之后你完全可以像「厂商自带内网」那样,把数据库地址填成 10.10.10.2,流量会被 WireGuard 加密后走公网 UDP 51820,外人看到的只是一团密文。需要打通各自身后真实局域网时,把对应子网加进 AllowedIPs 即可。
五、安全收尾:防火墙只放行内网段
无论用厂商内网还是 WireGuard,最后一步都是收防火墙。原则只有一条:只对内网段开放服务端口,公网只留必须的对前端端口。比如数据库 3306 只在 10.10.0.0/24(或 WireGuard 的 10.10.10.0/24)里放行,公网一律拒绝。
用 ufw 的话:
sudo ufw deny 3306
sudo ufw allow from 10.10.0.0/24 to any port 3306
sudo ufw allow 80,443/tcp用 nftables / iptables 则写一条只接受来源是内网段的规则。WireGuard 这边还要记得在外部防火墙只开放 51820/udp,并且私钥文件权限锁死 600,公钥可以公开但私钥永远不出本机。如果担心被深度包检测识别,可以给 WireGuard 套一层混淆(如通过中继或 Wstunnel),但普通跨机内网场景通常没这个必要。
另外建议给内网通信也配上 TLS(MySQL 的 require_secure_transport、PostgreSQL 的 ssl=on),把「内网可信」当成纵深防御的其中一层,而不是唯一一层。
延伸阅读:如果你还在挑第一台机器,可以先看 VPS 新手选购指南 与 VPS 安全基线;想对比具体厂商的私网与性价比,参考 RackNerd 评测 和 DMIT 评测。