Am un sistem backend folosit pentru dispozitivele IOT care folosesc protocolul UDP pentru comunicații. Și există anumite API-uri bazate pe TCP (HTTP2) pentru aplicații mobile din același backend.
Încerc să creez o caracteristică de actualizare continuă pentru a activa 0 corecție pentru timpul de nefuncționare a serviciilor de backend.
Configurația mea este așa.
În loc să expun direct socket-urile la aplicații, încerc să fac un proxy transparent proceselor mele. Am expus 2 prize (1 udp și 1 tcp) la internetul public folosind firewall.
Serverul meu de producție deschide un set diferit de porturi pentru udp și tcp (care pot fi modificate prin variabilele de mediu fără a schimba binarul de bază).
Pasul 1:
Încerc să creez un proxy transparent în aceeași mașină de la portul udp 16002 la 17002. Pentru udp, serverul meu va iniția și o anumită comunicare cu dispozitivele din sălbăticie. Serverul ar trebui să vadă IP-ul/portul sursă și să comunice înapoi cu aceste dispozitive care ar putea fi sub anumite NAT (de obicei, router WiFi) prin respectarea aceleiași politici de origine a NAT-urilor.
Și același lucru pentru tcp. De la portul 16012 la portul 17012.
Aceasta este implementarea tipică prin externalizarea porturilor reale.
Nu pot face asta să funcționeze.
Pasul 2:
Ori de câte ori există cod nou care trebuie corectat, vreau să afișez noul cod pe două seturi diferite de porturi, așa cum se arată în imaginea de mai jos (P2 - Procesul 2).
Când procesul 2 este activ și rulează, voi schimba maparea adresei IP la noul Proces (P2). După ce acordăm un anumit timp pentru ca P1 să termine orice operațiuni IO în așteptare, vom opri Procesul P1.
Pentru următorul patch, vom afișa P1' și inversele procesului.
Există vreun defect în acest design? Acest lucru poate fi realizat din punct de vedere tehnic folosind iptables și tproxy sau orice alte instrumente Linux?
M-am gândit să construiesc un router L7 și să transmit pachetele înainte și înapoi prin definirea obiectelor de nivel înalt. Dar sunt curios dacă acest lucru se poate face folosind rutarea de nivel scăzut L3/L4, deoarece poate fi mai eficient și testat în luptă. Cu siguranță, aceste instrumente nft, iptables au probleme de utilizare și nu sunt foarte intuitive, în special nft, pentru un dezvoltator.