Linux虚拟机联网方式取决于宿主机的网络环境和虚拟化平台(如VMware、VirtualBox、K8s等),以下是常见方法及技术细节:
1. NAT模式
- 虚拟机会共享宿主机的IP地址,通过宿主机进行网络地址转换(NAT)。适合单机开发场景,虚拟机可访问外网,但外部无法直接访问虚拟机。
- 配置示例:在VirtualBox中默认启用NAT,无需额外设置。若需端口转发,需在虚拟机设置中添加规则(如将宿主机的2222端口映射到虚拟机的22端口)。
2. 桥接模式(Bridged Networking)
- 虚拟机会直接连接到宿主机的物理网络,获得与宿主机同网段的独立IP。适用于需要虚拟机作为独立节点参与局域网的场景(如服务器模拟)。
- 注意:需确保宿主机网卡支持混杂模式,且局域网有足够的IP分配(如DHCP或手动配置静态IP)。
3. 仅主机模式(Host-Only)
- 虚拟机与宿主机通过虚拟网络互通,但无法访问外部网络。适合封闭测试环境,如安全审计或内部服务调试。
- 扩展知识:在VMware中会生成`vmnet1`虚拟网卡,需手动配置虚拟机和宿主机的IP为同一子网。
4. 自定义网络(如KVM的虚拟网络)
- 通过`libvirt`管理虚拟网络,支持NAT、路由或隔离网络。例如:
bash
virsh net-define mynetwork.xml
virsh net-start mynetwork
- 可结合`iptables`或`firewalld`实现高级流量控制。
5. 配置静态IP/DHCP
- 动态IP:修改`/etc/network/interfaces`(Debian系)或`/etc/sysconfig/network-scripts/ifcfg-eth0`(RHEL系),设置`BOOTPROTO=dhcp`并重启`network`服务。
- 静态IP:添加配置如`address 192.168.1.100`、`gateway 192.168.1.1`,并指定DNS(如`nameserver 8.8.8.8`)。
6. 网络工具排查
- 使用`ip addr`检查网卡状态,`ping`测试连通性,`traceroute`路由。
- 若DNS失效,编辑`/etc/resolv.conf`或使用`nmcli`(NetworkManager)修正。
7. 容器化环境
- 在K8s或Docker中,虚拟机可能通过CNI插件(如Calico、Flannel)接入Overlay网络,需关注Pod和Service的网络策略。
8. 防火墙与SELinux
- 确保防火墙放行流量:
bash
ufw allow 22/tcp # Ubuntu示例
firewall-cmd --add-port=80/tcp --permanent # CentOS示例
- SELinux可能阻断网络服务,可通过`audit2allow`生成策略模块。
9. 云平台特殊处理
- AWS/Azure的虚拟机需配置安全组和网络ACL,OpenStack实例需绑定浮动IP。
常见问题:
MTU不匹配:VPN或隧道场景下,需调整MTU(如`ifconfig eth0 mtu 1400`)。
虚拟网卡驱动缺失:安装`open-vm-tools`(VMware)或`virtio-net`驱动(KVM)。
IPv6支持:若宿主机启用IPv6,需在虚拟机中显式启用`net.ipv6.conf.all.disable_ipv6=0`。
若仍无法联网,建议逐层检查物理网络、虚拟化平台配置、虚拟机内核日志(`dmesg | grep eth`)及服务状态。