Sollte beim Hören eines Ports (Aufgaben-Servers) die lokale Adresse `localhost` oder` 0.0.0.0` lauten?

371
bertalanp99

Ich habe seit taskdTagen versucht, einen Server auf meinem Computer (Arch Linux) zum Laufen zu bringen. Das Problem, mit dem ich jetzt konfrontiert bin, ist, dass taskddie Konfigurationsdokumentation ( https://taskwarrior.org/docs/taskserver/trtenance-sync.html ) besagt, dass ich die Ausgabe hostname -fals Adresse verwenden muss (ich weiß nicht was "CN" (Abkürzungen). Ich habe es auch mit meiner lokalen IP-Adresse ausprobiert, 192.168aber ich bekam den Handshake-Fehler, den Sie in der Anleitung zur Fehlerbehebung finden, die ich verlinkt habe.

Ich habe ein wenig nachgeforscht, weil ich von anderen Maschinen nicht auf meinen Taskserver zugreifen konnte. Ich habe das gefunden:

Wenn ich mir den Port anhöre, den ich verwende, lass es sein 54000, nc -l -p 54000kann ich dies als Ausgabe von sehen ss -lntu | grep 54000:

tcp LISTEN 0 10 0.0.0.0:54000 0.0.0.0:* 

Wenn ich anfange taskdund am selben Port lauscht, ssergibt sich Folgendes:

tcp LISTEN 0 4 127.0.0.1:54000 0.0.0.0:* 

Jetzt habe ich von einem anderen Computer aus versucht, den Port zu überprüfen, während ich mit nc -vv 192.168.x.y 54000(mit der IP-Adresse des Servers) abhörte, und stellte fest, dass 0.0.0.0der Port als offen angezeigt wird, wenn die lokale Adresse vorhanden ist . Ansonsten erscheint es als geschlossen. Ich denke das liegt daran, dass 127.0.0.1es im Wesentlichen ist localhostund ich kann das nicht von meinem Netzwerk sehen?

taskdhat auch eine config-datei mit einer serveroption, wo ich die ausgabe eingegeben habe hostname -f, was watermelon.localdomainwie ich von der dokumentation angewiesen wurde. Ich nehme an, das ist was übersetzt wurde localhost, richtig?

Ich würde mich sehr über Ihre Hilfe freuen, danke im Voraus!


UPDATE 2018/04/21

Ich habe es geschafft, das Problem zu lösen, indem ich die serverVariable in der Konfig gesetzt habe 0.0.0.0:54000. Auf diese Weise konnte ich taskdnach jeder Adresse am Port suchen 54000. Jetzt funktioniert alles wunderbar. Die Dokumentation taskdwar zu dem Thema, das ich schätze, etwas vage.

3
"CN" ist eine Abkürzung für "Common Name" (normalerweise ein vollständig qualifizierter Domänenname). Wenn also "hostname -f" * watermelon.localdomain * zurückgibt, heißt es in den Anweisungen, zB "CN = watermelon.localdomain" zu verwenden. Laut der taskd-Website ist "CN = localhost" der Standardwert und daher nicht gültig. In Bezug auf `127.0.0.1` vs.` 0.0.0.0` ist `127.0.0.1` eine lokale Loopback-Adresse und gibt normalerweise an, dass der Port nur für Prozesse auf demselben Computer verfügbar ist. Im Gegensatz dazu bedeutet "0.0.0.0" in diesem Fall effektiv "alle IPv4-Adressen auf dem lokalen Computer" (einschließlich aller IP-Adressen, auf die über das Netzwerk zugegriffen werden kann). Anaksunaman vor 6 Jahren 2
Was die Konfigurationsdateien angeht, so verstehe ich, dass der Eintrag so etwas wie "taskd.server = watermelon.localdomain: 54000" sein sollte (aber ich könnte mich irren). Anaksunaman vor 6 Jahren 1
@Anaksunaman Ich glaube du hast recht ... Aber warum hört der Server dann auf die Loopback-Adresse? Ich verstehe es nicht bertalanp99 vor 6 Jahren 0
Ich gehe davon aus, dass 127.0.0.1 wahrscheinlich die erste (oder einzige) IPv4-Adresse ist, die für * watermelon.localdomain * verfügbar ist (vorausgesetzt, Sie verwenden diese in Ihrer Konfiguration). Die `taskd`-Website weist darauf hin, dass Sie möglicherweise verwenden können, zB * your_network_ip: 54000 * (vs. zB * watermelon.localdomain: 54000 *) - https://taskwarrior.org/docs/taskserver/protocol.html Anaksunaman vor 6 Jahren 1
@Anaksunaman Ich habe es geschafft, das Problem zu lösen --- Ich war wirklich dumm, wie es scheint (siehe aktualisierte Frage). Danke für Ihre Hilfe! bertalanp99 vor 6 Jahren 0
Bitte. Ich bin froh, dass Sie alles richtig gemacht haben. =) Anaksunaman vor 6 Jahren 0

