要让Linux虚拟机能够正常上网,需要从虚拟机网络模式配置、操作系统网络设置以及常见问题排查等多个环节入手,以下是详细的操作步骤和原理说明,涵盖VMware、VirtualBox等主流虚拟化软件,以及Ubuntu、CentOS等常见Linux发行版的配置方法。
理解虚拟机网络模式的核心原理
虚拟机上网的本质是通过虚拟化软件提供的虚拟网络设备,与宿主机(物理机)或外部网络建立连接,主流虚拟机软件通常支持以下三种网络模式,每种模式的适用场景和特点不同:
网络模式 | 工作原理 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
NAT(网络地址转换) | 虚拟机通过虚拟网卡(如VMnet8)与宿主机通信,宿主机作为“路由器”为虚拟机提供网络访问,虚拟机通过宿主机的IP访问外部网络 | 配置简单,无需额外网络设备,虚拟机可自动获取IP | 虚拟机无法直接被外部网络主动访问,需端口转发 | 个人开发、测试,无需外部访问的场景 |
桥接模式(Bridged) | 虚拟机虚拟网卡直接桥接到宿主机的物理网卡,虚拟机作为独立设备接入局域网,与宿主机处于同一网段 | 虚拟机拥有独立IP,可被局域网内其他设备直接访问 | 需局域网有足够IP,可能与宿主机IP冲突 | 需要让虚拟机作为服务器,或被局域网其他设备访问的场景 |
仅主机模式(Host-Only) | 仅允许虚拟机与宿主机通信,无法访问外部网络,形成一个独立的私有网络 | 安全性高,隔离外部网络 | 无法访问互联网,仅限宿主机与虚拟机互访 | 内部开发测试,需要隔离外部环境的场景 |
对于大多数“上网”需求,NAT模式是最简单且常用的选择,本文将以NAT模式为例展开说明,同时补充桥接模式的配置要点。
VMware虚拟机上网配置(以NAT模式为例)
虚拟机软件层面设置
(1)打开VMware Workstation,选择已创建的Linux虚拟机,点击“编辑虚拟机设置”。
(2)在“硬件”选项卡中,选中“网络适配器”,确保“网络连接”设置为“NAT模式”(默认通常为NAT)。
(3)点击“NAT设置”,检查子网IP(如默认192.168.100.0/24)、DHCP服务是否启用(默认启用,虚拟机将自动获取IP192.168.100.x)。
(4)若需让外部网络访问虚拟机,可配置“端口转发”:例如将宿主机的8080端口映射到虚拟机的80端口,在“端口转发”中添加规则(协议:TCP,主机端口:8080,虚拟机IP:需固定虚拟机IP,虚拟机端口:80)。
Linux操作系统层面配置
(1)图形界面配置(以Ubuntu为例)
- 点击桌面右上角网络图标,选择“有线连接”或“Wired”,点击“齿轮”图标进入设置。
- 在“IPv4”选项中,选择“自动DHCP地址”(NAT模式下默认自动获取),或手动设置静态IP(需与VMnet8同网段,如192.168.100.150,子网掩码255.255.255.0,网关192.168.100.1,DNS可设置为8.8.8.8或宿主机IP)。
- 保存配置,点击“应用”,此时虚拟机应能访问互联网(可通过
ping www.baidu.com
测试)。
(2)命令行配置(以CentOS 7为例)
- 查看网络接口:
ip a
,通常虚拟机NAT模式下的网卡为ens33
(不同发行版名称可能不同,如Ubuntu为ens33
或eth0
)。 - 编辑网络配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
,确保以下配置:TYPE=Ethernet BOOTPROTO=dhcp # 自动获取IP,若需静态IP改为static NAME=ens33 DEVICE=ens33 ONBOOT=yes # 开机启用网卡
- 重启网络服务:
systemctl restart network
,或使用nmcli connection up ens33
(NetworkManager工具)。 - 测试网络:
ping 8.8.8.8
,若能通则表示上网成功。
VirtualBox虚拟机上网配置(以NAT模式为例)
虚拟机软件层面设置
(1)打开VirtualBox,选择虚拟机,点击“设置”→“网络”。
(2)“ Attached to ”选择“NAT模式”,点击“高级”→“端口转发”,可添加端口转发规则(同VMware)。
(3)默认VirtualBox的NAT网络会创建vboxnet0
虚拟网卡,子网为10.0.2.0/24,虚拟机通过DHCP获取IP(通常为10.0.2.15)。
Linux操作系统层面配置
与VMware类似,主要通过系统网络配置实现,以Ubuntu 20.04为例:
- 使用
netplan
工具(Ubuntu 18.04+):编辑/etc/netplan/01-network-manager-all.yaml
(文件名可能不同),内容如下:network: version: 2 ethernets: enp0s3: # VirtualBox默认网卡名 dhcp4: yes # 自动获取IP
- 应用配置:
sudo netplan apply
,测试网络:ping www.baidu.com
。
桥接模式配置要点(以VMware为例)
若需让虚拟机与宿主机处于同一局域网(如公司内网),可使用桥接模式:
- 虚拟机设置:将网络适配器改为“桥接模式”,可选择“桥接到所有活动网卡”或指定物理网卡(如以太网)。
- Linux系统配置:
- 图形界面:设置IP为局域网内同一网段(如宿主机IP为192.168.1.100,虚拟机可设为192.168.1.101),子网掩码、网关、DNS与宿主机一致。
- 命令行:编辑ifcfg文件,将
BOOTPROTO=static
,并添加IPADDR=192.168.1.101
、NETMASK=255.255.255.0
、GATEWAY=192.168.1.1
(网关为局域网网关)。
- 测试:
ping 192.168.1.1
(网关)和ping www.baidu.com
(外网),确保局域网和外网均通。
常见问题排查
-
虚拟机无法获取IP:
- 检查虚拟机软件的NAT模式DHCP服务是否启用(VMware:VMnet8设置→DHCP服务;VirtualBox:默认启用)。
- 若手动设置静态IP,确保IP与虚拟机NAT子网不冲突(如VMware默认192.168.100.x,VirtualBox默认10.0.2.x)。
-
能ping通外网但无法访问域名:
- 问题是DNS未配置,检查
/etc/resolv.conf
文件是否有nameserver 8.8.8.8
或nameserver 114.114.114.114
,或通过图形界面添加DNS服务器。
- 问题是DNS未配置,检查
相关问答FAQs
Q1:虚拟机能上网,但无法与宿主机通信,怎么办?
A:通常是因为网络模式或防火墙设置问题,首先确认虚拟机网络模式为NAT或桥接(仅主机模式默认无法访问外部网络,但可与宿主机通信),若为NAT模式,检查宿主机防火墙是否阻止了通信(如Windows防火墙允许“VMware Bridge Protocol”);若为桥接模式,确保虚拟机IP与宿机在同一网段,可尝试在虚拟机中ping宿主机IP(如NAT模式下VMware宿主机在NAT网络中的IP为192.168.100.1),若不通,重启虚拟机网络服务或虚拟机软件。
Q2:如何让虚拟机通过宿主机的代理服务器上网?
A:若宿主机开启了代理(如Clash、V2Ray等),可通过以下方式配置虚拟机上网:
- 宿主机设置:确保代理软件允许来自局域网的连接(如监听地址设为
0.0.0
,端口如7890)。 - 虚拟机配置:
- 图形界面:在Linux系统网络设置中,手动配置HTTP/HTTPS代理,服务器地址为宿主机IP(如192.168.1.100),端口为代理端口(7890)。
- 命令行:编辑
/etc/environment
文件,添加http_proxy=http://192.168.1.100:7890
和https_proxy=http://192.168.1.100:7890
,保存后重启终端或执行source /etc/environment
。
- 验证:在虚拟机中使用
curl www.baidu.com
,若返回HTML内容则表示代理生效。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/21005.html