分类: 服务器

服务器

MQTT简单服务器搭建

搭建自己的MQTT服务器

 

MQTT协议是广泛应用的物联网协议,使用测试MQTT协议需要MQTT的代理。有两种方法使用MQTT服务,一是租用现成的MQTT服务器,如阿里云,百度云,华为云等公用的云平台提供的MQTT服务,使用公用的MQTT服务器的好处是省事,但如果仅仅用于测试学习还需要注册帐号,灵活性差些,有的平台还需要付费。另一方法是自己使用开源的MQTT组件来搭建。

MQTT服务器非常多,如apache的ActiveMQ,emtqqd,HiveMQ,Emitter,Mosquitto,Moquette等等。

这里介绍的是用轻量级的mosquitto开源项目来搭建一个属于自己的MQTT服务器。

*步:需要安装一台linux主机,这不多介绍,可以使用真机安装也可以使用虚拟机安装。如果仅仅是自己测试使用都可以。

第二步:下载mosquitto需要的依赖

sudo apt-get install libssl-dev

sudo apt-get install uuid-dev

sudo apt-get install cmake

 

第三步:下载mosquitto并解压,现在mosquitto官网*新的版本是1.5.4  http://mosquitto.org/download/

tar xzvf mosquitto-1.5.4.tar.gz

第四步:编译

cd mosquitto-1.5.4/

make

make install

第五步:启动mosquitto

mosquitto -v

1535473957: mosquitto version 1.5.1 starting

1535473957: Using default config.

1535473957: Opening ipv4 listen socket on port 1883.

1535473957: Opening ipv6 listen socket on port 1883.

可能遇到的问题:Error: Invalid user ‘mosquitto’.

解决方法: 编译安装后/etc/mosquitto/mosquitto.conf.example模板重命名,修改“user root(可以是其他登录的用户名)”;启动的时候指定新的配置文件:mosquitto -d -c /etc/mosquitto/mosquitto.conf

这时候mosquitto就会以默认的参数启动。如果需要带配置文件可以修改配置文件mosquitto.conf,

启动时候加上参数 -c,

mosquitto -c mosquitto.conf

可以看到,mosquitto监听的端口为1883.

这时候我们的MQTT服务器就搭建好了。可找一个mqtt客户端来测试一下。

先发布一个主题“home/garden/fountain/2”

内容是“hello world”

%title插图%num

这时候在mosquitto会打印出下面的log

535474247: New connection from 192.168.1.105 on port 1883.

1535474247: New client connected from 192.168.1.105 as MQTT_FX_Client (c1, k60).

1535474247: No will message specified.

1535474247: Sending CONNACK to MQTT_FX_Client (0, 0)

1535474307: Received PINGREQ from MQTT_FX_Client

1535474307: Sending PINGRESP to MQTT_FX_Client

1535474339: Received PUBLISH from MQTT_FX_Client (d0, q0, r0, m0, ‘home/garden/fountain/2’, … (12 bytes))

1535474367: Received PINGREQ from MQTT_FX_Client

1535474367: Sending PINGRESP to MQTT_FX_Client

 

订阅主题“home/garden/fountain/2”

%title插图%num

可以看到收到了自己发布的消息。

用wireshark抓包

%title插图%num

可以看到抓到了一个MQTT的publish的报文

分享一个MQTT服务器

公共接入 Broker 没有隐私保护,任何设备都可以在上面发布和订阅主题。 切勿在生产中使用。
“brokerAddress” : “zy19970.club”
“brokerPort” : “1883”
“userName” : “MqttTest”,
“password” : “mqtttest”,

