TURN Server: τι είναι, πώς λειτουργεί και πού χρησιμοποιείται

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-06-02 Χρόνος ανάγνωσης: 8 λεπ

TURN Server — είναι ένας διακομιστής του πρωτοκόλλου Traversal Using Relays around NAT που αναμεταδίδει την κίνηση πολυμέσων μεταξύ δύο ομότιμων κόμβων όταν η άμεση σύνδεση P2P δεν είναι δυνατή. Σύμφωνα με το IETF RFC 5766, 2010, ο διακομιστής TURN λειτουργεί ως το τελευταίο εφεδρικό μέσο (fallback) στη διαδικασία ICE του WebRTC, εξασφαλίζοντας εγγυημένη σύνδεση ακόμη και με Symmetric NAT και εταιρικά τείχη προστασίας.

Βασικά σημεία

  • TURN Server — ένας διακομιστής αναμετάδοσης που αναμεταδίδει δεδομένα πολυμέσων μεταξύ ομότιμων κόμβων όταν η άμεση σύνδεση P2P μέσω NAT δεν είναι δυνατή.
  • Αρχή λειτουργίας — κάθε ομότιμος κόμβος στέλνει δεδομένα στον διακομιστή TURN, ο οποίος τα προωθεί στον άλλο ομότιμο κόμβο, λειτουργώντας ως ενδιάμεσος στην επικοινωνία.
  • Ρόλος στο ICE — το TURN ενεργοποιείται όταν όλες οι προσπάθειες άμεσης σύνδεσης (υποψήφιοι host και server reflexive) αποτύχουν.
  • Μειονέκτημα — το TURN δημιουργεί πρόσθετη καθυστέρηση και φόρτο στον διακομιστή, καθώς όλη η κίνηση περνά μέσω του αναμεταδότη.
  • Ασφάλεια — το TURN υποστηρίζει αυθεντικοποίηση (username, credential, realm) και κρυπτογράφηση TLS για προστασία των αναμεταδιδόμενων δεδομένων.

Τι είναι το TURN Server

TURN Server (Traversal Using Relays around NAT) — είναι μια υπηρεσία δικτύου που ορίζεται στο RFC 5766 και ενημερώθηκε στο RFC 8656, η οποία αναμεταδίδει κίνηση UDP και TCP μεταξύ δύο πελατών όταν η άμεση σύνδεση P2P δεν είναι δυνατή λόγω περιορισμών NAT ή τειχών προστασίας. Στην αρχιτεκτονική WebRTC, ο διακομιστής TURN λειτουργεί ως ο τελικός εφεδρικός μηχανισμός, εγγυώμενος τη σύνδεση υπό οποιεσδήποτε συνθήκες δικτύου.

Σε αντίθεση με το STUN, το οποίο απλώς ενημερώνει τον πελάτη για την εξωτερική του διεύθυνση, ο διακομιστής TURN συμμετέχει ενεργά στη μεταφορά δεδομένων. Κάθε ομότιμος κόμβος δημιουργεί σύνδεση με τον διακομιστή TURN και στέλνει τα δεδομένα πολυμέσων του σε αυτόν. Ο διακομιστής TURN με τη σειρά του προωθεί αυτά τα δεδομένα στον άλλο ομότιμο κόμβο. Ως αποτέλεσμα, δεν υπάρχει άμεση σύνδεση μεταξύ των ομότιμων κόμβων — όλη η κίνηση περνά μέσω του διακομιστή αναμετάδοσης, γεγονός που εγγυάται την παράδοση ακόμη και υπό τους πιο αυστηρούς περιορισμούς NAT.

Πρωτόκολλο TURN

