问题背景最近在做的项目需要使用google仓库里的镜像,所以需要用到ipv6来拉取镜像。 我使用的是vmware虚拟机上的ubuntu16.04 linux系统,在用桥接模式连上校园网之后,可以看到虚拟机被分配了ipv6地址,但是用ping6 ipv6.google.com来测试始终都ping不通,在我花了两天尝试了网上说的几乎所有的方法都没有成功之后,我决定彻底了解一下linux的网络配置,再来解决问题。 linux网络配置详解关于这一点,我参考了这篇文章: Ubuntu的网络配置详解 当然在实际做的过程发现了和文章的一些出入,以下我简短的总结一下几个需要用到的文件: /etc/hosts /etc/host.conf /etc/network/interfaces /etc/resolv.conf - /etc/hosts
该文件默认内容如下:
127.0.0.1 localhost127.0.1.1 ubuntu#The following lines are desirable for IPv6 capable hosts::1 ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters 这个文件主要功能是域名解析时使用的,如果你对域名解析不熟悉,可以这么理解:
你在浏览器里输入网址的时候输入的是类似于www.baidu.com之类的域名,但是实际上寻址是靠ip地址寻址,所以就需要一个解析器,将www.baidu.com与该网站服务器的ip对应起来,这就叫域名解析。 linux下域名解析有两种途径,一种叫本地解析,就是利用这个文件里的内容解析,另一种叫dns解析,是在dns服务器中查询ip。 该文件会将右边的域名,对应到左边的ip地址上去,可以看到默认情况下,localhost对应的域名为127.0.0.1,ubuntu(该域名为主机名,可以在/etc/hostname中更改)对应的域名为127.0.1.1 而下面几行对应的是ipv6的域名解析。
注意:网上很多教程提到用改hosts文件的方式来获取ip,我个人是不太建议这种方式的,因为很多情况下你以为ipv6一切正常,但其实根本没有连接到dns服务器上,只是hosts文件列的比较全而已 /etc/host.conf 该文件用来指定域名的解析顺序,上文提到域名解析有两种方式,该文件默认规定域名解析时现从hosts文件找,找不到在到dns服务器上找。一般不建议修改该文件 /etc/network/interfaces 这是最重要的文件,大部分的修改都是在这里进行。 该文件是确定每个网络的IP类型,IP地址,子网掩码,网关IP,广播地址,MAC物理地址等信息,具体的设置方式网上有很多讲解,就不在此展开
我个人一般是用dhcp方式(动态获取)获取所有的信息 我的interfaces文件如下:
auto loiface lo inet loopbackauto ens33iface ens33 inet dhcpiface ens33 inet6 dhcp
auto关键字指明接下来配置的网卡,一般前两行都是本地网络循环,不用修改,下面的ens33 是我的以太网网络接口(可以用ifconfig 指令查到), iface关键字后指明网卡名称,然后就可以对该网络进行配置,无论是ipv4还是ipv6我都设置成了dhcp(动态获取Ip)方式。 - /etc/resolv.conf
该文件也是经常容易出问题的文件,如果你一开始配置的好好的,重启网卡,或者重启计算机后网络就出问题了,很有可能就和这个文件有关。 该文件是用来配置dns服务器ip地址信息的文件,配置方式什么的我推荐的那篇文章里就有讲到,不再赘述,需要注意的是该文件不建议手动修改,因为该文件会根据所在的网络环境,自动更新,覆盖你的手动配置,所以说如果需要手动配置dns服务器,在配置/etc/network/interfaces时就可以配置好。
有了上述相关知识,再解决问题就会容易很多。 查找问题首先我的虚拟机是存在ipv6的地址的,而且我用主机ping是能够成功ping通Ipv6的服务器的,我怀疑是虚拟机的dns服务器没有配置好的问题,我尝试找到了ipv6.google.com的Ipv6地址:2404:6800:4008:800::200e,用虚拟机直接ping这个Ip是能够成功的,这样就锁定了是dns域名解析的问题。 但是在修改/etc/network/interfaces来手动设置dns服务器的过程中发现不管怎么改,网络状态都没变,后来我甚至将ipv6从dhcp方式改成手动配置方式来配置,同样没有用,经过查询才知道linux系统的两种网络配置方式。 linux系统的两种网络配置方式1.系统文件配置 2.利用Network Manager等第三方可视化应用配置 系统文件配置已经介绍的足够多了,除了手动配置之外,linux系统的网络配置还可以靠可视化的第三方软件来配置。 根据网上的说法,系统默认会使用Nerwork Manager等应用的配置,但是一旦/etc/network/interfaces等文件遭到修改就会根据系统文件配置来配置网络,但是从我目前的状况来看,很显然系统的网络配置不是从我修改的文件来配置的,所以我先关闭了network manager。
/etc/init.d/network-manager stop 网上说此时查看其配置文件/etc/NetworkManager/NetworkManager.conf可以看到managed=false,但显然我的nm的配置文件并没有受刚才的指令影响,于是我手动修改了该配置文件。同时将/etc/network/interfaces里的配置都改回dhcp方式,重启虚拟机运行。 问题完美解决。
|