{
“connectionProfiles” : [ {
“recentSubscriptionTopics” : [ ],
“recentPublishTopics” : [ ],
“preDefinedMessages” : [ ],
“brokerAddress” : “zy19970.club”,
“brokerPort” : “1883”,
“lastPublishTopic” : null,
“lastSubscriptionTopic” : null,
“profileName” : “Share”,
“profileType” : “MQTT_BROKER”,
“scriptsPath” : “”,
“connectionOptions” : {
“clientId” : “paho23403404524600”,
“connectionTimeout” : 30,
“keepAliveInterval” : 60,
“mqttVersionUseDefault” : true,
“mqttVersion” : “3.1.1”,
“cleanSession” : true,
“automaticReconnect” : false,
“maxInflight” : 10,
“userName” : “MqttTest”,
“password” : “mqtttest”,
“lwtQos” : 0,
“lwtRetained” : false,
“lastWillDestination” : “”,
“testament” : “”,
“useProxy” : false,
“useHttpsProxy” : false,
“httpsProxyHost” : “”,
“httpsProxyPort” : “”,
“httpProxyHost” : “”,
“httpProxyPort” : “”,
“httpProxyUser” : “”,
“httpProxyPassword” : “”,
“httpProxyHeaderUserAgent” : “defaultClient”,
“enableSSLTLS” : false,
“sslTlsProtocol” : “TLSv1.2”,
“certificateFilesPemFormat” : false,
“selfCreatedCaFile” : “”,
“caFile” : “”,
“clientCertificateFile” : “”,
“clientKeyFile” : “”,
“clientKeyPassword” : “”,
“useSelfCreatedCA” : false,
“useServerSignedCertificate” : false,
“useTrustedKeystoreFile” : false,
“useCertificateFiles” : false,
“useKeystoreFiles” : false,
“clientKeystoreFilesPemFormat” : false,
“trustedKeystoreOnlyFile” : “”,
“trustedKeystoreOnlyPassword” : “”,
“trustedKeystoreFile” : “”,
“trustedKeystoreAlias” : “”,
“trustedKeystorePassword” : “”,
“clientKeystoreFile” : “”,
“clientKeystorePassword” : “”,
“clientKeyPairAlias” : “”,
“clientKeyPairPassword” : “”
},
“notificatonsEnabled” : false,
“showLastestMessagesOnly” : false,
“lastSelectedPayloadDecoderId” : “plain_text_decoder”,
“googleCloudIotOptions” : {
“projectId” : “ENTER-YOUR-IOT-PROJECT-ID”,
“registryId” : “ENTER-YOUR-REGISTRY-ID”,
“deviceId” : “ENTER-YOUR-DEVICE-ID”,
“cloudRegion” : “us-central1”,
“privateKeyFile” : “rsa_private_pkcs8”,
“algorithm” : “RS256”,
“mqttBridgeHostname” : “mqtt.googleapis.com”,
“mqttBridgePort” : 443
}
} ]
}

如果您使用感觉方便,欢迎支持!

国内外免费公用mqtt测试服务器推荐

引言
mqtt协议在物联网开发中十分重要,测试过程中我们的程序一般都是mqtt客户端,往往需要mqtt服务器来配合测试,此时我们有三种方法:

1.本地搭建mqtt服务器
此种方法只可以在本地使用,无法接入外网。更适用于本地测试开发。

2. 租用远程mqtt服务器
此种方法可以接入外网,可以管理mqtt服务器,但需要money

3. 使用开源远程mqtt测试服务器
此种方法可以接入外网,但不可以管理mqtt服务器,但是免费,满足基本测试需求。

这里主要介绍一下远程mqtt测试服务器。

国内外免费mqtt测试服务器推荐
国内测试站点
%title插图%num

注意:国内的test.jmqtt.io不是很稳定,有时无法连接,建议使用下面得到国外站点。

国外可用的站点:

%title插图%num

注:有时有的站点用不了,切换其他的试下即可。

一个免费的公用mqtt服务器

使用mqtt fx软件的时候发现他自带的那个配置上的服务器就连接的上,可以用来做测试:

mqtt.eclipse.org

端口:1883

%title插图%num

这个服务器只能用作测试,发现Linux上有个浏览器可以查看服务器上的消息并有管理权限

阿里云服务器实现 frp 内网穿透

前言
前几天在一台具有公网IP的 vultr 云服务器上实现了 frp 内网穿透(参考链接),可以从寝室 ssh 登录到教研室的服务器,但是由于 vultr 的云服务器位于国外的节点,连接速度太慢了,导致连接 ssh 登录的体验很差。今天又弄了一台阿里云的云服务器 ECS,所以现在来介绍如何在阿里云上实现 frp 内网穿透。