TURN είναι μια επέκταση του πρωτοκόλλου STUN. Τα μηνύματα TURN χρησιμοποιούν την ίδια κεφαλίδα 20 byte και τον μηχανισμό χαρακτηριστικών. Η βασική διαφορά είναι ότι το TURN ορίζει νέους τύπους μηνυμάτων (Allocate, Refresh, Send, Data, CreatePermission, ChannelBind) και χαρακτηριστικά που απαιτούνται για τη διαχείριση των αναμεταδόσεων. Ο πελάτης δημιουργεί μια εκχώρηση (allocation) στον διακομιστή TURN μέσω του μηνύματος Allocate, λαμβάνει μια διεύθυνση μεταφοράς αναμετάδοσης (relayed transport address) και τη χρησιμοποιεί για αποστολή και λήψη δεδομένων μέσω του διακομιστή.

Πώς λειτουργεί ο διακομιστής TURN

Ο διακομιστής TURN λειτουργεί σύμφωνα με την ακόλουθη σειρά βημάτων. Ο πελάτης στέλνει ένα αίτημα Allocate με αυθεντικοποίηση (username, credential). Ο διακομιστής ελέγχει τα διαπιστευτήρια και δημιουργεί μια εκχώρηση — μια προσωρινή δέσμευση της διεύθυνσης αναμετάδοσης (IP:θύρα στον διακομιστή TURN) προς τον πελάτη. Ο διακομιστής επιστρέφει μια απάντηση Allocate με τη relayed transport address — τη διεύθυνση που θα χρησιμοποιούν άλλοι ομότιμοι κόμβοι για αποστολή δεδομένων σε αυτόν τον πελάτη μέσω του διακομιστή TURN.

Μετά τη δημιουργία της εκχώρησης, ο πελάτης μπορεί να στέλνει δεδομένα μέσω του διακομιστή TURN χρησιμοποιώντας μηνύματα Send Indication ή μέσω καναλιών (ChannelBind). Κατά τη λήψη δεδομένων από τον πελάτη, ο διακομιστής TURN ελέγχει τις άδειες (permissions) και αναμεταδίδει τα δεδομένα στον ομότιμο κόμβο-στόχο. Για τη λήψη εισερχόμενων δεδομένων, ο πελάτης πρέπει πρώτα να δημιουργήσει άδεια για τον ομότιμο κόμβο από τον οποίο αναμένει δεδομένα, διαφορετικά ο διακομιστής TURN θα απορρίψει το εισερχόμενο πακέτο. Η άδεια δημιουργείται μέσω του μηνύματος CreatePermission με καθορισμό της διεύθυνσης IP του ομότιμου κόμβου.

Εκχώρηση και διάρκεια ζωής

Η εκχώρηση στον διακομιστή TURN έχει περιορισμένη διάρκεια ζωής — προεπιλογή 10 λεπτά. Ο πελάτης πρέπει να στέλνει περιοδικά αίτημα Refresh για παράταση της εκχώρησης. Η διάρκεια ζωής αναφέρεται σε δευτερόλεπτα στο χαρακτηριστικό LIFETIME. Εάν δεν υπάρχει Refresh, ο διακομιστής διαγράφει την εκχώρηση και απελευθερώνει τη διεύθυνση αναμετάδοσης. Συνιστώμενο διάστημα ανανέωσης — 5 λεπτά (300 δευτερόλεπτα) για προστασία από απώλεια πακέτων Refresh.

Ρύθμιση διακομιστή TURN στο WebRTC

Στο WebRTC, ο διακομιστής TURN ρυθμίζεται μέσω της διαμόρφωσης RTCPeerConnection στον πίνακα iceServers. Οι διακομιστές TURN μπορούν να χρησιμοποιούν μεταφορά UDP, TCP ή TLS. Για αυθεντικοποίηση συνήθως χρησιμοποιούνται προσωρινά διαπιστευτήρια (TURN credentials) που δημιουργούνται στον διακομιστή εφαρμογής και έχουν περιορισμένη χρονική διάρκεια.

Ας δούμε ένα παράδειγμα ρύθμισης διακομιστή TURN σε JavaScript με αυθεντικοποίηση μέσω κουπονιού HMAC-SHA1.

