Και οι δύο εντολές δημοσιεύουν μια τοπική υπηρεσία μέσω ενός ονόματος HTTPS του Tailscale, και από το μηχάνημα που τις εκτελεί φαίνονται σχεδόν ίδιες. Η διαφορά είναι ποιος μπορεί να φτάσει στο URL στη συνέχεια, και αυτή η διαφορά καθορίζει ποιους ελέγχους χρειάζεται ακόμη η εφαρμογή σας. Το Serve κρατά το κοινό μέσα στο tailnet, ενώ το Funnel το μεταφέρει στο ανοιχτό διαδίκτυο. Επιλέξτε πρώτα το κοινό και μετά την εντολή που του ταιριάζει.

Το Serve απαντά σε μια ερώτηση μέσα στο tailnet σας

Το Serve κάνει proxy σε μια τοπική θύρα ή σερβίρει τοπικό περιεχόμενο σε συσκευές του tailnet σας, και οι κανόνες πρόσβασης του tailnet εξακολουθούν να ισχύουν για κάθε αίτημα. Ένας πίνακας ελέγχου στη θύρα 3000 γίνεται προσβάσιμος σε ένα όνομα HTTPS που μόνο οι συσκευές σας μπορούν να επιλύσουν και να συνδεθούν. Αυτή είναι η σωστή προεπιλογή για εσωτερικά εργαλεία, επειδή το κοινό είναι ήδη πιστοποιημένο από το tailnet και δεν προσθέτετε δημόσια επιφάνεια. Το URL μοιάζει με έναν κανονικό ιστότοπο, και γι’ αυτόν ακριβώς τον λόγο οι άνθρωποι το παίρνουν για τέτοιον.

Το Serve μπορεί επίσης να επισυνάπτει κεφαλίδες ταυτότητας που περιγράφουν τον χρήστη του tailnet στα αιτήματα που προωθεί. Αν η εφαρμογή σας εμπιστεύεται αυτές τις κεφαλίδες ως πιστοποίηση, δέστε το backend στο localhost ώστε τίποτα άλλο να μην μπορεί να το φτάσει άμεσα, γιατί ένα backend που ακούει σε δρομολογήσιμη διεύθυνση μπορεί να δεχθεί αιτήματα που δεν πέρασαν ποτέ από το proxy.

Το Funnel αλλάζει το κοινό στο ανοιχτό διαδίκτυο

Το Funnel δημοσιεύει μια επιλεγμένη υπηρεσία σε οποιονδήποτε έχει το URL, και οι επισκέπτες δεν χρειάζονται τον πελάτη, λογαριασμό ή ιδιότητα μέλους στο tailnet σας. Ο πόρος χρειάζεται επομένως την πιστοποίηση, τον περιορισμό ρυθμού και τις ενημερώσεις που θα εφαρμόζατε σε κάθε δημόσια υπηρεσία. Τα δημόσια αιτήματα δεν φέρουν τις κεφαλίδες ταυτότητας tailnet του Serve, οπότε μια εφαρμογή που βασιζόταν σε αυτές δεν έχει καθόλου ταυτότητα χρήστη κάτω από το Funnel. Η επιλογή διαφορετικής εντολής δημοσίευσης δεν απαντά στην ερώτηση της πιστοποίησης για εσάς.

Το Funnel έχει επίσης περιορισμούς που ένας οδηγός από παλαιότερη έκδοση μπορεί να μην αναφέρει. Τερματίζει το TLS με πιστοποιητικό που αποκτά το Tailscale για το όνομα, και υποστηρίζει μόνο συγκεκριμένες θύρες ακρόασης, όπως περιγράφει η τεκμηρίωση του Funnel. Αν η υπηρεσία σας περιμένει πρωτόκολλο διαφορετικό από HTTPS σε μία από αυτές τις θύρες, το Funnel είναι το λάθος εργαλείο και όχι ένας γρίφος ρυθμίσεων.