配置 ssh 访问内网机器
之前使用的 vultr 的VPS是 CentOS 系统的,这次阿里云服务器是 Ubuntu 的操作系统,但其实不同操作系统的云服务器在使用 frp 时操作都是一样的,就是下载,配置,运行。可能有区别的地方就是防火墙相关的配置,不同云服务厂商的镜像不同可能也有一些差别。下面来说明在阿里云的公网服务器的 frp 实现步骤:

下载
在阿里云的公网服务器和内网机器上都要下载安装包并解压:

$ wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz
$ tar -xzvf frp_0.21.0_linux_amd64.tar.gz

解压之后的文件夹中既包含了服务端的文件又包括客户端的文件,所以可以分别在两个机器上删除掉不必要的文件,也可以不删,都没有影响。强迫症还是来删一下,在解压后的文件夹中:

在公网服务器上删除客户端相关的文件,只保留一下两个文件:

frps frps.ini

在内网机器上删除服务端相关的文件,只保留以下两个文件:

frpc frpc.ini
配置
就是需要修改配置文件 frps.ini 及 frpc.ini。

修改公网服务器上的服务端配置文件 frps.ini,如下:

[common]
bind_port = 7000 #frp服务端端口(必须)

修改内网目标主机的客户端配置文件 frpc.ini,如下:

[common]
server_addr = xxx.xxx.xxx.xxx #frp服务端地址,必须是公网ip或者域名,这里假设为xxx.xxx.xxx.xxx
server_port = 7000 #frp服务端端口,即填写服务端配置中的 bind_port

[ssh]
type = tcp #连接类型,填tcp或udp
local_ip = 127.0.0.1 #填127.0.0.1或内网ip都可以
local_port = 22 #需要转发到的端口,ssh端口是22
remote_port = 6000 #frp服务端的远程监听端口,即你访问服务端的remote_port就相当于访
#问客户端的 local_port,如果填0则会随机分配一个端口

运行
在公网服务器上运行服务端程序:

$ nohup ./frps -c frps.ini &

查看 nohup.out 的信息,success

$ tail -f nohup.out
2018/09/17 21:34:01 [I] [service.go:130] frps tcp listen on 0.0.0.0:7000
2018/09/17 21:34:01 [I] [root.go:207] Start frps success
2018/09/17 22:06:02 [I] [service.go:319] client login info: ip [125.71.229.32:60516] version [0.21.0] hostname [] os [linux] arch [amd64]
2018/09/17 22:06:02 [I] [proxy.go:217] [7940291c148c2fca] [ssh] tcp proxy listen port [6000]
2018/09/17 22:06:02 [I] [control.go:335] [7940291c148c2fca] new proxy [ssh] success

在内网目标主机上运行客户端程序:

$ nohup ./frpc -c frpc.ini &

查看 nohup.out 的信息,success

$ tail -f nohup.out
2018/09/17 22:42:22 [I] [proxy_manager.go:300] proxy removed: []
2018/09/17 22:42:22 [I] [proxy_manager.go:310] proxy added: [ssh1]
2018/09/17 22:42:22 [I] [proxy_manager.go:333] visitor removed: []
2018/09/17 22:42:22 [I] [proxy_manager.go:342] visitor added: []
2018/09/17 22:42:23 [I] [control.go:246] [0624b332c3465118] login to server success, get run id [0624b332c3465118], server udp port [0]
2018/09/17 22:42:23 [I] [control.go:169] [0624b332c3465118] [ssh1] start proxy success

配置多个内网主机
错误的多客户端配置
使用一台阿里云的公网服务器,我们可以配置很多内网机器的 frp 内网穿透,公网服务器上只需要按照上述的配置一次即可,但是内网机器的配置稍有不同,如果使用了一样的配置则后添加的内网机器是无法连接上公网服务器的。这里假设另一台内网机器2的 frpc.ini 配置如下,来说明会遇到的问题:

$ vi frpc.ini
[common]
server_addr = xxx.xxx.xxx.xxx <==这里还是按照上面的假设,公网服务器的ip为xxx.xxx.xxx.xxx
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6001 <==remote_port设置为另一个值