1 Antwort auf die Frage

4
Andrew

Sockets sind so konfiguriert, dass sie eine bestimmte IP-Adresse und einen bestimmten Port überwachen. Normalerweise gibt es zwei primäre Konfigurationen, die Sie für einen Socket verwenden würden, und eine dritte, die nicht so üblich ist, aber nützlich ist.

1) Nur die Kommunikation von der Maschine, auf der der Dienst ausgeführt wird, zulassen

Dies ist konfiguriert, wenn Sie sehen 127.0.0.1:54000. NUR die Hostmaschine kann auf diesen Dienst zugreifen. Sie können so etwas wie einen Reverse-Proxy verwenden, um den Zugriff von außen zuzulassen, aber im Netzwerk ist keine Verbindung möglich.

2) Für alle Maschinen in einem Netzwerk, die vom Server aus erreichbar sind

Dies ist konfiguriert, wenn Sie sehen 0.0.0.0:54000. Dies ermöglicht es jedem, mit diesem Dienst zu sprechen, solange die Pakete darauf zugreifen können.

3) Nur zu einem bestimmten Netzwerk, zu dem der Server gehört

Dies wird konfiguriert, wenn Sie eine 192.168.0.2:54000IP-Adresse sehen. Dies bedeutet, dass NUR diesem Subnetz dieses Netzwerks Zugriff gewährt wird.

Wenn Sie zulassen möchten, dass Ihr Dienst von anderen Computern im Netzwerk verbunden wird, muss er an 0.0.0.0die lokale IP- Adresse gebunden sein .

Danke für deine ausführliche Antwort! Haben Sie eine Ahnung, wie ich `taskd 'auf` 0.0.0.0` anhören sollte? bertalanp99 vor 6 Jahren 0
Es ist wahrscheinlich in der Konfig für `taskd`. Suchen Sie nach einem Eintrag, der "Bindeport" oder "Bindungsadresse" angibt. Es könnte bereits als `127.0.0.1: 54000` aufgeführt sein. Aber das Beste ist, die Dokumente auf "taskd" zu überprüfen Andrew vor 6 Jahren 0
Ich habe gerade diese relevante Frage gefunden: https://stackoverflow.com/questions/44902884/taskwarrior-port-not-opening-externally Der Beantworter erwähnt "Sicherstellen, dass / etc / hosts mit den nach außen gerichteten IP-Adressen festgelegt wurde". Könnten Sie bitte erklären, was das bedeutet und ob das eine gute Idee ist? Es scheint für das OP dieser Frage gearbeitet zu haben. bertalanp99 vor 6 Jahren 0
`/ etc / hosts` hat keinen Einfluss auf die Verbindungsfähigkeit der Hosts durch andere Dienste. Es erlaubt dem lokalen Rechner zwar, iteslf richtig zu referenzieren, es sollte jedoch kein Grund zur Änderung geben, solange der Hostname noch mit dem konfigurierten Hostnamen des Systems übereinstimmt. Andrew vor 6 Jahren 1
Ich habe das Problem seit (siehe aktualisierte Frage) gelöst. Sie haben jedoch sehr geholfen, danke. bertalanp99 vor 6 Jahren 0