虚拟机网卡模式为NAT,虚拟机不能连接外网的问题

NAT模式

曾经思考过一个问题,我们电脑连接的是路由器,路由器给我们分配的内网地址,也就是常说的192.168.x.x,那么是怎么与外界进行交互的。交互都是端对端的交互,也就是ip协议,交互双方只要知道对方的ip地址就能找到对方,然后通过端口可以进行通信。那么好,内网模式下的主机可以公用路由器的对外地址(这里理解成公网地址,不考虑多级路由的情况)发一个消息给互联网上的某台服务器,但是服务器的回复消息给主机呢,服务器根据主机发过来的消息携带的ip地址最多可以找到这台路由器,剩下的事情怎么办?
想到过这样的一种解决方案:比传输层更低的一层是数据链路层,链路层协议会在ip数据报上加上机器的mac组成mac帧,然后在数据链路层上传输,也就是说我们还知道机器mac地址;同时,设置过路由器的同学都知道,路由器存在一个管理界面,维护的是路由器下机器的ip和mac地址的一个对应关系,那么通过这层关系,最终可以找到发消息的那个主机。然而,事实并非如此,实际的情况路由器是通过NAT模式来解决这个问题,这个模式谢希仁先生的《计算机网络》有提到,怎奈当时不喜欢读书,才会有这么多的胡思乱想,感兴趣的朋友可以去看看,确是一本经典的书。总归:NAT是解决内网机器如何通过一个对外ip来与外网进行通信的机制

设置NAT模式

1》用管理员方式打开虚拟机编辑器

虚拟机网卡模式为NAT,虚拟机不能连接外网的问题_第1张图片

2》确认VMnet8已经设置成NAT模式,(这里一般会有三个虚拟网卡,VMnet0,VMnet1,VMnet8,默认分别对应桥接模式,主机模式和NAT模式,具体参考https://www.jianshu.com/p/85d41c49fdcd,有详细介绍),记住这里的子网ip,子网掩码,和网关ip(点击途中的NAT设置可以看到网关ip),这三个参数也可以视情况自行配置

虚拟机网卡模式为NAT,虚拟机不能连接外网的问题_第2张图片

3》打开相应虚拟机的配置,将网络适配器设置为NAT模式或者自定义为VMnet8,ping www.baidu.com 查看是否可以访问外网

虚拟机网卡模式为NAT,虚拟机不能连接外网的问题_第3张图片
虚拟机网卡模式为NAT,虚拟机不能连接外网的问题_第4张图片

4》有些情况下,上述3个步骤走完并不能访问外网。下述三种方式也许能够解决

4.1 没有虚拟机启动网络

执行 systemctl start network

4.2需要主动请求分配ip地址

dhclient ens33 ens33是虚拟机的网络适配器的名字,可以通过ifconfig命令得知,如果虚拟机没有安装ifconfig命令,那么只能靠猜了,cd /etc/sysconfig/network-scripts 目录下面,找到ifcfg-xxx的文件,这个xxx就是设备的名字。

4.3只支持静态ip模式

cd /etc/sysconfig/network-scripts 目录下面,修改ifcfg-xxx文件,将获取ip的方式dhcp修改成static,在末尾追加上ip,子网掩码,网关,DNS的配置,同时如果有需要,将ONBOOT设置成yes。
虚拟机网卡模式为NAT,虚拟机不能连接外网的问题_第5张图片
然后执行systemctl start network 和 dhclient xxx 确保ip获取成功

你可能感兴趣的:(linux)