同一机房内的服务器可以通过内网互通:内网是为您的服务器专门保留的 VLAN,免费提供,内部流量不计费。数据库复制、集群通信和备份这类不应经过公网地址的流量,都适合走内网。
什么是内网
- 专属 VLAN,只连接您的服务器。这是一个二层网络,与公网接口及其地址相互隔离。
- 免费。内网本身不收费,内部流量也不计费。
- 仅限同一机房。法兰克福和阿姆斯特丹的服务器无法共享同一个 VLAN。如需跨机房互联,可以在公网上运行 WireGuard 等加密隧道,反正公网同样不限流量。
- 地址自行规划。私有 IPv4 地址需要自行分配,例如使用
10.20.0.0/24网段。请选择不与 VPN、办公网络或容器网络重叠的网段:Docker 默认使用172.17.0.0/16。
每台服务器需要两项信息:内网的 VLAN ID,以及承载该 VLAN 的物理接口。如果还没有这些信息,请联系我们的技术支持工程师。更多背景介绍见内网功能页面。
事先做一份简单的地址规划,可以避免日后出错:
| 服务器 | 角色 | 内网地址 |
|---|---|---|
| db1 | PostgreSQL 主库 | 10.20.0.11 |
| db2 | PostgreSQL 备库 | 10.20.0.12 |
| backup1 | 备份目标 | 10.20.0.30 |
1. 使用 Netplan 创建 VLAN 接口
在 Ubuntu 24.04 上,请把内网配置放在单独的文件中,以免改动公网配置。将以下内容保存为 /etc/netplan/60-private.yaml:
network:
version: 2
vlans:
vlan100:
id: 100
link: enp1s0f0
addresses:
- 10.20.0.11/24将 100 替换为实际的 VLAN ID,将 enp1s0f0 替换为父接口(该接口必须已在主 Netplan 文件中定义)。不要添加网关:到 10.20.0.0/24 的路由会自动创建,默认路由仍保留在公网接口上。
如果内网是以不带 VLAN 标签(untagged)的方式接入第二个端口,请跳过 vlans 部分,直接在 ethernets 下为该端口配置地址。
以自动回滚的方式应用配置,检查接口状态,然后测试能否访问相邻的服务器:
chmod 600 /etc/netplan/60-private.yaml
netplan try
ip -br addr show vlan100
ping -c 3 10.20.0.122. 检查 MTU
同一 VLAN 上的所有主机必须使用相同的 MTU,默认为 1500 字节。请确认满尺寸数据包能够不分片地通过:
ping -M do -s 1472 -c 3 10.20.0.121472 字节的载荷加上 28 字节的 IP 和 ICMP 头部,正好是 1500 字节。如果小包能 ping 通,而这条命令失败,说明路径上有设备使用了更小的 MTU。
巨型帧(MTU 9000)可以降低大批量传输时的每包开销,但只有在整条路径都支持时才有效。调高 MTU 之前,请先咨询我们的技术支持工程师,然后在每台服务器上统一设置,并用 -s 8972 测试。如果使用 WireGuard 跨机房互联,请保留其默认的 MTU 值 1420,为隧道头部留出空间。
3. 为内网接口配置防火墙
内网不等于可信:VLAN 上任何一台服务器被攻破,都能访问其他所有服务器。使用 ufw 时,请保持默认拒绝策略,只放行每台服务器需要的端口,并且只允许来自内网网段的访问:
ufw allow in on vlan100 from 10.20.0.0/24 to any port 5432 proto tcp
ufw allow in on vlan100 from 10.20.0.0/24 to any port 22 proto tcp同时,请将内部服务绑定到内网地址,确保它们不会在公网接口上监听:
- PostgreSQL:
listen_addresses = 'localhost,10.20.0.11' - MySQL 和 MariaDB:
bind-address = 10.20.0.11 - Redis:
bind 127.0.0.1 10.20.0.11
完成后运行 ss -tlnp,查看每个服务监听的地址。
应用场景
数据库复制
流复制可以通过 VLAN 让 PostgreSQL 数据库的备库与主库保持同步。在主库的 pg_hba.conf 中,允许复制用户从备库的内网地址连接:
host replication replicator 10.20.0.12/32 scram-sha-256在备库上停止 PostgreSQL,清空其数据目录,然后克隆主库。-R 选项会自动写入备库配置:
sudo -u postgres pg_basebackup -h 10.20.0.11 -U replicator -D /var/lib/postgresql/16/main -R -X stream -P更多数据库服务器的选型建议,请参阅数据库解决方案页面。
Proxmox VE 集群
Proxmox 的集群引擎 Corosync 需要低且稳定的延迟,同一机房内的服务器正好能满足。Proxmox VE 使用 /etc/network/interfaces 而不是 Netplan,因此请在该文件中定义 VLAN,并用 ifreload -a 应用:
auto enp1s0f0.100
iface enp1s0f0.100 inet static
address 10.20.0.21/24然后在第一个节点上创建集群,再将其他节点加入,并将集群流量固定在内网地址上:
pvecm create prod --link0 10.20.0.21 # on the first node
pvecm add 10.20.0.21 --link0 10.20.0.22 # on each additional nodeProxmox VE 本身的安装和配置,请参阅我们的 Proxmox 指南。
备份
将每晚的备份发送到同一机房的另一台服务器,例如位于阿什本、洛杉矶、阿姆斯特丹或法兰克福的 Storage 264:
rsync -aHAX --numeric-ids --delete /srv/ backup@10.20.0.30:/backups/db1/srv/此外,还应在另一个机房再保留一份副本。同一机房内的备份,无法抵御影响整个机房的事件。