【VirtualBox 配置NAT之后不能访问公网】

背景

最近想用本地win10电脑虚拟出几台linux来学习实验,遇到 配置NAT之后不能访问公网的问题,记录一下,便于相似问题网友借鉴。

配置

  • 宿主机器: win10 笔记本电脑
  • 虚拟机软件: VirtualBox, 这里不展开,前往官网virtualbox.org
  • 虚拟机操作系统: Centos7.9

背景知识

对于virtualbox中的虚拟机访问公网,一般配置两个网卡:

  • 一个仅主机网络:虚拟机只能与宿主机和其他仅主机网络模式下的虚拟机通信,不直接访问外部网络。便于宿主机SSH到虚拟机。
  • 一个NAT网络:适合大多数情况,虚拟机可以通过宿主机的网络连接访问互联网。

解决思路

验证网络

  • ping 公网IP,这里不建议ping 域名(如www.baidu.com),因为DNS可能也不可用。
[root@localhost ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=104 time=51.6 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=104 time=104 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=104 time=133 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=104 time=18.7 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=104 time=24.7 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=104 time=85.3 ms
64 bytes from 8.8.8.8: icmp_seq=7 ttl=104 time=91.6 ms
^C
--- 8.8.8.8 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6024ms
rtt min/avg/max/mdev = 18.793/72.863/133.658/39.407 ms
[root@localhost ~]# ping www.baidu.com
ping: www.baidu.com: 未知的名称或服务

上述命令有返回,证明可以访问公网,但是直接ping www.baidu.com 却报错。

VirtualBox 配置

配置 VirtualBox 网络
打开 VirtualBox 并选择虚拟机。点击“设置” > “网络”。选择一个网卡并将其配置为 NAT 模式。
按上面配置之后,进入shell界面验证还是不通。

查看 ip addr

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:41:24:f1 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:3a:42:e9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.101/24 brd 192.168.56.255 scope global noprefixroute dynamic enp0s8
       valid_lft 404sec preferred_lft 404sec
    inet6 fe80::424:4544:1053:4545/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

可以除了本地127.0.0.1,还有两个网卡。
其中2号enp0s3就是NAT 虚拟的网卡,可以看到该网卡没有获取到IP.
3号网卡enp0s8,就是与本机进行通信的host-only,此处不用关心。

查看 ip route

[root@localhost ~]# ip route
192.168.56.0/24 dev enp0s8 proto kernel scope link src 192.168.56.101 metric 100

可以看到虚拟机IP 路由只有一个,就是上面与宿主那个网卡,并没有NAT网卡。

添加配置解决

sudo ip addr add 10.0.2.15/24 dev enp0s3
sudo ip route add default via 10.0.2.2 dev enp0s3

再次验证

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:57:a9:f1 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 scope global enp0s3
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:3a:e3:e9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.101/24 brd 192.168.56.255 scope global noprefixroute dynamic enp0s8
       valid_lft 593sec preferred_lft 593sec
    inet6 fe80::424:4544:1053:4545/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
[root@localhost ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=104 time=81.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=104 time=58.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=104 time=18.6 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=104 time=237 ms

更新解决

  • 上面ip addr add 操作虽然可以暂时解决连接公网问题,但是虚机重启又没有了,证明配置并没有持久化。解决方案有两个:
    • 在网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-enp0s3 添加或修改以下内容,这种方式相当于手工配置固定IP 。
TYPE=Ethernet
BOOTPROTO=none
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
IPADDR=10.0.2.15
NETMASK=255.255.255.0
GATEWAY=10.0.2.2
DNS1=8.8.8.8
DNS2=8.8.4.4
    • 直接修改成DHCP方式自动获取(推荐)
BOOTPROTO=dhcp
ONBOOT=yes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值