ฉันได้ทำตามคำแนะนำเพื่อกำหนดค่า Mosquitto บน CentOS 7 แล้ว ให้บริการโดยมหาสมุทรดิจิตอล. ฉันเชื่อว่าฉันได้ตั้งค่าส่วนใหญ่อย่างถูกต้องแล้ว ฉันสามารถทำตามคำแนะนำทั้งหมดด้วยการดำน้ำลึกเพื่อค้นหาวิธีแก้ไขสำหรับคำแนะนำบางส่วนที่เลิกใช้แล้ว แต่ฉันสามารถสมัครและเผยแพร่ข้อความในหัวข้อได้เมื่อฉันเข้าสู่ระบบเซิร์ฟเวอร์ของฉัน
อย่างไรก็ตาม ฉันต้องการเข้าถึงโบรกเกอร์ MQTT ของฉันเองจากลูกค้ารายอื่นที่ไม่ใช่ที่อยู่ของเซิร์ฟเวอร์ (duh) ฉันไม่สามารถเชื่อมต่อได้ไม่ว่าจะพยายามอย่างไร - ฉันรู้สึกว่าความพยายามในการเชื่อมต่อไม่ถึงนายหน้าของฉัน (ทั้งที่ใช้โปรแกรมดูออนไลน์เช่น https://hobbyquaker.github.io/mqtt-admin/ และติดตั้งในเครื่องเช่น โปรแกรมสำรวจ MQTT ).
mosquitto.conf ของฉันค่อนข้างเรียบง่าย และฉันทำให้ง่ายขึ้นเพื่อให้เชื่อมต่อแบบไม่ระบุชื่อได้ แต่ด้วย TLS สำหรับทั้งเว็บซ็อกเก็ตบนพอร์ต 8083 และ (ค่าเริ่มต้น?) mqqt บนพอร์ต 8883
กรอกไฟล์ mosquitto.conf (อัปเดตหลังจากปฏิกิริยาของ Halfgaar):
allow_anonymous จริง
#password_file /etc/mosquitto/passwd (ฉันได้ปิดใช้งานสิ่งนี้เพื่อทำให้ความพยายามในการเชื่อมต่อง่ายขึ้น)
ไฟล์ log_dest /var/log/mosquitto.log
log_type ทั้งหมด
ผู้ฟัง 1883 localhost
ผู้ฟัง 8883 0.0.0.0
โปรโตคอล mqtt # ที่เพิ่มเข้ามาใหม่แต่ยังไม่มีทีท่าว่าจะทำอะไร
ใบรับรองไฟล์ /etc/letsencrypt/live/iot.mydomain.com/cert.pem
cafile /etc/letsencrypt/live/iot.mydomain.com/chain.pem
ไฟล์คีย์ /etc/letsencrypt/live/iot.mydomain.com/privkey.pem
ผู้ฟัง 8083 0.0.0.0
เว็บซ็อกเก็ตโปรโตคอล
ใบรับรองไฟล์ /etc/letsencrypt/live/iot.mydomain.com/cert.pem
cafile /etc/letsencrypt/live/iot.mydomain.com/chain.pem
ไฟล์คีย์ /etc/letsencrypt/live/iot.mydomain.com/privkey.pem
ต่อมาฉันคิดว่าไฟล์ Mosquitto.conf เริ่มต้นมีการตั้งค่ามากกว่านี้ และคัดลอกการตั้งค่าเริ่มต้นใหม่ในไฟล์การกำหนดค่าของฉัน และที่ส่วนท้ายของไฟล์ได้เพิ่มการกำหนดค่าที่กล่าวถึงข้างต้น ตอนนี้ฉันมีการกำหนดค่าเริ่มต้นพร้อมการแทนที่ข้างต้น การรีสตาร์ทบริการ mosquitto สำเร็จ
จากนั้นฉันก็คิดว่ามันมีบางอย่างเกี่ยวกับไฟร์วอลล์ ฉันได้ตรวจสอบว่าพอร์ต 1883, 8883 และ 8083 เปิดผ่านหรือไม่ firewall-cmd --zone=public --permanent --list-ports
และพบว่าส่วนหนึ่งของผลลัพธ์นั้นรายงานจริง 8883/tcp 8083/tcp 1883/tcp
.
ไฟล์บันทึกที่ระบุไม่มีข้อมูลใด ๆ สำหรับการเชื่อมต่อที่พยายาม ดังนั้นฉันจึงมองไม่เห็น
ใครช่วยชี้ทางให้ฉันเพื่อหาเบาะแสเพิ่มเติมในการแก้ปัญหานี้ได้ไหม
อัปเดต จากปฏิกิริยาของ @ Halfgaar:
ฉันอัปเดตการกำหนดค่าด้วยการเชื่อมโยงกับที่อยู่สาธารณะ (ฉันแค่พูดซ้ำสิ่งที่เขาพูด ฉันไม่มีเงื่อนงำ) เมื่อฉันเรียกใช้ netstat -n -l -t -p
ผลลัพธ์อยู่ด้านล่าง แม้ว่าฉันจะไม่สามารถเชื่อมต่อกับนายหน้าจากแล็ปท็อปของฉัน (หรือที่อื่น ๆ )
# netstat -n -l -t -p | grep ยุง
tcp 0 0 0.0.0.0:8883 0.0.0.0:* ฟัง 2573/mosquitto
tcp 0 0 127.0.0.1:1883 0.0.0.0:* ฟัง 2573/mosquitto
tcp6 0 0 :::8083 :::* ฟัง 2573/mosquitto
tcp6 0 0 ::1:1883 :::* ฟัง 2573/mosquitto
อัปเดต ฉันยัง สะดุดกับกฎไฟร์วอลล์ นั่นทำให้ฉันคิดว่าฉันจะสามารถเชื่อมต่อกับโปรโตคอล mqtt ได้หรือไม่ ดังนั้นฉันจึงดำเนินการด้วย firewall-cmd --zone=public --permanent --add-service=mqtt
และโหลดไฟร์วอลล์ใหม่
ความคืบหน้าเล็กน้อย ฉันก้าวไปข้างหน้าจากการได้รับข้อผิดพลาด ตัดการเชื่อมต่อจากเซิร์ฟเวอร์
ถึง เชื่อมต่อ ETIMEDOUT 1.2.3.4:8883
(โดยที่ 1.2.3.4 คือ IP ของเซิร์ฟเวอร์ของฉัน) ไม่แน่ใจว่าหมายถึงอะไรในแง่ของความก้าวหน้า แต่ฉันอยู่ที่อื่นเหมือนที่ฉันเคยอยู่มาก่อน...
อัปเดต ผลลัพธ์สำหรับ iptables -L อินพุต -n
มีดังนี้
# iptables -L อินพุต -n
เชนอินพุท (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง
ยอมรับทั้งหมด -- 0.0.0.0/0 0.0.0.0/0 ctstate ที่เกี่ยวข้อง ก่อตั้ง
ยอมรับทั้งหมด -- 0.0.0.0/0 0.0.0.0/0
INPUT_direct ทั้งหมด -- 0.0.0.0/0 0.0.0.0/0
INPUT_ZONES_SOURCE ทั้งหมด -- 0.0.0.0/0 0.0.0.0/0
INPUT_ZONES ทั้งหมด -- 0.0.0.0/0 0.0.0.0/0
วางทั้งหมด -- 0.0.0.0/0 0.0.0.0/0 ctstate ไม่ถูกต้อง
ปฏิเสธทั้งหมด -- 0.0.0.0/0 0.0.0.0/0 ปฏิเสธด้วย icmp-host-prohibited
แก้ไข
ดูเหมือนว่าฉันยังมีไฟร์วอลล์ (ซอฟต์แวร์) อีกตัวบน VPS ของฉัน ซึ่งฉันต้องกำหนดค่าด้วย เมื่อฉันเปิดพอร์ตในไฟร์วอลล์นั้นด้วย ฉันก็สามารถเข้าสู่ระบบได้