Încerc să configurez un laborator de echilibrare a încărcăturii pentru HAproxy în modul cu un singur braț (când IP-ul real și serverele de backend rezidă în aceeași subrețea, în timp ce clienții actuali sunt întotdeauna la distanță). O altă solicitare este de a face IP-urile sursei clientului vizibile pentru nodurile backend. Pe măsură ce echilibrăm încărcarea aplicației personalizate bazate pe tcp, se pare că opțiunea „source 0.0.0.0 usesrc clientip” este o alegere corectă aici. De asemenea, am configurat backend-urile pentru a avea gateway-uri implicite care să indice adresa IP a HAproxy.
Deși se întâmplă lucruri ciudate odată ce activez această opțiune de backend: văd că conexiunea la VIP-ul frontal a fost realizată corect și s-a format o strângere de mână în trei căi. Dar când serverul HAproxy încearcă să creeze o a doua sesiune pentru a ajunge la serverele backend cu IP falsificat al unui client, văd exact acest lucru care se întâmplă:
- Proxy trimite SYN cu adresa IP a Clientului falsificat la unul dintre backend;
- Backend-ul este în mod normal răspunsuri cu pachetul SYN-ACK;
- Proxy-ul NU trimite ultimul ACK, doar trimite orbește pachete SYN după timeout cu același rezultat;
- Pe un proxy, văd că această conexiune este marcată ca SYN_SENT în ieșirea netstat, așa că se pare că serverul proxy nu acceptă pachetul SYN-ACK din anumite motive.
Orice laudă ar fi apreciată.