virtualbox虚拟机NAT模式下不能连接外网的解决方法
背景
给VirtualBox虚拟机(装载了Ubuntu16.04系统)配置了两张网卡,网络模式分别为“网络地址转换(NAT)”和“仅主机(Host-Only)适配器”,其中,enp0s3网卡(NAT)用于外网访问,而enp0s8网卡(Host-Only)用于主机访问虚拟机。然而,虚拟机启动后,却不能访问外网。
定位
网络配置文件如下:
#vi/etc/network/interface ... #Theprimarynetworkinterface autoenp0s3 ifaceenp0s3inetdhcp autoenp0s8 ifaceenp0s8inetstatic address192.168.137.16 netmask255.255.255.0 gateway192.168.137.1
eth0使用dhcp,eth1使用static。eth0的实际网络如下:
#ifconfig enp0s3:flags=4163mtu1500 inet10.0.2.15netmask255.255.255.0broadcast10.0.2.255 inet6fe80::a00:27ff:fe55:2858prefixlen64scopeid0x20 ether08:00:27:55:28:58txqueuelen1000(Ethernet) RXpackets6bytes1476(1.4KB) RXerrors0dropped0overruns0frame0 TXpackets33bytes3108(3.1KB) TXerrors0dropped0overruns0carrier0collisions0
打开其路由,才发现了问题。
#route-n KernelIProutingtable DestinationGatewayGenmaskFlagsMetricRefUseIface 0.0.0.0192.168.137.10.0.0.0UG000enp0s8 10.0.2.00.0.0.0255.255.255.0U000enp0s3 192.168.137.00.0.0.0255.255.255.0U000enp0s8
enp0s8网卡成为了默认路由,这就导致其他路由不能匹配到的网段都会走enp0s8这个网卡,而我们实际上配置与外网连接的虚拟网卡是enp0s3,环境自然就连接不了外网了。我们可以尝试手动来删除现在的默认路由。
#routedeldefault #routeadddefaultgw10.0.2.2devenp0s3 #route-n KernelIProutingtable DestinationGatewayGenmaskFlagsMetricRefUseIface defaultgateway0.0.0.0UG000enp0s3 10.0.2.00.0.0.0255.255.255.0U000enp0s3 192.168.137.00.0.0.0255.255.255.0U000enp0s8
路由设置成功,OS也可以访问外网了。但这只是修改了本次的路由设置,OS重启后就失效了,因此我们需要将配置持久化。
持久化路由配置
我们将路由持久化设置在网络配置文件/etc/network/interfaces中。在网卡启动后添加对应的路由增删的代码,与route命令类似,只是在句首加上up即可。
#vi/etc/network/interfaces ... autoenp0s3 ifaceenp0s3inetdhcp uprouteadddefaultgw10.0.2.2devenp0s3 autoenp0s8 ifaceenp0s8inetstatic address192.168.137.16 netmask255.255.255.0 gateway192.168.137.1 uproutedeldefaultdevenp0s8
注意:uprouteadddefaultgw[gateway-addr]dev[dev-name],该语句中,[dev-name]表示外网网卡的名称,即上面的enp0s3,而[gateway-addr]表示外网网卡使用的网关ip地址。
那么,如何获取这个外网网卡的网关地址呢?virtualbox如下规定:
InNATmode,theguestnetworkinterfaceisassignedtotheIPv4range10.0.x.0/24bydefaultwherexcorrespondstotheinstanceoftheNATinterface+2.Soxis2whenthereisonlyoneNATinstanceactive.Inthatcasetheguestisassignedtotheaddress10.0.2.15,thegatewayissetto10.0.2.2andthenameservercanbefoundat10.0.2.3.
简单的说,就是如果第0个网卡是NAT网卡,那么其网段的第三个数字就0+2=2就是10.0.2.0,网关为10.0.2.2,nameserver则是10.0.2.3.以此类推。
参考:链接地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。