Ένας μικροελεγκτής με μονάδα Wi-Fi UART δεν χρειάζεται να υλοποιήσει VPN για να φτάσει σε μια υπηρεσία πίσω από αυτό. Η μονάδα εκτελεί ήδη στοίβα TCP/IP και εκθέτει υποδοχές μέσω της σειριακής θύρας, και μια πύλη στο ίδιο τοπικό δίκτυο μπορεί να μεταφέρει αυτή την κίνηση μέσα από το τούνελ. Το σχέδιο λειτουργεί μόνο αν μπορείτε να απαντήσετε τέσσερις ερωτήσεις με σειρά, οπότε αντιμετωπίστε το ως λίστα ελέγχου: διεύθυνση, υποδοχή, διαδρομή, όριο. Σταματήστε στην πρώτη πύλη που αποτυγχάνει, γιατί οι επόμενες δεν μπορούν να την αντισταθμίσουν.

Δώστε μία εργασία σε κάθε επίπεδο

Ο σύνδεσμος UART μεταφέρει εντολές AT και ωφέλιμο φορτίο μεταξύ του μικροελεγκτή και της μονάδας. Η μονάδα συνδέεται στο δίκτυο Wi-Fi και κατέχει τη σύνδεση IP, μαζί με τη διεύθυνση προέλευσής της. Η πύλη κατέχει το τούνελ, τα διαπιστευτήρια και την πολιτική προώθησης. Ο διαχωρισμός αυτών των εργασιών είναι αυτό που κάνει το σχέδιο αποσφαλματώσιμο σε κάθε στάδιο.

Ο διαχωρισμός αλλάζει και τον τρόπο που γράφετε την πολιτική της πύλης. Ένας κανόνας προέλευσης πρέπει να ονομάζει τη διεύθυνση LAN της μονάδας, όχι μια φανταστική διεύθυνση για τον μικροελεγκτή πίσω από τον σειριακό σύνδεσμο. Ο μικροελεγκτής δεν έχει δική του ταυτότητα IP σε αυτό το σχέδιο, και το να προσποιούμαστε ότι έχει παράγει έναν κανόνα που δεν ταιριάζει ποτέ.

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

Μπορεί η πύλη να ονομάσει τη διεύθυνση της μονάδας;

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

AT+CWMODE=1
AT+CWJAP="lab-wifi","passphrase"
AT+CIPSTA?
AT+CIPMUX=0

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

Ανοίξτε την υποδοχή από τη μονάδα

Όταν η διεύθυνση και η λειτουργία έχουν καθοριστεί, η μονάδα μπορεί να ανοίξει σύνδεση TCP στην ιδιωτική υπηρεσία. Η διεύθυνση παρακάτω είναι παράδειγμα από εύρος τεκμηρίωσης· αντικαταστήστε την με τη δική σας και κρατήστε την ίδια μορφή.

AT+CIPSTART="TCP","10.90.0.20",9000
AT+CIPSEND=18
{"t":21.4,"rh":48}

Αυτή η εντολή AT ανοίγει μια απλή υποδοχή TCP, και μια υποδοχή δεν είναι τούνελ: τίποτα μέσα της δεν δημιουργεί VPN και τίποτα δεν κρυπτογραφεί το ωφέλιμο φορτίο. Η λειτουργία TLS του υλικολογισμικού είναι ξεχωριστό χαρακτηριστικό με δική της εντολή και δική της διαχείριση πιστοποιητικών, και μια τυχαία μονάδα UART μπορεί να μην υποστηρίζει κανένα από τα δύο. Ελέγξτε την αναφορά εντολών AT για TCP/IP του υλικολογισμικού σας αντί να υποθέσετε ότι η παραπάνω σύνταξη ισχύει γι’ αυτό.

Το μήκος του ωφέλιμου φορτίου στο AT+CIPSEND πρέπει να ταιριάζει με αυτό που στέλνετε πραγματικά, αλλιώς η μονάδα θα περιμένει byte που δεν φτάνουν ποτέ και η σύνδεση θα φαίνεται κολλημένη. Αυτή η αποτυχία μοιάζει με πρόβλημα δικτύου και σχεδόν πάντα είναι σφάλμα κατά ένα στο μήκος.

Δρομολογήστε τη σύνδεση μέσω της πύλης

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

ip route get 10.90.0.20
sudo tcpdump -ni wg0 'host 10.90.0.20 and port 9000'
sudo conntrack -L | grep 9000

Προσέξτε πρώτα τη διαδρομή επιστροφής. Ένα προωθημένο πακέτο που φτάνει στην υπηρεσία και δεν επιστρέφει ποτέ παράγει λήξη χρόνου στη μονάδα χωρίς κανένα σφάλμα στην πύλη, κάτι που στέλνει τους ανθρώπους να κοιτούν τον σύνδεσμο Wi-Fi για ώρες. Η καταχώριση conntrack σας λέει αν η πύλη είδε καθόλου την απάντηση.

Αποφασίστε πού τελειώνει πραγματικά το τούνελ

Το τούνελ ξεκινά στην πύλη. Δεν κρυπτογραφεί τον σύνδεσμο UART, και δεν κάνει το τμήμα LAN μεταξύ μονάδας και πύλης μέρος του τούνελ. Ό,τι χρειάζεται προστασία σε αυτό το τμήμα χρειάζεται δικό του μηχανισμό, και το απλό TCP σε αυτό το παράδειγμα δεν είναι TLS.

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

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

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