Come pubblicizzare un servizio utilizzando bonjour tra le sottoreti?
-
04-10-2019 - |
Domanda
Conosco l'uso di Bonjour per i servizi pubblicitari nel dominio "locale". Ho lavorato attraverso diversi esempi e conosco le corrispondenti classi di cacao che uso per questo.
Sono curioso di sapere come pubblicizzo un semplice servizio di bonjour a una sottorete diversa. In particolare, sto cercando di scrivere un servizio di rete che funziona sul mio desktop che è collegato tramite Ethernet. Il client viene eseguito su un dispositivo mobile (iPhone/iPad) collegato tramite WiFi. Nella mia configurazione di rete, il WiFi è su una sottorete diversa rispetto all'Ethernet. Tuttavia, entrambi sono dietro il firewall. Non ho bisogno di fare pubblicità al di fuori del firewall, voglio semplicemente che i clienti WiFi possano vedere i servizi pubblicizzati da un server Ethernet Connected.
È possibile? So che Bonjour dovrebbe supportare la comunicazione tra le sottoreti, ma ogni volta che provo a leggere su questa funzione si tuffa in profondità nei record DNS e quant'altro. Sono uno sviluppatore di applicazioni ... non ho idea di quella roba, né voglio che gli utenti debbano preoccuparsi. Mi manca qualcosa di semplice?
Soluzione
Questa non è una tipica domanda di programmazione, ma vedo che è un enorme ostacolo nel testare il tuo codice basato sul bonjour.
Bonjour supporta due meccanismi per i server per informare i clienti sulla loro esistenza, multicast sulla rete locale prima, DNS secondo.
I multicast sono facili da usare perché non esiste una configurazione, sfortunatamente può essere utilizzato solo sulla stessa rete.
I DNS hanno il lusso di lavorare su router (Internet), ma richiede nameserver e client correttamente configurati utilizzando quel nameserver.
Penso che tu stia avendo solo due opzioni.
- Pubblicizza il tuo servizio Bonjour su WiFi Network
- configurare il tuo DNS
Nel primo caso è importante rendersi conto che il servizio non deve necessariamente essere pubblicizzato dalla propria applicazione in esecuzione su un Mac. Puoi usare l'utilità dns-sd
per registrare qualsiasi indirizzo/porta IP come servizio Bonjour sulla rete. Affinché questo funzioni hai bisogno di una macchina (Mac, Linux) che è collegata al tuo WiFi ed esegui dns-sd
lì in modo simile a questo:
dns-sd -P "Stack Overflow" _http._tcp . 80 stackoverflow.com 69.59.196.211
Ciò registrerebbe un servizio "http" con nome "stack overflow" come servizio di bonjour. Dai un'occhiata: eseguilo nel terminale e controllalo nei segnalibri di Safari sotto Bonjour. Allo stesso modo in cui è possibile registrare la tua applicazione.
Sfortunatamente è necessario eseguirlo su una macchina collegata alla rete WiFi. Ciò significa che la tua applicazione Mac pubblicizzerà sulla propria rete Ethernet, dns-sd
pubblicizza sul wifi.
La seconda opzione è un po 'spaventosa, ma non è un grosso problema se sei disposto a sporcarti le mani con un po' di amministrazione.
Ancora una volta, non è necessario avere servizi registrati dinamicamente in DNS. Puoi semplicemente codificare il nome del tuo Mac e la porta dell'app nella configurazione DNS. Queste sono solo 4 righe che devono essere aggiunte al file della zona (file di configurazione DNS).
b._dns-sd._udp IN PTR @ ; b = browse domain
lb._dns-sd._udp IN PTR @ ; lb = legacy browse domain
_icool._tcp PTR iCool\ App\ Service._http._tcp
iCool\ App\ Service._http._tcp SRV 0 0 8888 macpro.domain.com.
Le prime due righe indicano ai clienti (dispositivi iOS nel tuo caso) che Bonjour è abilitato per questo dominio. La terza riga dice ai clienti che esiste un servizio di tipo "Servizio app ICOOL" icool
a disposizione. La quarta riga indica ai clienti l'indirizzo attuale e la porta del servizio.
I clienti cercheranno voci DNS per i "domini di ricerca" configurati (o ottenuti tramite DHCP). Controlla le impostazioni della rete.
Puoi eseguire nameserver sul tuo Mac, qualche Linux Box o puoi utilizzare servizi come Dyndns.com.
Spero che sia di aiuto.