( persicsb | 2024. 12. 14., szo – 17:09 )

Ezt nem tudod megoldani, mivel az MQTT nem tartalmaz ilyen leíró infót.

A HTTP-nél van ugye a Host header, amivel ez kezelhető (így működnek a virtuális szerverek), de ha az emqx-rohu.server.com és az xy-rohu.server.com valójában ugyanarra az IP címre mutat, akkor nem fog menni.

Gondolj bele, az egész mélyén a hosztok között IP, TCP/UDP/SCTP van, a DNS nevek csak abban segítenek, hogy nevet adjanak az IP címeknek.

Ha egy protokollban nincs arra vonatkozóan támogatás, hogy az adott IP címek között felépített TCP csatornán belül a szolgáltatást multiplexeld és megkülönböztess név szerint hosztokat, akkor ez nem fog menni. 

Gondolj bele, legyen mondjuk az example.com és example.net a két DNS név, és mindkettő az 1.2.3.4 IP címre mutat. Amikor a szerveralkalmazás fogadja a bejövő socketet, ő nem tudja, hogy a kliensoldal az example.com névfeloldása után csatlakozott az 1.2.3.4-es IP címhez, vagy az example.net névfeloldása után. De még az is lehet, hogy kihagyta a névfeloldást, mert tudja az example.com IP címét közvetlenül.

Ezt csak a protokollban tudod leírni, hogy kihez akartál csatlakozni - amennyiben a protokoll fel van arra készítve, hogy valamiféle címzést definiáljon, és ennek még köze sem kell legyen a DNS nevekhez. A HTTP Host headerbe is írhatok ám olyan nevet, ami totál más domainre szól. Például az 1.2.3.4-es hostra is küldhetek olyan HTTP fejlécet, aminek a Host mezőjében google.com van, senki nem akadályoz meg ebben.

És az MQTT nem tud ilyet, a szabvány ezt nem tartalmazza. A HTTP tud ilyet, a Host headerrel. A TLS tud ilyet, a certificate-ben lévő nevekkel. Az MQTT nem tud ilyet protokollszinten. Eleve nem tudja megkülönböztetni logikai szinten a csatlakozó feletekt.

De ha meg tudna is, a traefik nem tud belenézni az MQTT csomagba, mert nem tudja értelmezni azt, a Traefik a TCP streamben csak a HTTP-t beszéli, más protokollt, ami TCP felett menne, nem tud. És plugin sincs hozzá a Traefik pluginjai között.