路由表和虚拟机网络

宿主机的路由表,同时,由于我安装了VMware,因此多了几个虚拟设备

# lihui at MacBook.local in ~ on git:master x [0:05:10]
$ netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            192.168.0.1        UGSc           49        0     en0
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH              6      743     lo0
169.254            link#4             UCS             0        0     en0
192.168.0          link#4             UCS             1        0     en0
192.168.0.1/32     link#4             UCS             1        0     en0
192.168.0.1        6c:59:40:49:5e:92  UHLWIir        51      565     en0   1077
192.168.0.101      e0:6:e6:c6:98:d6   UHLWI           0      192     en0   1200
192.168.0.103/32   link#4             UCS             0        0     en0
192.168.135        link#10            UC              1        0  vmnet1
192.168.135.128    0:c:29:87:c5:fe    UHLWIi          2      215  vmnet1    701
192.168.226        link#11            UC              1        0  vmnet8

虚拟机网络设置host-only模式

这时候会默认用到vmnet1,它其实是一个虚拟交换机,但是要注意的是,上面也有个vmnet1,这里的vmnet1实际上是VMware Network Adapter VMnet1,是为了宿主机和虚拟机进行通信而虚拟出来的一个网卡

# lihui at MacBook.local in ~ on git:master x [0:03:15]
$ ifconfig vmnet1
vmnet1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether 00:50:56:c0:00:01
	inet 192.168.135.1 netmask 0xffffff00 broadcast 192.168.135.255

虚拟交换机一个端口连接了宿主机的虚拟网卡,另外VMware里还有一个虚拟DHCP服务器,一个端口连接它,还有端口连接虚拟机网卡,这样虚拟机网卡的IP地址就分配得和vmnet1处在同一个网段上,这样宿主机和虚拟机之间建立了一个虚拟局域网

打开虚拟机后,ifconfig和路由表的结果如下

lihui@2015-vm1:~$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0c:29:87:c5:fe
          inet addr:192.168.135.128  Bcast:192.168.135.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe87:c5fe/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:201 errors:0 dropped:0 overruns:0 frame:0
          TX packets:151 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:18837 (18.8 KB)  TX bytes:32073 (32.0 KB)

lihui@2015-vm1:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
192.168.135.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0

可见的确虚拟机网卡分配了同一网段192.168.135.0/24的IP,从宿主机和虚拟机的路由表都可以看出来,宿主机能找到虚拟机的IP,虚拟机里能找到宿主机的网段,他们俩是可以相互访问的,但是他们两之间的私人局域网和宿主机本身的局域网是相互独立的,没法连通,所以虚拟机是无法连接外网的,也就是host-only相当于是一个与世隔绝的两者世界,他们俩就像使用一根网线进行直连

其实这种模式我挺喜欢的,虚拟机里搭建一个openstack,只需要宿主机能够SSH进去操作即可

 

 

虚拟机设置成NAT模式

这时候会默认用到vmnet8,它其实也是一个虚拟交换机,上面宿主机的信息里的vmnet8实际上是VMware Network Adapter VMnet8,也是为了宿主机和虚拟机进行通信而虚拟出来的一个网卡,只不过此时是NAT模式

# lihui at MacBook.local in ~ on git:master x [0:27:56]
$ ifconfig vmnet8
vmnet8: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether 00:50:56:c0:00:08
	inet 192.168.226.1 netmask 0xffffff00 broadcast 192.168.226.255

与host-only类似,虚拟交换机连接vmnet8,虚拟DHCP服务器,虚拟机的虚拟网卡,很容易看到这里虚拟DHCP服务器会给虚拟机虚拟网卡分配一个192.168.226.0/24网段的IP地址,但不同的是,还连接了一个虚拟NAT服务器,通过NAT服务器,虚拟机借助NAT功能,通过宿主机所在的网络访问互联网

