IPtables este liniar și citește regulile de sus în jos până când ajunge la o țintă ACCEPT, REJECT sau DROP, apoi încetează să citească regulile. În cazul tău, vrei să ai iptables -I DOCKER-USER -j DROP
ca și ultima regulă din lanțul dvs., altfel fiecare pachet va fi aruncat. De asemenea, nu este nevoie de regula RETURN la sfârșit, deoarece IPtables nu va mai citi regulile odată ce ajunge la regula DROP chiar deasupra acesteia. Acele reguli IPtables cu tun0 arată bine, dar asigură-te că ai și aceste reguli:
iptables -t filtru -I INTRARE 1 -i tun0 -j DOCKER-USER
iptables -t filter -I OUTPUT 2 -o tun0 -j DOCKER-USER
Pentru o bună practică, asigurați-vă că acceptați tot traficul loopback, care nu va ajunge niciodată pe internet și nici nu va părăsi mașina:
iptables -t filtru -I INTRARE 3 -i tun0 -j ACCEPT
Să analizăm cerințele dvs. unul câte unul:
- Orice servicii atribuite acestui nod utilizează exclusiv conexiunea VPN
Nu ați folosi IPtables pentru a face acest lucru. Rulați aceste comenzi pe servere:
IP route add default prin ${LOCAL_VPN_IP}
Cred că OpenVPN utilizează de obicei 10.8.0.0/16, așa că gateway-ul implicit ar fi probabil 10.8.0.1 sau ceva de genul acesta. IProute2 (comanda ip) este încorporată în nucleu, la fel ca IPtables.
- Fără scurgeri (adică, DNS sau alt trafic)
Mai întâi ar trebui să redirecționați tot traficul prin VPN, punând acest lucru în configurația serverului dvs. OpenVPN:
push "redirect-gateway autolocal"
Acest lucru îi face pe clienți să-și transfere tot traficul prin VPN, chiar și DNS și altele. Dacă serverul OpenVPN se defectează, internetul nu va mai funcționa pe clienți.
- Dacă VPN-ul se deconectează, tot traficul este eliminat
Vezi pasul 2
- Permite descoperirea serviciului și conexiunile la alte containere din Swarm
Cred că OpenVPN face acest lucru în mod implicit. Pot să fac ping/arp de la un client la alți clienți care se află pe serverul OpenVPN.Cu siguranță ar trebui să puteți accesa serviciile care sunt pe alți clienți.
Sper că asta vă răspunde la întrebări!