1 前言
最近在安装的虚拟机上面用mosquitto搭建MQTT服务器,但是很奇怪的是每次电脑上的测试软件能顺利连接服务器,但是连接电脑热点的外部设备却不行,让我很是困惑。
找了一下午的问题,终于,无意间发现虚拟机上面的服务器连接提示上面给出了连接IP,经过比对发现并不是电脑实际的IP,才突然想到可能是虚拟机的NAT模式 和桥接模式的问题。
2 桥接模式和NAT模式有什么区别
所谓桥接模式,即虚拟机和物理机共享一个物理网卡,即虚拟机是通过物理网卡上网的,它和主机都是在物理网卡连接的局域网内,地位是对等的,虚拟机对外是可见的,其他该局域网上的设备是能够访问到该虚拟机的
而所谓NAT模式,即是物理机通过虚拟机网卡(VMware提供的)给虚拟机供网,也就是说此时主机和虚拟机之间构建了一个局域网,这个局域网对主机外的设备是不可见的,因此和主机物理网卡同局域网的设备是不能够访问虚拟机的,同时,如果主机访问虚拟机,虚拟机那边显示的访问IP也不是主机的局域网IP,而是主机和虚拟机构建的局域网中对应的IP,一般来说这个IP在装完VMware软件和虚拟机之后就确定了的(默认配置)。
因此,上面提到的问题也非常明显了,如果外部设备连接的是主机的热点,那么实际上外部设备和主机所在的局域网、主机和虚拟机所在的局域网,二者之间是不互通的,当然无法进行通信了。
那问题来了,一个虚拟机我到底应该选择什么模式呢?我的观点是如果主要目的是为了上网,那么建议选择NAT模式,如果需要被外部设备发现,即和除主机外的局域网设备进行通信,那就要切换成桥接模式了。
下面再来看看在CentOS当中怎么设置桥接模式,使得设备具有静态IP,这样便于外部设备访问。主要就是设置ens33
这个网卡。
不过在设置之前,还需要查看一下主机的信息,在Windows shell中输入ipconfig /all
(加上all才能看到DNS)
然后再编辑虚拟机网卡配置:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
#除了将最后的ONBOOT改为yes外,还需要添加下面几行
GATEWAY=192.168.166.78 #这个是主机的IP
NETMASK=255.255.255.0 #子网掩码和主机一致
DNS1=192.168.166.78 #DNS服务器也和主机一致,当然也可以设置为通用的8.8.8.8
以上这些设置是在BOOTPROTO
设置为dhcp
的前提下设置的,虽然我们的目标是设置静态IP,但实测发现只要是同一个WiFi,如手机热点,那么每次连接时动态分配的IP都是固定的,基本等同于静态IP。
当然,如果实在不放心,还可以直接设置为静态IP:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.166.78 #这个是主机的IP
NETMASK=255.255.255.0 #子网掩码和主机一致
DNS1=192.168.166.78 #DNS服务器也和主机一致,当然也可以设置为通用的8.8.8.8
# 除了上面的设置外,还需要取消dhcp,同时手动指定IP
BOOTPROTO=none #静态IP可以设置为none或static【注意,这个是修改项,不是添加项】
IPADDR=192.168.166.80 #手动拟定一个IP,要求和子网掩码对应,建议尽量靠近主机
配置完成后,再输入ip addr
就可以看到IP地址。
3 校园网环境下配置桥接模式
部分高校的校园网是会卡这种静态IP的,也就是按照上面的这种设置很有可能不会成功,那怎么办呢?最简单的可能就是设置MAC地址,即在上面的网卡配置文件当中指定MAC地址。
vi /etc/sysconfig/network-scripts/ifcfg-ens33
#添加下面一项
MACADDR=10-23-11-11-11-11 #主机的MAC地址(Physical Address)
这样做的目的很明显,那就是用虚拟机假冒主机来实现用主机的IP上网
参考链接