js
async function createPeerConnection(turnServerUrl) {
    const credentials = await fetchTurnCredentials();

    const config = {
        iceServers: [
            {
                urls: "stun:stun.l.google.com:19302"
            },
            {
                urls: turnServerUrl,
                username: credentials.username,
                credential: credentials.credential
            }
        ],
        iceTransportPolicy: "all"
    };

    return new RTCPeerConnection(config);
}

async function fetchTurnCredentials() {
    const response = await fetch("/api/turn-credentials");
    return response.json();
}

const turnUrl = "turn:turn.example.com:3478";
const pc = await createPeerConnection(turnUrl);

Σε αυτό το παράδειγμα, ο διακομιστής TURN αναφέρεται μαζί με τον διακομιστή STUN σε μια ενιαία διαμόρφωση ICE. Η διαδικασία ICE θα δοκιμάσει πρώτα τους υποψήφιους host και τα srflx που ελήφθησαν από το STUN. Εάν η άμεση σύνδεση δεν είναι δυνατή, το ICE μεταβαίνει αυτόματα στον υποψήφιο relay που ελήφθη από τον διακομιστή TURN. Η παράμετρος iceTransportPolicy: "all" επιτρέπει τους υποψήφιους relay — η εναλλακτική τιμή "relay" απαγορεύει οποιουσδήποτε υποψήφιους εκτός από TURN, κάτι που είναι χρήσιμο για δοκιμές.

Αυθεντικοποίηση διακομιστή TURN

Για την αποτροπή μη εξουσιοδοτημένης χρήσης, ο διακομιστής TURN απαιτεί αυθεντικοποίηση. Η τυπική προσέγγιση είναι τα προσωρινά διαπιστευτήρια (time-limited credentials) που δημιουργούνται στον διακομιστή εφαρμογής χρησιμοποιώντας HMAC-SHA1. Ο διακομιστής εφαρμογής κρυπτογραφεί το όνομα χρήστη με το μυστικό κλειδί του διακομιστή TURN και επιστρέφει username και credential στον πελάτη. Ο πελάτης τα μεταβιβάζει στη διαμόρφωση RTCPeerConnection και το πρόγραμμα περιήγησης τα χρησιμοποιεί κατά τη δημιουργία εκχώρησης στον διακομιστή TURN. Μετά τη λήξη των διαπιστευτηρίων, ο πελάτης λαμβάνει νέα από τον διακομιστή εφαρμογής.

TURN vs STUN: σύγκριση

Το TURN και το STUN επιλύουν συναφή προβλήματα διέλευσης NAT, αλλά διαφέρουν ουσιαστικά ως προς τον μηχανισμό και το κόστος. Το TURN αναμεταδίδει κίνηση λειτουργώντας ως ενδιάμεσος, ενώ το STUN βοηθά μόνο στον προσδιορισμό της εξωτερικής διεύθυνσης για άμεση σύνδεση P2P. Η επιλογή μεταξύ τους καθορίζεται από τον τύπο NAT των ομότιμων κόμβων και τις απαιτήσεις απόδοσης.

ΚριτήριοSTUNTURN
ΜηχανισμόςΠροσδιορισμός εξωτερικής διεύθυνσηςΑναμετάδοση κίνησης
ΣύνδεσηΆμεση P2PΜέσω διακομιστή αναμετάδοσης
ΚαθυστέρησηΕλάχιστη (άμεση διαδρομή)Πρόσθετη (μέσω αναμεταδότη)
Φόρτος διακομιστήΜόνο αρχικά αιτήματαΣυνεχής αναμετάδοση κίνησης
ΚόστοςΧαμηλό (μεμονωμένα αιτήματα)Υψηλό (κίνηση στον διακομιστή)
Λειτουργία με Symmetric NATΌχιΝαι
Εύρος ζώνηςΜόνο όριο καναλιού P2PΌριο καναλιού διακομιστή