两个内网主机的配置除了 remote_port 不一样之外,都是一样的。但是在内网机器2上运行 frpc 后,公网服务器的 nohup.out 中会记录一下的错误:

[W] [control.go:332] [280d36891a6ae0c7] new proxy [ssh] error: proxy name [ssh] is already in use

后来发现,frp 中是通过 [ssh] 这个名字来区分不同客户端的,所以不同的客户端要配置成不同的名字。

正确的多客户端配置
内网机器1和内网机器2的配置应该区分如下:

内网机器1:
[ssh] <==不同点
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000 <==不同点

内网机器2:
[ssh1] <==不同点
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6001 <==不同点

在两个内网机器上分别运行 frpc 客户端程序后,一般就可以通过以下的方法 ssh 登录:

内网机器1:
$ ssh -p 6000 user_name1@server_addr

内网机器2:
$ ssh -p 6001 user_name2@server_addr

以上参数中,server_addr是公网服务器的公网ip;user_name1、user_name2 分别是内网机器1、2的用户名,之后分别使用登录密码就可以登录。

connection timed out 解决
但是有时候会发现按照以上的配置还是使 frp 的服务端与客户端建立连接,在客户端上会出现以下错误:

2018/09/17 22:02:23 [W] [control.go:113] login to server failed: dial tcp xxx.xxx.xxx.xxx:7000: connect: connection timed out
dial tcp xxx.xxx.xxx.xxx:7000: connect: connection timed out

仔细检查了一下云服务器上面的防火墙设置,发现并没有任何过滤规则,那应该不是防火墙的问题

# iptables -vnL
Chain INPUT (policy ACCEPT 46165 packets, 28M bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 42223 packets, 3001K bytes)
pkts bytes target prot opt in out source destination

然后又仔细想了一下我以前在做关于 OpenStack 的项目中也碰到了类似的问题,就是创建了云实例,发现无法通过 ssh 来登录,就是因为 OpenStack 有安全组规则相关的设置。

想到了这里就有一种熟悉的感觉,还是原来的配方,hahaha。。。