正常情况下NAT协议对外网隐藏了内部网络,因此往往NAT的时候,可以从虚拟机里访问局域网的其它主机,但是反过来就不行了,在scp的时候应该经常会遇到,这种模式基本只要宿主机能够访问外网,虚拟机也能够访问

但碰到个怪事,不仅可以直接ssh进虚拟机,而且还能外面scp,试了下,的确可以相互scp,我也是醉了,难不成记错了?明天windows下vmware试试

# lihui at MacBook.local in ~ on git:master x [1:11:51]
$ ssh lihui@192.168.226.135
The authenticity of host '192.168.226.135 (192.168.226.135)' can't be established.
RSA key fingerprint is 75:31:c2:51:09:a5:56:4f:80:3d:1c:de:56:d5:bf:9f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.226.135' (RSA) to the list of known hosts.
lihui@192.168.226.135's password:
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.16.0-30-generic x86_64)

# lihui at MacBook.local in ~ on git:master x [1:15:42]
$ scp nvs.py lihui@192.168.226.135:/home/lihui
lihui@192.168.226.135's password:
nvs.py                                                                                                                        100%   27KB  27.4KB/s   00:00

 

先进去看下路由表

lihui@2015-vm1:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.226.2   0.0.0.0         UG    0      0        0 eth0
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0
192.168.226.0   *               255.255.255.0   U     0      0        0 eth0

访问宿主机的话,的确同宿主机的vmnet8同一网段,宿主机访问192.168.226网段,走vmnet8,的确也可以访问虚拟机,这么看来根据路由规则相互访问是没问题的,看来要么我醉了,要么我傻了~!

其实这个vmnet8仅仅是供宿主机和虚拟机来访问,对其它的没任何帮助,比如手动down掉它

# lihui at MacBook.local in ~ on git:master x [1:53:39]
$ sudo ifconfig vmnet8 down
Password:

# lihui at MacBook.local in ~ on git:master x [1:54:14]
$ netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            192.168.0.1        UGSc           15        0     en0
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH              6      196     lo0
169.254            link#4             UCS             0        0     en0
192.168.0          link#4             UCS             1        0     en0
192.168.0.1/32     link#4             UCS             1        0     en0
192.168.0.1        6c:59:40:49:5e:92  UHLWIir        17      458     en0   1186
192.168.0.104/32   link#4             UCS             0        0     en0
192.168.0.106      link#4             UHRLWI          0      157     en0
192.168.135        link#10            UC              1        0  vmnet1

然后ping都ping不通,更别说ssh了

# lihui at MacBook.local in ~ on git:master x [1:56:45]
$ ping 192.168.226.135
PING 192.168.226.135 (192.168.226.135): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3

 

 

虚拟机设置成Bridge模式

桥接模式就比较简单了,默认会用到vmnet0虚拟交换机,但是你却找不到虚拟的网卡VMware Network Adapter VMnet0

# lihui at MacBook.local in ~ on git:master x [1:37:33]
$ ifconfig vmnet0
ifconfig: interface vmnet0 does not exist

这是因为你指定了桥接的网卡后,虚拟交换机一个端口会连接桥接的网卡,一个端口连接虚拟机的网卡,这样就跟宿主机局域网加了一台主机没什么差别,而且如果是DHCP分别IP地址,会分配一个和宿主机网卡同一个网段的IP地址,当然可以相互访问,都可以访问外网

查看下虚拟机路由表

lihui@2015-vm1:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
lihui@2015-vm1:~$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0c:29:87:c5:fe
          inet addr:192.168.0.106  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe87:c5fe/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:175 errors:0 dropped:0 overruns:0 frame:0
          TX packets:140 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:18455 (18.4 KB)  TX bytes:20847 (20.8 KB)

宿主机192.168.0.0/24网段,网关192.168.0.1,显然想干啥就能干啥

 

 

最后还是有点怀疑是否夜深人静,我脑袋抽经,NAT居然互相访问,从路由来看,的确没问题,明天再确认下~!

发表回复