Letakkan VPN di Belakang Modul Wi-Fi UART, Bukan di Dalamnya
Modul Wi-Fi UART memerlukan soket TCP, dan gateway memiliki terowong itu. Namakan alamatnya, kekalkan laluan pulang terbuka dan ketahui di mana penyulitan bermula.
Mikropengawal dengan modul Wi-Fi UART tidak perlu melaksanakan VPN untuk sampai ke perkhidmatan di belakangnya. Modul itu sudah menjalankan tindanan TCP/IP dan mendedahkan soket melalui port bersiri, dan gateway pada LAN yang sama boleh membawa trafik itu melalui terowong. Reka bentuk ini hanya berkesan jika anda boleh menjawab empat soalan mengikut urutan, jadi anggap ia sebagai senarai semak: alamat, soket, laluan, sempadan. Berhenti pada pintu pertama yang gagal, kerana pintu seterusnya tidak dapat mengimbanginya.
Berikan satu tugas bagi setiap lapisan
Pautan UART membawa arahan AT dan muatan antara mikropengawal dan modul. Modul menyertai rangkaian Wi-Fi dan memiliki sambungan IP, termasuk alamat sumbernya. Gateway memiliki terowong, kelayakan dan dasar penghantaran. Memisahkan tugas-tugas itu yang menjadikan reka bentuk boleh dinyahpepijat pada setiap peringkat.
Pemisahan itu juga mengubah cara anda menulis dasar gateway. Peraturan sumber harus menamakan alamat LAN modul, bukan alamat khayalan untuk mikropengawal di sebalik pautan bersiri. Mikropengawal tidak mempunyai identiti IP sendiri dalam reka bentuk ini, dan berpura-pura ia memilikinya menghasilkan peraturan yang tidak pernah sepadan.
Berikan modul alamat yang stabil melalui mana-mana mekanisme tempahan yang disokong rangkaian, atau letakkan peranti pada segmen mereka sendiri dan biarkan gateway memadankan mengikut antara muka. Alamat kolam yang berubah selepas but semula akhirnya akan memecahkan dasar yang betul semasa anda menulisnya.
Bolehkah gateway menamakan alamat modul?
Sebelum mana-mana soket dibuka, sahkan modul telah bersekutu, mempunyai alamat dan gateway melihatnya pada antara muka yang dijangka. Inilah pintu yang paling kerap gagal secara senyap, kerana modul akan dengan senang hati melaporkan percubaan sambungan yang tidak pernah meninggalkan LAN.
AT+CWMODE=1 AT+CWJAP="lab-wifi","passphrase" AT+CIPSTA? AT+CIPMUX=0
Mod satu sambungan mengekalkan urutan arahan mudah, dan ia titik permulaan yang betul untuk satu penderia yang bercakap dengan satu perkhidmatan. Mod berbilang sambungan mengubah sintaks setiap arahan berikutnya, jadi tentukan mod mana anda berada sebelum menyalin contoh daripada versi perisian tegar yang lain.
Buka soket dari modul
Setelah alamat dan mod ditetapkan, modul boleh membuka sambungan TCP ke perkhidmatan peribadi. Alamat di bawah ialah contoh daripada julat dokumentasi; gantikannya dengan milik anda dan kekalkan bentuk yang sama.
AT+CIPSTART="TCP","10.90.0.20",9000
AT+CIPSEND=18
{"t":21.4,"rh":48}
Arahan AT itu membuka soket TCP biasa, dan soket bukan terowong: tiada apa di dalamnya mencipta VPN dan tiada apa menyulitkan muatan. Mod TLS perisian tegar ialah ciri berasingan dengan arahannya sendiri dan pengendalian sijilnya sendiri, dan modul UART sewenang-wenangnya mungkin tidak menyokong kedua-duanya. Semak rujukan arahan AT TCP/IP perisian tegar anda dan bukannya menganggap sintaks di atas terpakai padanya.
Panjang muatan dalam AT+CIPSEND mesti sepadan dengan apa yang anda hantar sebenarnya, jika tidak modul akan menunggu bait yang tidak pernah tiba dan sambungan akan kelihatan tergantung. Kegagalan itu kelihatan seperti masalah rangkaian dan hampir selalu kesilapan satu pada panjangnya.
Halakan sambungan melalui gateway
Gateway memerlukan laluan ke destinasi peribadi, kebenaran menghantar dari rangkaian peranti ke dalam terowong dan laluan pulang yang sampai ke modul. Jika sisi jauh tidak menghalakan semula ke subrangkaian peranti, reka bentuk memerlukan peraturan terjemahan yang disengajakan, dan peraturan itu mengubah identiti sumber yang dilihat perkhidmatan.
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 laluan pulang dahulu. Paket yang dihantar sampai ke perkhidmatan dan tidak pernah kembali menghasilkan tamat masa pada modul tanpa sebarang ralat pada gateway, yang membuat orang merenung pautan Wi-Fi berjam-jam. Entri conntrack memberitahu anda sama ada gateway melihat balasannya.
Tentukan di mana terowong itu sebenarnya berakhir
Terowong bermula di gateway. Ia tidak menyulitkan pautan UART, dan ia tidak menjadikan segmen LAN antara modul dan gateway sebagai sebahagian daripada terowong. Apa-apa yang memerlukan perlindungan pada segmen itu memerlukan mekanismenya sendiri, dan TCP biasa dalam contoh ini bukan TLS.
Tentukan juga apa yang berlaku apabila terowong jatuh. Jika penghantaran mesti melalui VPN sahaja, dasar penghantaran tidak boleh membenarkan destinasi yang sama melalui laluan alternatif, kerana laluan sandaran secara senyap menggagalkan keperluan itu. Hadkan tingkah laku sambung semula supaya modul yang terputus tidak membanjiri pautan bersiri atau perkhidmatan jauh dengan percubaan semula.
Catat keempat-empat jawapan bersama-sama: alamat modul, sasaran soket, laluan gateway dan di mana penyulitan bermula. Orang seterusnya yang menyahpepijat peranti ini akan memerlukan keempat-empatnya, dan tiada satu pun boleh disimpulkan daripada perisian tegar sahaja.