win10+Vmware+ubuntu18 mosquitto调试记录

记录一下在建立mqtt调试环境上遇到的问题及对策。

我的PC环境为,win10为办公环境,Vmware虚拟机安装ubuntu18,虚拟机主要用来进行代码编译,建立mosquitto server测试环境。

1. ubuntu 安装mosquitto

安装mosquitto网上很多教程,这里简单列举一下:

sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
这一步我遇到了gpg key timeout的错误,猜测应该是外网连线的问题,毕竟大陆现在访问github不太稳定,加上我已经将更新源设置为华为的镜像地址,所以跳过这步。

sudo apt-get update 
sudo apt-get install mosquitto        //安装mosquitto broker
sudo apt-get install mosquitto-clients        //安装mosquitto client

/etc/mosquitto/conf.d目录下,添加配置文件myconfig.conf 配置文件:

sudo gedit /etc/mosquitto/conf.d/myconfig.conf

粘入下面这些配置:

#添加监听端口(很重要,否则只能本机访问)
listener 1883
#-------------------------------------------
# 关闭匿名访问,客户端必须使用用户名
allow_anonymous false

#指定 用户名-密码 文件
password_file /etc/mosquitto/pwfile.txt
#--------------------------------------------

添加账户及密码

sudo mosquitto_passwd -c /etc/mosquitto/pwfile.txt 用户名

回车后连续输入2次用户密码即可。

启动mosquitto

可以有以下两种方式,第一种是使用默认配置 /etc/mosquitto/mosquitto.conf,启动命令如下:

sudo service mosquitto start 

另一种是指定使用哪一个配置文件,启动命令如下:

 sudo mosquitto -c /etc/mosquitto/conf.d/myconfig.conf -v

 查看mosquitto运行状态

sudo service mosquitto status

运行本机local测试:

订阅主题(新开一个终端1)

 mosquitto_sub -h localhost -t "lai001/#" -u 用户名 -P 密码 -i “client1”

发布主题(新开一个终端2) 

mosquitto_pub -h localhost -t "lai001/testTopic" -u 用户名 -P 密码 -m "Hello MQTT from mosquitto-clients" 

 因为我的ubuntu版本是18.0x的,这个版本上支持的最新的mosquitto版本为v1.4.5,支持到MQTT  3.1。

到这里虚拟机上的mosquitto server安装完毕了,此时遇到一个问题,本机localhost测试没有问题,可以正常pub/sub,但是外网的PC无法connect上ubuntu的mosquitto server。进一步测试发现,我的ubuntu虚拟机能够ping通外网的PC,但是外网的PC无法ping通虚拟机的IP。

这个问题的原因是因为主机WIN10的Vmware的网络连接设定问题导致:

 我原来设定为NAT模式下的固定IP(方便win10下映射网络驱动盘),但实际发现NAT模式下,虚拟机的网络功能一切正常,就是没办法被其他设备(除了win10主机)ping通。

参考网上的教程将Vmware的网络连接设定为桥接模式后,修复了这个问题。

有几个地方记录一下:

需要将Vmware的权限设定为管理员权限启动,要不然看不到VMnet0,无法设定为桥接模式。

引用其他博主桥接模式下的win10主机及Vmware虚拟机与Ubuntu设定如下:

桥接模式下的网络设置

2.1 真实主机设置
使用桥接模式,首先要设置用于桥接的真实主机的网卡(一般是连接外网的网卡)。以win10为例,点击右下角网络和Internet设置-更改适配器选项,找到连接外网的网卡(我的就是下图中2位置啦),右键-属性,在WLAN属性中选中VMware Bridge Protocol,然后确定即可。

image-20210428142331979

2.2 VMware虚拟交换机设置
设置好真实主机配置后,接下来需要设置VMware虚拟交换机的网络设置。

image-20210427185925792

 如上图,点击VMware上编辑-虚拟网络编辑器进入网络设置页面(下图)。你的界面有可能看不到VMnet0选项,按照上述方法解决。然后按下图,依次选择2处桥接模式,桥接位置3处选择你的真实主机连接外网的那块网卡,点击4处确定。

