VPN UART Wi-Fi മൊഡ്യൂളിന് പുറകിൽ വയ്ക്കുക, അതിനുള്ളിൽ അല്ല
UART Wi-Fi മൊഡ്യൂളിന് ഒരു TCP സോക്കറ്റ് വേണം, ടണൽ ഗേറ്റ്വേയുടേതാണ്. അതിന്റെ വിലാസം പറയുക, മടക്കപ്പാത തുറന്നിടുക, എൻക്രിപ്ഷൻ എവിടെ തുടങ്ങുന്നുവെന്ന് അറിയുക.
UART Wi-Fi മൊഡ്യൂളുള്ള ഒരു മൈക്രോകൺട്രോളർ അതിന് പുറകിലുള്ള ഒരു സേവനത്തിലെത്താൻ VPN നടപ്പിലാക്കേണ്ടതില്ല. മൊഡ്യൂൾ ഇതിനകം TCP/IP സ്റ്റാക്ക് പ്രവർത്തിപ്പിക്കുകയും സീരിയൽ പോർട്ടിലൂടെ സോക്കറ്റുകൾ നൽകുകയും ചെയ്യുന്നു, അതേ LAN-ലുള്ള ഒരു ഗേറ്റ്വേക്ക് ആ ട്രാഫിക് ടണലിലൂടെ കൊണ്ടുപോകാം. നാല് ചോദ്യങ്ങൾക്ക് ക്രമത്തിൽ ഉത്തരം നൽകാൻ കഴിഞ്ഞാൽ മാത്രമേ ഈ രൂപകൽപ്പന പ്രവർത്തിക്കൂ, അതിനാൽ ഇതിനെ ഒരു പരിശോധനപ്പട്ടികയായി കാണുക: വിലാസം, സോക്കറ്റ്, പാത, അതിർത്തി. പരാജയപ്പെടുന്ന ആദ്യ ഗേറ്റിൽ നിർത്തുക, കാരണം പിന്നീടുള്ളവയ്ക്ക് അത് നികത്താനാവില്ല.
ഓരോ പാളിക്കും ഒരു ജോലി നൽകുക
UART ലിങ്ക് മൈക്രോകൺട്രോളറും മൊഡ്യൂളും തമ്മിൽ AT കമാന്റുകളും പേലോഡും കൊണ്ടുപോകുന്നു. മൊഡ്യൂൾ Wi-Fi നെറ്റ്വർക്കിൽ ചേരുകയും അതിന്റെ സ്രോതസ്സ് വിലാസം ഉൾപ്പെടെ IP കണക്ഷൻ കൈവശം വയ്ക്കുകയും ചെയ്യുന്നു. ഗേറ്റ്വേ ടണലും ക്രെഡൻഷ്യലുകളും ഫോർവേഡിംഗ് നയവും കൈവശം വയ്ക്കുന്നു. ഈ ജോലികൾ വേർതിരിച്ചു നിർത്തുന്നതാണ് രൂപകൽപ്പനയെ ഓരോ ഘട്ടത്തിലും ഡീബഗ് ചെയ്യാവുന്നതാക്കുന്നത്.
ഈ വേർതിരിവ് ഗേറ്റ്വേ നയം എഴുതുന്ന രീതിയും മാറ്റുന്നു. ഉറവിട നിയമം മൊഡ്യൂളിന്റെ LAN വിലാസം പറയണം, സീരിയൽ ലിങ്കിന് പുറകിലുള്ള മൈക്രോകൺട്രോളറിനുള്ള ഒരു സാങ്കൽപ്പിക വിലാസമല്ല. ഈ രൂപകൽപ്പനയിൽ മൈക്രോകൺട്രോളറിന് സ്വന്തം IP ഐഡന്റിറ്റി ഇല്ല, ഉണ്ടെന്ന് അഭിനയിക്കുന്നത് ഒരിക്കലും ഒത്തുപോകാത്ത ഒരു നിയമം സൃഷ്ടിക്കുന്നു.
നെറ്റ്വർക്ക് പിന്തുണയ്ക്കുന്ന ഏത് റിസർവേഷൻ സംവിധാനത്തിലൂടെയും മൊഡ്യൂളിന് സ്ഥിരമായ വിലാസം നൽകുക, അല്ലെങ്കിൽ ഉപകരണങ്ങളെ അവയുടെ സ്വന്തം സെഗ്മെന്റിൽ വയ്ക്കുകയും ഗേറ്റ്വേയെ ഇന്റർഫേസ് അനുസരിച്ച് ഒത്തുപോകാൻ അനുവദിക്കുകയും ചെയ്യുക. റീബൂട്ടിന് ശേഷം മാറുന്ന പൂൾ വിലാസം എഴുതുമ്പോൾ ശരിയായിരുന്ന നയം ഒടുവിൽ തകർക്കും.
ഗേറ്റ്വേക്ക് മൊഡ്യൂളിന്റെ വിലാസം പറയാനാകുമോ?
ഏതെങ്കിലും സോക്കറ്റ് തുറക്കുന്നതിന് മുമ്പ്, മൊഡ്യൂൾ ബന്ധിപ്പിച്ചിട്ടുണ്ടെന്നും അതിന് വിലാസമുണ്ടെന്നും ഗേറ്റ്വേ അതിനെ പ്രതീക്ഷിച്ച ഇന്റർഫേസിൽ കാണുന്നുവെന്നും ഉറപ്പാക്കുക. ഏറ്റവും കൂടുതൽ നിശ്ശബ്ദമായി പരാജയപ്പെടുന്ന ഗേറ്റ് ഇതാണ്, കാരണം LAN വിട്ടിട്ടില്ലാത്ത ഒരു കണക്ഷൻ ശ്രമത്തെക്കുറിച്ച് മൊഡ്യൂൾ സന്തോഷത്തോടെ റിപ്പോർട്ട് ചെയ്യും.
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 മൊഡ്യൂൾ രണ്ടും പിന്തുണച്ചെന്ന് വരില്ല. മുകളിലുള്ള വാക്യഘടന അതിന് ബാധകമാണെന്ന് കരുതുന്നതിന് പകരം നിങ്ങളുടെ ഫേംവെയറിന്റെ 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 ലിങ്ക് എൻക്രിപ്റ്റ് ചെയ്യുന്നില്ല, മൊഡ്യൂളും ഗേറ്റ്വേയും തമ്മിലുള്ള LAN സെഗ്മെന്റിനെ ടണലിന്റെ ഭാഗമാക്കുന്നുമില്ല. ആ സെഗ്മെന്റിൽ സംരക്ഷണം വേണ്ട എന്തിനും സ്വന്തം സംവിധാനം വേണം, ഈ ഉദാഹരണത്തിലെ സാധാരണ TCP ഒരു TLS അല്ല.
ടണൽ വീഴുമ്പോൾ എന്ത് സംഭവിക്കുമെന്നും തീരുമാനിക്കുക. ഡെലിവറി VPN വഴി മാത്രമായിരിക്കണമെങ്കിൽ, ഫോർവേഡിംഗ് നയം അതേ ലക്ഷ്യസ്ഥാനം ഒരു ബദൽ പാതയിലൂടെ അനുവദിക്കരുത്, കാരണം ഒരു ഫാൾബാക്ക് റൂട്ട് ആവശ്യകത നിശ്ശബ്ദമായി തകർക്കുന്നു. വീണ്ടും ബന്ധിപ്പിക്കുന്ന സ്വഭാവം പരിമിതപ്പെടുത്തുക, അതുവഴി വിച്ഛേദിക്കപ്പെട്ട മൊഡ്യൂൾ സീരിയൽ ലിങ്കോ ദൂരെയുള്ള സേവനമോ വീണ്ടും ശ്രമങ്ങളാൽ നിറയ്ക്കില്ല.
നാല് ഉത്തരങ്ങളും ഒരുമിച്ച് രേഖപ്പെടുത്തുക: മൊഡ്യൂളിന്റെ വിലാസം, സോക്കറ്റിന്റെ ലക്ഷ്യം, ഗേറ്റ്വേയുടെ റൂട്ട്, എൻക്രിപ്ഷൻ എവിടെ തുടങ്ങുന്നു. ഈ ഉപകരണം പിന്നീട് ഡീബഗ് ചെയ്യുന്നയാൾക്ക് നാലും വേണ്ടിവരും, ഒന്നും ഫേംവെയറിൽ നിന്ന് മാത്രം അനുമാനിക്കാനാവില്ല.