Διαβάστε τη λειτουργία από τον πελάτη, όχι από τη θύρα

Ελέγξτε την τρέχουσα κατάσταση πριν μοιραστείτε οτιδήποτε, γιατί οι δύο λειτουργίες μπορούν να ρυθμιστούν για την ίδια τοπική θύρα σε διαφορετικές στιγμές. Οι εντολές κατάστασης αναφέρουν τι έχει πραγματικά δημοσιευτεί και σε ποιον. Μην συμπεραίνετε το κοινό από το γεγονός ότι ένα URL αποκρίνεται.

tailscale serve status
tailscale funnel status
tailscale status --json | head -40

Η σύνταξη των εντολών έχει αλλάξει μεταξύ εκδόσεων του πελάτη, οπότε μια αντιγραμμένη κλήση μπορεί να επιλέξει διαφορετική λειτουργία από αυτή που σκοπεύατε. Προτιμήστε τη τεκμηριωμένη μορφή για την έκδοση που εκτελείτε και διαβάστε την επιβεβαίωση που εκτυπώνει ο πελάτης αντί να την υποθέσετε. Αν υπάρχουν και ρύθμιση Serve και ρύθμιση Funnel, η δημόσια είναι αυτή που μετρά για την έκθεση. Επαναφέρετε τη ρύθμιση που δεν θέλατε αντί να προσθέσετε άλλη πάνω της.

Σταματήστε και ξαναδιαβάστε την κατάσταση αν η έξοδος δεν ονομάζει το κοινό. Ένα δημοσιευμένο URL χωρίς δηλωμένο κοινό είναι εικασία, και οι εικασίες είναι ο τρόπος με τον οποίο οι εσωτερικοί πίνακες ελέγχου καταλήγουν στο ανοιχτό διαδίκτυο.

Δοκιμάστε με το κοινό που πραγματικά είχατε στο μυαλό σας

Δοκιμάστε από έξω από το tailnet, όχι από το μηχάνημα που δημοσίευσε την υπηρεσία. Ένα αίτημα από συσκευή του tailnet αποδεικνύει ότι το proxy λειτουργεί, αλλά δεν αποδεικνύει ότι ένας άγνωστος αποκλείεται. Χρησιμοποιήστε δίκτυο χωρίς πελάτη Tailscale και χωρίς διαδρομή προς το tailnet.

curl -sI https://host.tailnet-name.ts.net
curl -sI https://host.tailnet-name.ts.net --resolve host.tailnet-name.ts.net:443:203.0.113.10

Για έναν εσωτερικό πίνακα ελέγχου, το εξωτερικό αίτημα θα πρέπει να αποτυγχάνει να συνδεθεί ή να αποτυγχάνει στην εξουσιοδότηση, και το εσωτερικό αίτημα θα πρέπει να πετυχαίνει με την ταυτότητα που περιμένετε. Για μια δημόσια υπηρεσία, το εξωτερικό αίτημα θα πρέπει να πετυχαίνει και η εφαρμογή θα πρέπει να ζητά τα δικά της διαπιστευτήρια. Καταγράψτε ποιο από τα δύο αποτελέσματα παρατηρήσατε, γιατί το URL μόνο δεν σας το λέει. Αν το αποτέλεσμα είναι αντίθετο από την πρόθεση, αφαιρέστε πρώτα τη δημόσια ρύθμιση και ερευνήστε μετά.

Η δημοσίευση μιας υπηρεσίας δεν είναι επίσης η ίδια απόφαση με την επιλογή κόμβου εξόδου, που ελέγχει από πού φεύγει η εξερχόμενη κίνησή σας. Το Serve και το Funnel απαντούν ποιος μπορεί να φτάσει κάτι που τρέχετε, ενώ ένας κόμβος εξόδου απαντά από πού φαίνεται να έρχονται οι δικές σας συνδέσεις. Κρατήστε τις δύο ερωτήσεις χωριστά και η σύγκριση παραμένει απλή.

Σχετικά άρθρα