MQTT-брокер не может связаться с клиентом после перенаправления порта - PullRequest
0 голосов
/ 04 марта 2019

Я хочу перенаправить порт 1: 65535 на порт 10000 в Ubuntu, используя

sudo iptables -t nat -A PREPROUTING -i ens33 -p tcp --dport 1:65535 -j REDIRECT --to-port 10000

Клиент может подключиться к посреднику, но не может связаться с посредником.

Например,

в обычной ситуации, брокер отобразит

клиент подключен mqttjs_9026261a

mqttjs_9026261a подписанный пульс

mqttjs_9026261a подписанные данные

После ввода команды брокер отобразит

клиент, подключенный mqttjs_9026261a

Это серверный скрипт.

var mosca = require('mosca');

var settings = {
port: 1883,
};

var server = new mosca.Server(settings);

server.on('clientConnected', function (client) {
console.log('client connected', client.id);
});

server.on('published', function (packet, client) {
if (packet.topic == 'heart rate') {
    console.log(client.id, 'published', packet.topic, packet.payload.toString('utf-8'));
}else if (packet.topic == 'data'){
    console.log(client.id, 'published', packet.topic, packet.payload.toString('utf-8'));
}
});

server.on('subscribed', function (topic, client) {
console.log(client.id, 'subscribed', topic);
});

server.on('ready', setup);

server.on('clientDisconnected', function (client) {
console.log('Client Disconnected:', client.id);
});

function setup() {
console.log('server is running at port 1883');
}

Это клиентский скрипт.

var random = require('random');
var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://broker ip address')

var setintv = null;

process.stdin.resume();
process.stdin.setEncoding('utf8');

client.on('connect', function () {
console.log('connected to mqtt server');
client.subscribe('heart rate');
client.subscribe('data');
});

process.stdin.on('data', function (message) {
if (message.trim() == '1') {
    if (setintv == null) {    
        setintv = setInterval(function () {
            message = random.int(60, 100);
            console.log(message.toString());
            client.publish('heart rate', message.toString())
        }, 1000);
    } else if (setintv != null) {
        clearInterval(setintv);
        setintv = null;
    }
} else if (message.trim() == '2') {
    console.log('disconnect to mqtt server');
    client.end();
}
else {
    message = message.trim();
    client.publish('data', message.toString())
}
});
...