UART Wi-Fi модулі бар микроконтроллер оның артындағы қызметке жету үшін VPN енгізуі қажет емес. Модуль қазірдің өзінде TCP/IP стекін іске қосып, сериялық порт арқылы сокеттер ұсынады, ал сол жергілікті желідегі шлюз бұл трафикті туннельмен өткізе алады. Жоба тек төрт сұраққа ретімен жауап бере алғанда жұмыс істейді, сондықтан оны тексеру тізімі ретінде қарастырыңыз: мекенжай, сокет, маршрут, шекара. Бірінші сәтсіз қақпада тоқтаңыз, өйткені кейінгілері оны өтей алмайды.

Әр қабатқа бір міндет беріңіз

UART байланысы микроконтроллер мен модуль арасында AT командалары мен пайдалы жүктемені тасымалдайды. Модуль Wi-Fi желісіне қосылып, өз бастау мекенжайымен қоса IP байланысына ие болады. Шлюз туннельге, тіркелгі деректеріне және жіберу саясатына ие. Осы міндеттерді бөлек ұстау жобаны әр кезеңде жөндеуге қабілетті етеді.

Бөлу шлюз саясатын қалай жазатыныңызды да өзгертеді. Бастау ережесі модульдің жергілікті желі мекенжайын атауы керек, сериялық байланыстың артындағы микроконтроллерге ойдан шығарылған мекенжайды емес. Бұл жобада микроконтроллердің өз IP сәйкестігі жоқ, ал бар деп көрсету ешқашан сәйкес келмейтін ереже жасайды.

Модульге желі қолдайтын кез келген резервтеу тетігі арқылы тұрақты мекенжай беріңіз немесе құрылғыларды өз сегментіне орналастырып, шлюзге интерфейс бойынша сәйкестендіруге мүмкіндік беріңіз. Қайта жүктегеннен кейін өзгеретін пул мекенжайы бір кезде дұрыс болған саясатты бұзады.

Шлюз модульдің мекенжайын атай ала ма?

Кез келген сокет ашылмас бұрын модульдің қосылғанын, мекенжайы бар екенін және шлюз оны күтілетін интерфейсте көріп тұрғанын растаңыз. Бұл ең жиі үнсіз сәтсіздікке ұшырайтын қақпа, өйткені модуль жергілікті желіден ешқашан шықпаған қосылу әрекеті туралы қуана хабарлайды.

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

Бір қосылым режимі командалар тізбегін қарапайым ұстайды және бір қызметпен сөйлесетін бір сенсор үшін дұрыс бастау нүктесі. Көпқосылым режимі әрбір кейінгі команданың синтаксисін өзгертеді, сондықтан басқа firmware нұсқасынан мысал көшірмес бұрын қай режимде екеніңізді анықтаңыз.

Сокетті модульден ашыңыз

Мекенжай мен режим анықталған соң модуль жеке қызметке TCP байланысын аша алады. Төмендегі мекенжай құжаттама ауқымынан алынған мысал; оны өзіңіздікімен ауыстырып, пішінін сақтаңыз.

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

Бұл AT командасы қарапайым TCP сокетін ашады, ал сокет туннель емес: онда ешнәрсе VPN жасамайды және ешнәрсе пайдалы жүктемені шифрламайды. Firmware-дің TLS режимі өз командасы мен өз сертификат өңдеуі бар бөлек мүмкіндік, ал кездейсоқ UART модулі екеуін де қолдамауы мүмкін. Жоғарыдағы синтаксис оған қатысты деп болжаудың орнына firmware-іңіз үшін TCP/IP AT командалар анықтамасын қараңыз.

AT+CIPSEND ішіндегі жүктеме ұзындығы шын мәнінде жібергеніңізге сай болуы керек, әйтпесе модуль ешқашан келмейтін байттарды күтіп, байланыс ілініп тұрғандай көрінеді. Бұл сәтсіздік желі мәселесіне ұқсайды және әрдайым дерлік ұзындықтағы бірлік қатесі.

Байланысты шлюз арқылы өткізіңіз

Шлюзге жеке межелі орынға маршрут, құрылғылар желісінен туннельге жіберуге рұқсат және модульге жететін қайтару жолы қажет. Егер алыс жақ құрылғылар ішкі желісіне кері маршруттамаса, жобаға әдейі жасалған түрлендіру ережесі қажет, ал бұл ереже қызмет көретін бастау сәйкестігін өзгертеді.

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 байланысын шифрламайды және модуль мен шлюз арасындағы жергілікті желі сегментін туннельдің бөлігіне айналдырмайды. Сол сегментте қорғаныс қажет нәрсенің өз тетігі болуы керек, ал бұл мысалдағы қарапайым TCP — TLS емес.

Туннель құлағанда не болатынын да шешіңіз. Егер жеткізу тек VPN арқылы болуы керек болса, жіберу саясаты сол межелі орынға балама жолмен рұқсат бермеуі керек, өйткені қосалқы маршрут талапты үнсіз жояды. Қайта қосылу мінез-құлқын шектеңіз, сонда ажыратылған модуль сериялық байланысты немесе алыс қызметті қайталама әрекеттермен толтырмайды.

Төрт жауапты бірге жазып алыңыз: модульдің мекенжайы, сокеттің межелі орыны, шлюздің маршруты және шифрлау қайдан басталады. Бұл құрылғыны кейін жөндейтін адамға төртеуі де қажет болады, ал олардың ешқайсысын тек firmware-ден шығару мүмкін емес.

Қатысты мақалалар