登录到阿里云对应云服务器的管理控制台,如下找到左上方的本实例安全组:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tun0BAfr-1612859329577)(https://raw.githubusercontent.com/cao0507/My-Pictures-Repository/master/blog/aliyun%20instance%20info.jpg)]

然后点击右上角的配置规则:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ZhP1IfJ-1612859329578)(https://raw.githubusercontent.com/cao0507/My-Pictures-Repository/master/blog/aliyun%20group%20rules.jpg)]

再点击右上角的添加安全组规则:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GKvNLe1q-1612859329579)(https://raw.githubusercontent.com/cao0507/My-Pictures-Repository/master/blog/aliyun%20groups%20rules%20setting.jpg)]

*后在添加安全组规则的界面添加相应的规则:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zkx1nfaH-1612859329581)(https://raw.githubusercontent.com/cao0507/My-Pictures-Repository/master/blog/aliyun%20group%20rules%20adding.jpg)]

主要有两个配置项,端口范围和授权对象

端口范围就是你要开放的端口的范围,需要将 server_port 和 remote_port 都添加进去,可以分成两条规则分别添加;
授权对象是你要授权的对象,一般设为 0.0.0.0/0 表示允许所有IP的访问。
以上就是针对阿里云的云服务器的安全组设置,其他厂商如果有安全组规则也应该是类似的。

 

linux系统上内网ip和和外网ip的关系

1.不同服务之间的访问需要使用公网IP+端口才能访问

2.服务器上一般都是域名访问,服务器会把ip+端口映射成固定的域名,所以如果想访问服务器上其他应用,就必须的放开应用限制

问题,在服务器上放开对某个端口的限制。

问题:

背景:jmeter压力机放在服务器上,控制机在本地,控制机会发送命令给服务器上的压力机,压力机会进行并发压测,压测完了后会返回压测结果给控制机。

1.保证压力机能访问到控制机,控制机也要能访问到压力机

现在压力机启动jmeter-server,启动的ip不是公网ip,如图:

%title插图%num

但是没有关系:因为一个公网ip会映射多个内网ip,端口不会重复,所以访问时只需要用公网ip+应用本身占的ip,不用管应用启起来所占的ip。

服务器的公网ip 和内网ip

服务器公网ip

可以用于域名解析ip,服务器远程登录ip,是*主要的服务器ip地址。

内网ip
不能用于域名解析。
不可以直接用于服务器远程登录,其主要作用是:跟当前帐号下的其他同集群的机器通信。
一些小型企业或者学校,通常都是申请一个固定的IP地址,然后通过IP共享(IP Sharing),使用整个公司或学校的机器都能够访问互联网。而这些企业或学校的机器使用的IP地址就是内网IP,内网IP是在规划IPv4协议时,考虑到IP地址资源可能不足,就专门为内部网设计私有IP地址(或称之为保留地址),一般常用内网IP地址都是这种形式的:10.X.X.X、
172.16.X.X-172.31.X.X、192.168.X.X等。需要注意的是,内网的计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。
公网IP就是除了保留IP地址以外的IP地址,可以与Internet上的其他计算机随意互相访问。我们通常所说的IP地址,其实就是指的公网 IP。互联网上的每台计算机都有一个独立的IP地址,该IP地址唯一确定互联网上的一台计算机。这里的IP地址就是指的公网IP地址。
其实,互联网上的计算机是通过“公网IP+内网IP”来唯一确定的,就像很多大楼都是201房间一样,房间号可能一样,但是大楼肯定是唯一的。公网IP地址和内网IP地址也是同样,不同企业或学校的机器可能有相同的内网IP地址,但是他们的公网IP地址肯定不同。那么这些企业或学校的计算机是怎样IP地址共享的呢?这就需要使用NAT(Network Address Translation,网络地址转换)功能。当内部计算机要连接互联网时,首先需要通过NAT技术,将内部计算机数据包中有关IP地址的设置都设成NAT主机的公共IP地址,然后再传送到Internet,虽然内部计算机使用的是私有IP地址,但在连接Internet时,就可以通过NAT主机的NAT技术,将内网我IP地址修改为公网IP地址,如此一来,内网计算机就可以向Internet请求数据了。

云服务器主机内网ip和外网ip的区别

对了弄服务器的小白来说,不知道内网和外网的区别,它们有什么区别。现在由我指点迷津吧

服务器公网ip

可以用于域名解析ip,服务器远程登录ip,是*主要的服务器ip地址。

内网ip
不能用于域名解析。
不可以直接用于服务器远程登录,其主要作用是:跟当前帐号下的其他同集群的机器通信。

一些小型企业或者学校,通常都是申请一个固定的IP地址,然后通过IP共享(IP Sharing),使用整个公司或学校的机器都能够访问互联网。而这些企业或学校的机器使用的IP地址就是内网IP,内网IP是在规划IPv4协议时,考虑到IP地址资源可能不足,就专门为内部网设计私有IP地址(或称之为保留地址),一般常用内网IP地址都是这种形式的:10.X.X.X、

172.16.X.X-172.31.X.X、192.168.X.X等。需要注意的是,内网的计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。
公网IP就是除了保留IP地址以外的IP地址,可以与Internet上的其他计算机随意互相访问。我们通常所说的IP地址,其实就是指的公网 IP。互联网上的每台计算机都有一个独立的IP地址,该IP地址唯一确定互联网上的一台计算机。这里的IP地址就是指的公网IP地址。
其实,互联网上的计算机是通过“公网IP+内网IP”来唯一确定的,就像很多大楼都是201房间一样,房间号可能一样,但是大楼肯定是唯一的。公网
IP地址和内网IP地址也是同样,不同企业或学校的机器可能有相同的内网IP地址,但是他们的公网IP地址肯定不同。那么这些企业或学校的计算机是怎样
IP地址共享的呢?这就需要使用NAT(Network Address Translation,网络地址转换)功能。当内部计算机要连接互联网时,首先需要通过NAT技术,将内部计算机数据包中有关IP地址的设置都设成
NAT主机的公共IP地址,然后再传送到Internet,虽然内部计算机使用的是私有IP地址,但在连接Internet时,就可以通过NAT主机的
NAT技术,将内网我IP地址修改为公网IP地址,如此一来,内网计算机就可以向Internet请求数据了。

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速