2026/4/6 8:40:45
网站建设
项目流程
1. 为什么需要hostonly内网传输方案最近在折腾PVE虚拟化环境时遇到了一个让人头疼的问题虚拟机之间传输大文件速度慢得像蜗牛爬。我的主力工作机是Win10虚拟机通过显卡直通获得接近物理机的性能但每次从跑qbittorrent和Samba服务的LXC容器下载几十GB的电影资源时千兆网络成了明显的瓶颈。仔细分析后发现所有虚拟机流量都要经过物理路由器中转。家用路由器虽然标称千兆但实际转发性能往往达不到理论值再加上其他设备也在共享这条通道速度自然上不去。更糟的是大文件传输会占用大量带宽影响其他设备的正常上网体验。这时候hostonly网络就派上用场了。这种网络模式的特点是完全在宿主机内部构建虚拟网络不经过物理网卡和外部路由器虚拟机/容器间直连理论速度取决于宿主机性能实测下来用VirtIO虚拟网卡构建的hostonly网络传输速度轻松突破5Gbps是原来千兆网络的5倍多。最棒的是这种高速传输完全不影响其他设备上网真正做到了鱼与熊掌兼得。2. 搭建hostonly网络基础环境2.1 创建虚拟网桥首先需要在PVE宿主机上创建一个独立的虚拟网桥。我选择在/etc/network/interfaces中添加配置auto vmbr2 iface vmbr2 inet static address 10.0.1.1/24 bridge-ports none bridge-stp off bridge-fd 0 post-up bash /root/scripts/vmbr2.iptables.config.sh up post-down bash /root/scripts/vmbr2.iptables.config.sh down这里有几个关键点需要注意bridge-ports none表示这是一个纯软件网桥不绑定任何物理网卡使用私有IP段10.0.1.0/24避免与现有网络冲突post-up/post-down脚本用于配置路由规则后面会详细说明2.2 配置独立路由表为了避免hostonly网络干扰主路由表我创建了专门的路由表表ID 102。下面是/root/scripts/vmbr2.iptables.config.sh的完整内容function add() { ip route del default via 10.0.1.0 dev vmbr2 ip route del 10.0.1.0/24 dev vmbr2 proto kernel scope link src 10.0.1.1 ip route add default via 10.0.1.0 dev vmbr2 table 102 ip route add 10.0.1.0/24 dev vmbr2 proto kernel scope link src 10.0.1.1 table 102 ip route flush cache ip rule add iif vmbr2 lookup 102 ip rule add to 10.0.1.0/24 lookup 102 } function del() { ip rule del iif vmbr2 lookup 102 ip rule del to 10.0.1.0/24 lookup 102 ip route del default via 10.0.1.0 dev vmbr2 table 102 ip route del 10.0.1.0/24 dev vmbr2 table 102 ip route flush cache } if [ $y y -o $y upy ]; then echo add ip config add else echo del ip config del fi这个脚本实现了移除vmbr2接口的默认路由在表102中建立专属路由规则设置策略路由确保进出vmbr2的流量都使用专属路由表3. 虚拟机与容器网络配置3.1 为虚拟机添加hostonly网卡在PVE管理界面中给需要高速内网传输的虚拟机添加第二块网卡选择VirtIO类型性能最好桥接至vmbr2对于Windows虚拟机记得安装virtio-net驱动配置完成后在虚拟机内手动设置静态IP如10.0.1.2/24网关指向10.0.1.1。此时虚拟机之间应该能互相ping通传输速度也会有显著提升。3.2 解决多网卡路由优先级问题添加hostonly网卡后我发现Windows虚拟机无法上网了。这是因为系统默认会使用新网卡作为默认路由出口。解决方法很简单 - 调整接口跃点数打开网络连接面板右键普通网卡 → 属性 → Internet协议版本4(TCP/IPv4) → 高级取消勾选自动跃点手动设置一个较小值如10对hostonly网卡设置较大跃点值如20这样系统会优先使用跃点值小的网卡访问外网而内网通信仍走hostonly通道。3.3 LXC容器的特殊配置LXC容器的网络配置比虚拟机更复杂特别是当容器需要同时访问内外网时。经过多次尝试我找到了可靠的解决方案首先在容器配置文件中添加hostonly网卡lxc.net.1.type: veth lxc.net.1.name: internal lxc.net.1.link: vmbr2 lxc.net.1.flags: up创建/etc/systemd/network/internal.network文件[Match] Name internal [Network] Description Interface internal autoconfigured by PVE DHCP ipv6 IPv6AcceptRA false [Route] Gateway 10.0.1.1 Metric 2048 [Address] Address 10.0.1.10/24 RouteMetric 2048对于DHCP获取IP的情况额外添加[DHCPv4] RouteMetric100关键技巧使用高Metric值确保默认路由不走hostonly网卡创建.pve-ignore.eth0.network文件防止PVE覆盖配置静态IP和DHCP配置略有不同需要根据实际情况调整4. 性能优化与实用技巧4.1 网卡参数调优为了让hostonly网络发挥最大性能可以调整以下参数# 启用巨帧需要所有节点支持 ip link set vmbr2 mtu 9000 # 调整缓冲区大小 sysctl -w net.core.rmem_max16777216 sysctl -w net.core.wmem_max16777216 sysctl -w net.ipv4.tcp_rmem4096 87380 16777216 sysctl -w net.ipv4.tcp_wmem4096 65536 16777216 # 禁用TCP校验和卸载对虚拟网卡可能反而降低性能 ethtool -K vmbr2 tx off rx off4.2 Samba服务优化如果使用Samba共享文件这些配置能显著提升传输速度[global] socket options IPTOS_THROUGHPUT TCP_NODELAY SO_RCVBUF65536 SO_SNDBUF65536 max xmit 65536 dead time 15 getwd cache yes write cache size 262144 strict locking no oplocks yes max connections 1004.3 日常维护建议定期检查路由表是否正常ip route list table 102 ip rule list监控网络流量iftop -i vmbr2 nload vmbr2遇到网络问题时可以快速重置配置systemctl restart systemd-networkd /root/scripts/vmbr2.iptables.config.sh down /root/scripts/vmbr2.iptables.config.sh up这套hostonly网络方案在我的家庭实验室运行半年多经历了多次大文件传输考验。Win10虚拟机与LXC容器之间的传输速度稳定在400-500MB/s同时完全不影响其他设备上网。对于有类似需求的用户不妨按照这个思路搭建自己的高速内网。