image-20210427185840652

 虚拟机设置

接下来就需要设置VMware上的虚拟主机设置,如下图所示,在虚拟机关闭的情况下,依次点击编辑虚拟机设置-网络适配器-启动时连接-桥接模式。点击右上角关闭按钮,设置完成。

image-20210428104426089

接下来,为了方便我们在win10下开发,将ubuntu设定为固定IP的方式比较友好。

在ubuntu中设定网络,wired Settings。

 

 使用固定IP上网,则需要选择手动模式,此时需要设置IP地址,子网掩码,默认网关等。先在真实主机(假定为windows系统)上使用ipconfig命令查看下真实主机的IP地址,子网掩码,默认网关等。下面3、4处子网掩码和网关填写与真实主机相同的参数,IP地址保证与真实主机的IP地址在同一网段即可。DNS可以选择自动或者手动,手动模式下也保持和真实主机的设置一致即可。

 

 ubuntu系统文件设置

为了保证ubuntu虚拟机后续重新开机后保持这个固定IP,最后咱还需要设置一下系统文件。

首先,在虚拟机终端中,输入命令ifconfig,可以找到我们设置的希望用于和真实主机及外网通信的网卡名称,如下图,我的网卡名称是ens33,对应IP地址已经是我前面设置的静态IP了; 

 修改/etc/netplan/01-network-manager-all.yaml文件:

sudo gedit /etc/netplan/01-network-manager-all.yaml

 编辑为如下内容,将固定IP,gateway,NDS等信息填入:

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    ens33:                      #网卡名,以ubuntu操作系统的网卡名称为准
      dhcp4: no                 #ipv4关闭dhcp,用static模式
      dhcp6: no                 #ip6关闭dhcp
      addresses:
        - 192.168.31.130/24     #本机IP地址
      gateway4: 192.168.31.1    #vmware网关的的IP地址
      nameservers:              #DNS服务器
        addresses: [114.114.114.114, 8.8.8.8, 1.1.1.1]

 修改配置后先测试一下:

sudo netplan try

如果测试通过,再应用配置:

 sudo netplan apply

重启网络服务:

sudo service network-manager restart 

 至此,网络环境已经全部设定好。重启Vmware与ubuntu后,分别测试 虚拟机与主机,虚拟机与外网机器互ping(同网段下),都可以正常ping通。

此时,在ubuntu启动mosquitto broker/mosquitto_pub/mosquitto_sub,在另外一台PC上使用MQTT tool,我使用的是MQTT explorer,连接ubuntu上的mosquitto broker,测试pub与sub主题,ubuntu server上的mosquitto_sub可以收到MQTT explorer pub的数据,MQTT explorer可以收到ubuntu server上的mosquitto_pub的数据,测试环境建立完成。

补充一下,桥接模式需要win10主机一定要有网络连接,才能远程访问虚拟机,这样当没有网络环境时,开发会很麻烦,所以在没有网络连接的情况下,需要使用Vmware的NAT模式来启动ubuntu,这样WIN10主机可以远程访问虚拟机了。

记录一下NAT模式的设定:

1.WIN10主机先设定“VMware Virtual Ethernet Adapter for VMnet8” 这张虚拟网卡的IP,将其设定为与ubuntu IP(192.168.31.130)为同一网段,我这里设置为 192.168.31.1,如下:

控制面板->网络和 Internet->网络和共享中心->更改适配器设置

VMware Virtual Ethernet Adapter for VMnet8 ->鼠标右键->属性

Internet协议版本4(TCP/IPv4)->鼠标右键->属性

 2.Vmware设定如下:

设定“虚拟网络编辑器” -> VMnet8子网地址(与192.168.3.1同一网段)

 编辑虚拟机设置 -> 选择NAT模式

 启动虚拟机,此时WIN10主机与ubuntu在同一网段,就可以通过VMnet8这张虚拟网卡远程访问ubuntu虚拟机了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值