1. 概述与准备
本段说明目标与准备工作。a) 目标:在台湾 VPS(KVM)上搭建稳定可管理的虚拟网络并实现租户/服务间安全隔离。b) 准备:宿主机有 root 权限、已安装 KVM/libvirt(或 virt-manager)、可编辑网络配置(Ubuntu/Debian/CentOS)。c) 检查命令:使用
ip a,
brctl show(bridge-utils)或
virsh net-list --all。
2. 选择网络模式与风险提示
列出常用模式及优缺点。a) 桥接(bridge):VM 可直接与物理网卡通信,适合生产流量,但需防止互相嗅探。b) NAT(iptables/nftables):简单且隔离性好,端口转发必要时开通。c) macvtap:性能好但对宿主隔离和管理有限。风险提示:macvtap 不适合想在宿主上直接访问 VM 的场景。
3. 创建桥接网络(以 Debian/Ubuntu 为例)
步骤详列。a) 安装:
apt install bridge-utils。b) 编辑 /etc/network/interfaces 或 netplan:示例netplan:
/etc/netplan/01-netcfg.yamlnetwork: ethernets: eth0: dhcp4: no; bridges: br0: interfaces: [eth0]; addresses: [你的静态IP/32或/24]; gateway4: xxx; nameservers: {addresses: [8.8.8.8,1.1.1.1]}。c) 应用:
netplan apply 或重启网络。d) 验证:
brctl show 与
ip addr show br0。
4. 在 libvirt 中配置桥接网络
具体 XML 与步骤。a) 新建网络文件:
virsh net-define bridge.xml(或使用
virsh attach-interface 指定 network='bridge')。b) 示例:在虚拟机 XML 中把 interface type='bridge' source bridge='br0'。c) 重启 libvirtd 并启动虚拟机:
virsh start vmname。d) 验证:宿主与 VM 是否能互相 ping(若需隔离则配置防火墙)。
5. NAT 模式与端口转发(iptables 示例)
适用于无法桥接的 VPS 或希望宿主隔离的场景。a) 启用转发:编辑
/etc/sysctl.conf 加入
net.ipv4.ip_forward=1 并
sysctl -p。b) NAT 规则:
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE。c) 端口转发 HTTP:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.100.10:80。d) 保存规则:使用
iptables-save 或配置脚本在开机时恢复。
6. VLAN 与 macvtap 的实际配置要点
说明何时用 VLAN/macvtap 与配置步骤。a) VLAN:若宿主支持 802.1Q,可在宿主创建子接口
ip link add link eth0 name eth0.100 type vlan id 100,然后桥接 br0 到 eth0.100。b) macvtap:在 libvirt 虚拟机 XML 中使用
type='direct' model='virtio' 和
source dev='eth0' mode='bridge',注意宿主不能与 macvtap 接口直接通信。c) 风险控制:对 VLAN 要确保交换机端口与数据中心政策一致,联系台湾机房确认支持。
7. 防止ARP/MAC欺骗与二层隔离(ebtables 与 sysctl)
实操步骤。a) 开启反向路径和ARP过滤:
sysctl -w net.ipv4.conf.all.rp_filter=1sysctl -w net.ipv4.conf.all.arp_ignore=1与
arp_announce=2。b) 使用 ebtables 阻止 MAC 欺骗:
ebtables -A FORWARD -s ! AA:BB:CC:DD:EE:FF -i vnet0 -j DROP(按实际 MAC/接口设定)。c) 对 libvirt 网络启用 `
` 或使用 Open vSwitch 实现更细粒度的防护。
8. 使用 nftables 进行主机级隔离与日志
推荐 nftables 配置示例。a) 建立表与链:
nft add table inet vmfw; nft add chain inet vmfw forward { type filter hook forward priority 0; }。b) 默认拒绝跨 VM 流量并允许必要端口:
nft add rule inet vmfw forward iif "vnet+" oif "vnet+" drop(阻断 vnet 之间直接通信),针对外出允许:
nft add rule inet vmfw forward iif "vnet+" oif "eth0" accept。c) 启用日志:
nft add rule inet vmfw forward counter log prefix "VM-FW: " group 1。
9. 测试、故障排查与自动化
列出常用检查点与自动化建议。a) 测试:从宿主 ping VM,VM 互 ping,外网访问,端口转发。b) 排查:使用 tcpdump -i br0, ss -tunapl, iptables -t nat -L -n -v。c) 自动化:将 iptables/nftables 与 netplan 脚本加入 systemd service,或用 Ansible 管理多台台湾 VPS。
10. 备份配置与运维建议
说明持久化与监控。a) 备份:保存 /etc/netplan、/etc/systemd/network、libvirt XML、iptables/nftables 导出文件至 Git 私有仓库。b) 监控:部署 Prometheus node exporter 与 cAdvisor,或使用 Zabbix 监控网络丢包/延迟。c) 安全实践:定期更新内核与 qemu/libvirt,限制宿主对 VM 控制台访问,启用 SELinux/AppArmor。
11. 问:在台湾 VPS 上使用 macvtap 会有哪些限制?
答:macvtap 性能好但有限制:宿主和 macvtap 接口通常不能直接互通,导致宿主无法直接管理 VM 网络;多个 VM 共享物理 NIC 时,若需要复杂隔离或 VLAN,需要在物理交换机/机房层面配置。若需宿主-VM 互访或灵活防火墙,优先使用 bridge。
12. 问:如何在桥接环境中防止同机房内其他租户嗅探或中间人?
答:在桥接上采取二层防护:启用 ebtables 限制 MAC 对应关系、开启 arp_ignore/arp_announce、在宿主上用 nftables/iptables 阻断 vnet 之间直接流量;必要时结合 VLAN 或 Open vSwitch 做端口隔离,并确保交换机端口不开启混杂监听。
13. 问:如果想同时兼顾性能与隔离,推荐哪种方案?
答:推荐使用桥接 + VLAN 或 Open vSwitch:把物理 NIC 做 802.1Q 子接口分配给不同租户,在宿主用 OVS 实现流表隔离并用 nftables 做出/入流量控制;这种方案兼顾二层性能与可控隔离,适合台湾 VPS 需要高吞吐与安全的场景。
来源:台湾vps kvm 网络配置要点与安全隔离实践教程