Mikrokontroler dengan modul Wi-Fi UART tidak perlu menerapkan VPN untuk menjangkau layanan di belakangnya. Modul itu sudah menjalankan tumpukan TCP/IP dan menyediakan soket melalui porta serial, dan gateway di LAN yang sama dapat membawa lalu lintas itu melalui tunnel. Rancangan ini hanya berhasil jika Anda dapat menjawab empat pertanyaan secara berurutan, jadi perlakukan sebagai daftar periksa: alamat, soket, rute, batas. Berhentilah pada gerbang pertama yang gagal, karena gerbang berikutnya tidak dapat menggantikannya.

Beri satu tugas per lapisan

Tautan UART membawa perintah AT dan muatan antara mikrokontroler dan modul. Modul bergabung ke jaringan Wi-Fi dan memiliki koneksi IP, termasuk alamat sumbernya. Gateway memiliki tunnel, kredensial, dan kebijakan penerusan. Memisahkan tugas-tugas itu yang membuat rancangan dapat di-debug pada setiap tahap.

Pemisahan itu juga mengubah cara Anda menulis kebijakan gateway. Aturan sumber harus menyebut alamat LAN modul, bukan alamat khayalan untuk mikrokontroler di balik tautan serial. Mikrokontroler tidak memiliki identitas IP sendiri dalam rancangan ini, dan berpura-pura memilikinya menghasilkan aturan yang tidak pernah cocok.

Beri modul alamat tetap melalui mekanisme reservasi apa pun yang didukung jaringan, atau tempatkan perangkat pada segmennya sendiri dan biarkan gateway mencocokkan berdasarkan antarmuka. Alamat dari kumpulan yang berubah setelah reboot akhirnya akan merusak kebijakan yang benar saat Anda menulisnya.

Bisakah gateway menyebut alamat modul?

Sebelum soket mana pun dibuka, pastikan modul terasosiasi, punya alamat, dan gateway melihatnya pada antarmuka yang diharapkan. Inilah gerbang yang paling sering gagal diam-diam, karena modul akan dengan senang hati melaporkan upaya koneksi yang tidak pernah meninggalkan LAN.

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

Mode satu koneksi menjaga urutan perintah tetap sederhana, dan itu titik awal yang benar untuk satu sensor yang berbicara dengan satu layanan. Mode banyak koneksi mengubah sintaksis setiap perintah berikutnya, jadi putuskan Anda di mode mana sebelum menyalin contoh dari versi firmware lain.

Buka soket dari modul

Setelah alamat dan mode ditetapkan, modul dapat membuka koneksi TCP ke layanan privat. Alamat di bawah adalah contoh dari rentang dokumentasi; gantilah dengan milik Anda dan pertahankan bentuk yang sama.

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

Perintah AT itu membuka soket TCP biasa, dan soket bukan tunnel: tidak ada yang membuat VPN di dalamnya dan tidak ada yang mengenkripsi muatan di dalamnya. Mode TLS pada firmware adalah fitur terpisah dengan perintahnya sendiri dan penanganan sertifikatnya sendiri, dan modul UART sembarang mungkin tidak mendukung keduanya. Periksa referensi perintah AT TCP/IP untuk firmware Anda alih-alih menganggap sintaksis di atas berlaku untuknya.

Panjang muatan pada AT+CIPSEND harus sesuai dengan yang benar-benar Anda kirim, atau modul akan menunggu byte yang tidak pernah datang dan koneksi tampak menggantung. Kegagalan itu tampak seperti masalah jaringan dan hampir selalu selisih satu pada panjangnya.

Rutekan koneksi melalui gateway

Gateway memerlukan rute ke tujuan privat, izin meneruskan dari jaringan perangkat ke dalam tunnel, dan jalur balik yang mencapai modul. Jika sisi jauh tidak merutekan kembali ke subnet perangkat, rancangan memerlukan aturan penerjemahan yang disengaja, dan aturan itu mengubah identitas sumber yang dilihat layanan.

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

Perhatikan jalur balik lebih dulu. Paket yang diteruskan dan mencapai layanan tetapi tidak pernah kembali menghasilkan batas waktu di modul tanpa kesalahan apa pun di gateway, yang membuat orang menatap tautan Wi-Fi selama berjam-jam. Entri conntrack memberi tahu Anda apakah gateway sama sekali melihat balasannya.

Putuskan di mana tunnel benar-benar berakhir

Tunnel dimulai di gateway. Tunnel itu tidak mengenkripsi tautan UART, dan tidak menjadikan segmen LAN antara modul dan gateway sebagai bagian dari tunnel. Apa pun yang perlu dilindungi pada segmen itu memerlukan mekanismenya sendiri, dan TCP biasa dalam contoh ini bukan TLS.

Putuskan juga apa yang terjadi ketika tunnel putus. Jika pengiriman harus hanya melalui VPN, kebijakan penerusan tidak boleh mengizinkan tujuan yang sama melalui jalur alternatif, karena rute cadangan diam-diam menggagalkan syarat itu. Batasi perilaku sambung ulang agar modul yang terputus tidak membanjiri tautan serial atau layanan jauh dengan percobaan ulang.

Catat keempat jawaban bersama-sama: alamat modul, target soket, rute gateway, dan tempat enkripsi dimulai. Orang berikutnya yang men-debug perangkat ini akan memerlukan keempatnya, dan tidak satu pun dapat disimpulkan hanya dari firmware.

Artikel terkait