Στην πράξη, ο διακομιστής TURN χρησιμοποιείται μόνο για συνδέσεις όπου το P2P δεν είναι δυνατό. Σύμφωνα με στατιστικά της Google (WebRTC statistics, 2023), περίπου 15–20% όλων των συνδέσεων WebRTC απαιτούν αναμετάδοση TURN. Το υπόλοιπο 80–85% δημιουργείται μέσω STUN ή τοπικών υποψήφιων host. Κατά τον σχεδιασμό της εφαρμογής, θα πρέπει να προβλέπεται προϋπολογισμός για κίνηση TURN σε ποσοστό 15–20% του συνολικού όγκου δεδομένων πολυμέσων, εάν το κοινό περιλαμβάνει χρήστες από εταιρικά δίκτυα και περιοχές με αυστηρούς περιορισμούς NAT.

Κόστος και απόδοση διακομιστή TURN

Ο διακομιστής TURN καταναλώνει σημαντικούς πόρους, καθώς όλη η κίνηση πολυμέσων περνά μέσω αυτού. Κάθε ενεργή κλήση με αναμετάδοση TURN χρησιμοποιεί εύρος ζώνης του διακομιστή ίσο με τη συνολική χωρητικότητα της κίνησης πολυμέσων (εισερχόμενη + εξερχόμενη ροή). Για βιντεοκλήση ποιότητας HD (720p) αυτό μπορεί να είναι 1,5–2,5 Mbps ανά κατεύθυνση, δηλαδή 3–5 Mbps συνολικής κίνησης μέσω του διακομιστή TURN.

Υπάρχουν πολλές επιλογές για την ανάπτυξη υποδομής TURN. Οι δωρεάν δημόσιοι διακομιστές TURN δεν συνιστώνται για παραγωγή λόγω έλλειψης εγγυήσεων ποιότητας και ασφάλειας. Οι εμπορικοί πάροχοι (Twilio Network Traversal Service, Xirsys, Metered) παρέχουν TURN ως υπηρεσία με πληρωμή ανά gigabyte κίνησης — το τυπικό κόστος είναι $0,005–0,02 ανά gigabyte. Η ανεξάρτητη ανάπτυξη με βάση το coturn (διακομιστής TURN ανοιχτού κώδικα) απαιτεί διακομιστή με επαρκές εύρος ζώνης και ρύθμιση παρακολούθησης.

  • coturn — ο πιο δημοφιλής διακομιστής TURN ανοιχτού κώδικα που χρησιμοποιείται στα περισσότερα συστήματα παραγωγής, υποστηρίζει μεταφορά UDP, TCP, TLS και DTLS.
  • Twilio — εμπορική υπηρεσία που παρέχει TURN + STUN με πληρωμή ανά κίνηση και αυθεντικοποίηση μέσω προσωρινών κουπονιών.
  • Xirsys — εξειδικευμένος πάροχος TURN με παγκόσμιο δίκτυο διακομιστών και λεπτομερή ανάλυση χρήσης.
  • Metered.ca — υπηρεσία TURN με δωρεάν όριο έως 50 GB μηνιαίως και πληρωμή για υπέρβαση.
  • Self-hosted coturn — πλήρης έλεγχος της διαμόρφωσης, αλλά απαιτεί διαχείριση διακομιστή και ρύθμιση παρακολούθησης διαθεσιμότητας.

Κατά την επιλογή λύσης για διακομιστή TURN, θα πρέπει να λαμβάνεται υπόψη η γεωγραφία των χρηστών, το κόστος κίνησης και οι απαιτήσεις ασφάλειας. Για εφαρμογές με χιλιάδες ταυτόχρονες κλήσεις, το self-hosted coturn σε διακομιστές με ευρυζωνικό κανάλι (1+ Gbps) μπορεί να είναι οικονομικότερο από εμπορικούς παρόχους. Για μικρά έργα με δεκάδες χρήστες, οι εμπορικές υπηρεσίες TURN είναι προτιμότερες λόγω έλλειψης εξόδων διαχείρισης και παρακολούθησης.

Συχνές ερωτήσεις

Τι είναι ο διακομιστής TURN με απλά λόγια;

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

Πότε απαιτείται διακομιστής TURN στο WebRTC;

