关于虚拟机之间是否可以联通的问题

两台虚拟机

a:网卡由 DHCP 自动配置,ip=192.168.15.131/24。通过 rout -n 命令查询,网关gateway=192.168.15.2, 通过netstat -antulp 查询 域名服务器DNS=192.168.122.1

b:网卡手动配置 ip=192.168.15.188/32 网关gateway=182.168.15.2 域名服务器dns=192.168.122.1,

其中,dns是一个virbr的虚拟桥接网卡,如果把b设置为DHCP自动分配域名的话,两台机器的网卡为NAT模式,网卡名称都是ens33

 

真机的配置

真机a:网卡由DHCP自动配置,ip=192.168.18.129 网关gateway=192.168.18.254,真机a上搭建了上面的两台虚拟机,真机a系统为windowns 10

真机b:网卡由DHCP自动配置,ip=192.168.18.176 网关gateway=192.168.18.254,真机b系统为linux 7,网卡为无线网卡,但是真机b上也有一个virbr0的网卡ip也是192.168.122.1,并且真机b通过netstat -antulp查询也会发现这个192.168.122.1的网址再监听53号端口

上网查询发现:virbr0是一个虚拟的网络连接端口,默认为0号虚拟网络连接端口,通过虚拟机进行移植操作系统时,默认会以nat的网络地址转移

 

执行命令:

b ping 192.168.15.2 可以,

b ping 192.168.122.1 可以,

b ping 192.168.15.2 可以,

b ping a,即 b ping 192.168.15.131 可以

a ping www.baidu.com 可以,

b ping www.baidu.com 不通

真机a ping a,即真机a ping 192.168.15.131 可以

真机b ping a 不通

真机a ping b 不通

真机b ping 真机a 可以

a ping www.baidu.com 可以

b ping www.baidu.com 不通,报错为network or service not known。即外网不可用。

(注意:如果使用nmcli命令把虚拟机b改为DHCP自动分配ip,即nmcli connection modify ens33 ipv4.method auto

       那么执行之后,这个网卡的配置文件即/etc/sysconfig/network/ifcfg-ens33里面还是可以看到原来的ip和gateway、dns等信息

       而且使用 ip addr show 命令也会发现这个网卡上有两个ip配置,一个是通过DHCP自动获取的,另一个是原来手动配置的

       但是,这个时候在虚拟机b上 ping www.baidu.com 是可以联通的。

       但是,如果手动更改这个网卡的配置文件,比如将原有的ip gateway dns信息都注释掉,然后再输入nmcli命令把ipv4.method改成auto也不能上网

       必须重启虚拟机之后才能让你手动更改的配置文件生效。但是,如果你手动更改配置文件里的ip等信息却是可以通过ifconfig命令和ip addr show 命令查到的

       所以要想让虚拟机在自动和手动配置之间正确切换,就必须全都是用nmcli命令来实现。)

 

1. 现在修改b:

gateway=61.0.0.1

 

执行命令:

a ping b 不通,

b ping a 不通,

b ping 192.168.15.2 原网关不通,

b ping 192.168.122.1 可以

 

2. 修改b:

ip = 192.168.10.1 gateway改回192.168.15.2

 

执行命令:

a ping b 不通,

b ping a 不通,

b ping 192.168.15.2  原网关可以,

b ping 192.168.122.1 可以

真机a ping b 不通

 

 

 

3.修改b:

ip = 192.168.15.189 dns=192.168.121.2 gateway=192.168.15.2

 

执行命令:

a ping b 可以,

b ping a 可以,

b ping 192.168.15.2 可以

b ping 192.168.122.1 可以

 

4.修改真机b:

ip=192.168.10.111 gateway 192.168.18.254 dsn=192.168.122.1

 

执行命令:

真机b ping 192.168.18.254 不通

 

5.修改真机b:

ip=192.168.18.123 gateway 192.168.18.254 dsn=192.168.122.1

真机b ping 192.168.18.254 可以

 

6.修改真机b:

修改配置文件/etc/sysconfg/network-scripts/ifcfg-ens33:将ip改为192.168.18.126/24

 

执行命令:

ifconfig查看ip,未变化,还是192.168.18.123

输入ip addr show 查看ip,未变化,还是192.168.18.123

syetemctl restart NetworkManager

再输入ifconfig查看ip,没有了

然后再次输入ifconfig查看ip,变成了新的192.168.18.126/24

 

结论:

  1. 对于网关来说,如果这个网关存在,那么只要虚拟机的网关配置指向了它就可以联通,如果这个网关不存在,那么即使虚拟机的网关指向了它也不能联通

 

  1. 对于同一台真机上的虚拟机a和b,必须网关指向同一个可以联通的网关,并且ip在同一个区间段比如都是192.168.15.X段的才能联通

 

 

  1. 对于虚拟机上的虚拟端口virbr0,这个在机器里查到的是DNS服务段,但是无论网卡的ip、网关、还是dns设置成什么样,都可以联通。所以这个端口就好像是虚拟机上真实存在的一个硬件

 

  1. 但是如果真的把机器的dns指向了这个端口即192.168.122.1的话是无法访问外网的,只能访问到同一个ip段同一个网关内的另一台虚拟机.而且这个时候真机a可以联通虚拟机a却不能联通虚拟机b。这说明虚拟机在修改了gateway 和DNS之后其实这两个地址是无效的。

 

 

  1. 虚拟机a的子网掩码是24位的,虚拟机b的子网掩码是32。但是不影响两个机器之间联通。

 

  1. 如果使用修改配置文件的方法修改网卡的ip等配置,就一定要重启NetworkManager服务。这个现象在RH7.5是这样的,但是在RH7.2里还不是。当初学习Linux课的时候,老师使用7.2讲课的,后来自己使用的是7.5,所以在这个网卡配置文件是否生效的问题上困扰了很久。一直以为是只有重启虚拟机才能让手动更改的网卡配置文件生效。其实是在实际操作时只重启了网卡,但是这个并不会导致系统重新读取网卡的配置文件。但是如果使用nmcli命令修改的网卡配置,比如ipv4.method从manual 变成auto,那么只要重启网卡就可以生效了。

 

 

  1. 虚拟机和linux真机上都有一个虚拟网卡,ip地址是192.168.122.1,这个地址任何情况下都能ping通,而且使用netstat -antulp命令查询会发现这个ip在监听系统的53号端口,但是这个并不意味着真正的DNS服务器地址就是192.168.122.1。所以当你手动配置网卡时把dns指向了这个地址也就无法链接外网了,也不能解析域名,只能链接同一个ip段内的同一个网关之下的其他虚拟机。

 

  1. 所以总体来说,一台虚拟机能否联通外网以及能否被其所寄存的真机,估计主要就是DNS是否设置正确。

你可能感兴趣的:(关于虚拟机之间是否可以联通的问题)