高端网站建设服务,丰富网站内容,营销策划案,深圳优化猫记录一下在建立mqtt调试环境上遇到的问题及对策。
我的PC环境为#xff0c;win10为办公环境#xff0c;Vmware虚拟机安装ubuntu18#xff0c;虚拟机主要用来进行代码编译#xff0c;建立mosquitto server测试环境。
1. ubuntu 安装mosquitto
安装mosquitto网上很多教程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然后确定即可。 2.2 VMware虚拟交换机设置 设置好真实主机配置后接下来需要设置VMware虚拟交换机的网络设置。 如上图点击VMware上编辑-虚拟网络编辑器进入网络设置页面(下图)。你的界面有可能看不到VMnet0选项按照上述方法解决。然后按下图依次选择2处桥接模式桥接位置3处选择你的真实主机连接外网的那块网卡点击4处确定。 虚拟机设置
接下来就需要设置VMware上的虚拟主机设置如下图所示在虚拟机关闭的情况下依次点击编辑虚拟机设置-网络适配器-启动时连接-桥接模式。点击右上角关闭按钮设置完成。 接下来为了方便我们在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 编辑为如下内容将固定IPgatewayNDS等信息填入 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协议版本4TCP/IPv4-鼠标右键-属性 2.Vmware设定如下
设定“虚拟网络编辑器” - VMnet8子网地址与192.168.3.1同一网段 编辑虚拟机设置 - 选择NAT模式 启动虚拟机此时WIN10主机与ubuntu在同一网段就可以通过VMnet8这张虚拟网卡远程访问ubuntu虚拟机了。