Ο διακομιστής TURN απαιτείται όταν και οι δύο συμμετέχοντες σε μια κλήση WebRTC βρίσκονται πίσω από Symmetric NAT ή εταιρικά τείχη προστασίας που αποκλείουν την κίνηση P2P. Σε τέτοιες περιπτώσεις, το STUN δεν μπορεί να βοηθήσει και η διαδικασία ICE μεταβαίνει αυτόματα στον υποψήφιο relay που ελήφθη από τον διακομιστή TURN.

Ποια είναι η διαφορά μεταξύ TURN και STUN;

Το STUN απλώς δείχνει στον υπολογιστή την εξωτερική του διεύθυνση για άμεση σύνδεση. Το TURN αναμεταδίδει ενεργά την κίνηση μέσω του εαυτού του. Το STUN δεν δημιουργεί φόρτο στον διακομιστή, το TURN καταναλώνει εύρος ζώνης. Το STUN λειτουργεί μόνο με συγκεκριμένους τύπους NAT, το TURN λειτουργεί πάντα αλλά είναι πιο ακριβό.

Πόσο κοστίζει ένας διακομιστής TURN;

Το κόστος ενός διακομιστή TURN εξαρτάται από τον πάροχο και τον όγκο κίνησης. Η Twilio χρεώνει περίπου $0,005–0,01 ανά GB κίνησης που διέρχεται από το TURN. Η Xirsys από $0,007 ανά GB. Η ανεξάρτητη ανάπτυξη coturn απαιτεί διακομιστή με κανάλι τουλάχιστον 100 Mbps, το κόστος του οποίου εξαρτάται από τον πάροχο φιλοξενίας.

Πώς να ρυθμίσετε τον δικό σας διακομιστή TURN;

Ο δικός σας διακομιστής TURN ρυθμίζεται χρησιμοποιώντας το coturn (ανοιχτού κώδικα). Η εγκατάσταση περιλαμβάνει διαμόρφωση θυρών, αυθεντικοποίησης (shared secret), πιστοποιητικών TLS και τείχους προστασίας. Το βασικό αρχείο διαμόρφωσης περιέχει παραμέτρους listening-port, realm, user και fingerprint. Μετά τη ρύθμιση, ο διακομιστής αναφέρεται στο iceServers του WebRTC με το πρόθεμα turn: ή turns: για TLS.

Σύνοψη

  • TURN Server — διακομιστής αναμετάδοσης για αναμετάδοση κίνησης πολυμέσων όταν η άμεση σύνδεση P2P μεταξύ ομότιμων κόμβων δεν είναι δυνατή.
  • Αρχή λειτουργίας — ο πελάτης δημιουργεί μια εκχώρηση στον διακομιστή TURN, λαμβάνει μια διεύθυνση μεταφοράς αναμετάδοσης και τη χρησιμοποιεί για αποστολή και λήψη δεδομένων μέσω του ενδιάμεσου διακομιστή.
  • Ρόλος στο ICE — το TURN ενεργοποιείται ως τελευταίο εφεδρικό μέσο στη διαδικασία ICE όταν οι υποψήφιοι host και srflx δεν εξασφάλισαν σύνδεση.
  • Περιορισμοί — πρόσθετη καθυστέρηση (50–200 ms), κατανάλωση εύρους ζώνης διακομιστή (3–5 Mbps ανά κλήση HD), κόστη κίνησης.
  • Σύγκριση με STUN — το TURN λειτουργεί με οποιονδήποτε τύπο NAT, αλλά είναι πιο ακριβό και πιο αργό. Το STUN προτιμάται για το 80–85% των συνδέσεων.
  • Εργαλεία — coturn (self-hosted ανοιχτού κώδικα), Twilio NTS, Xirsys, Metered.ca για εμπορική χρήση διακομιστή TURN.
  • Σύσταση — χρησιμοποιήστε TURN μόνο ως εφεδρικό μέσο σε περίπτωση αποτυχίας STUN, παρακολουθείτε το ποσοστό συνδέσεων TURN και βελτιστοποιείτε όταν χρειάζεται.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης