Vienam klientui reikia pasiekti kito kliento SSH paslaugą, o likusi bazino dalis turėtų likti tokia pat izoliuota kaip dabar. Viliojantis jungiklis yra client-to-client, kuris vienu metu įjungia prieigą tarp visų lygiaverčių klientų ir sprendimą perduoda OpenVPN, o ne branduoliui. Siauresnis atsakymas palieka tą jungiklį išjungtą ir leidžia paties serverio maršrutizavimui ir užkardai perduoti tiksliai vieną srautą.

Mechanizmas svarbesnis už taisyklės tekstą, nes abu būdai padeda paketą į skirtingas vietas. Žinojimas, kurį pasirinkote, paaiškina ir taisyklę, kuri tarsi nieko nedaro, ir lygiavertį klientą, kuris prisijungia be jos.

Kur client-to-client perkelia paketą

Kai client-to-client įjungtas, serveris persiunčia lygiaverčio kliento paketą viduje, o ne siunčia jį atgal per tunelio įrenginį, todėl paketas niekada nepasiekia branduolio persiuntimo kelio. Tai patogu, ir tai taip pat reiškia, kad jūsų užkarda niekada nemato srauto, kurį turėtų prižiūrėti. Palikite parinktį išjungtą ir serveris nukreipia paketą atgal per tą pačią sąsają, o tai pastato jį prieš netfilter. Ta pati sąsaja įeina, ta pati išeina, ir FORWARD grandinei tenka balsas.

Mainai aiškūs: gaunate politikos tašką ir prisiimate maršrutizavimo bei persiuntimo darbą, kurį už jus atliko trumpasis kelias. Tas darbas mažas vienam srautui ir auga su kiekviena pridėta išimtimi. Suskaičiuokite išimtis dabar, nes būtent taisyklių rinkinyje iš tikrųjų gyvena politika tarp lygiaverčių klientų.

Kelias, kuriuo iš tikrųjų eina lygiaverčio kliento paketas

Tarkime, Linux Community OpenVPN 2.6 paslauga, TUN apdorojimas vartotojo erdvėje, o ne DCO, potinklio topologija, tun0 ir bazinas 10.44.0.0/24 su klientu A adresu 10.44.0.21 ir klientu B adresu 10.44.0.37. Esant potinklio topologijai, A gautas adresas ir tinklo kaukė jau apima baziną, tad A siunčia paketą tunelio įrenginiui be papildomo stumiamo maršruto. Patikrinkite faktinį maršrutą A kompiuteryje, o ne tarkite, kad jis yra.

Serveryje paketas atkeliauja adresuotas B, o tai nėra vietinis adresas, todėl persiunčiamas. IPv4 persiuntimas turi būti įjungtas, kad tai apskritai įvyktų, o maršruto paieška turi siųsti paketą atgal per tun0. Todėl užkarda mato persiųstą srautą su ta pačia sąsaja abiejose pusėse, ir tai yra detalė, kurią dauguma taisyklių rinkinių praleidžia. Čia nereikia šaltinio vertimo, ir būtent A adreso išsaugojimas leidžia B taikyti savo taisyklę pagal šaltinį.

Dvi taisyklės serveryje, tokia tvarka

Tris taisyklės neša visą leidimą: persiuntimas, poros išimtis ir numatytasis tunelio poros atmetimas. Priėmimo taisyklė įvardija porą ir paslaugą, todėl leidimas išlieka augant bazinui. Įdėkite ją prieš bet kokį bendrą tunelio į tunelį srauto draudimą, nes laimi pirmasis atitikimas:

sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o tun0 -s 10.44.0.21 -d 10.44.0.37 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -j DROP

Tie komandų pavyzdžiai iliustratyvūs ir priklauso tam mechanizmui, kuriuo jūsų šeimininkas išsaugo taisykles; vykdymo metu įterpta taisyklė dingsta per kitą paleidimą. Būtent būsenos taisyklė leidžia B atsakymams ir TCP rankos paspaudimui grįžti be antro, veidrodinio priėmimo.

Po to tikrinkite skaitiklius, o ne taisyklių sąrašą, nes taisyklė, kuri niekada nesutampa, atrodo taip pat kaip veikianti. Jei skaitikliai lieka nulyje, paketas neina tuo keliu, kuriuo manote.

Ką B dar turi leisti

B valdo SSH paslaugą, tad B sprendžia, ar kas nors klausosi tunelio adresu ir ar jo paties šeimininko užkarda priima šaltinį. Tinklo leidimas serveryje nėra leidimas jokiai B paskyrai, o šeimininko rakto patikra ir naudotojo autentifikacija galioja kaip ir iš bet kur kitur.

Pirmiausia išbandykite teigiamą atvejį: naują SSH ryšį iš A į B tunelio adresą, priimtą su laukiamu šeimininko raktu. Tada išbandykite kitą lygiavertį klientą ar kitą prievadą ir patvirtinkite, kad jis atmetamas, nes leidimas, kuris tyliai leidžia viską, nesiskiria nuo veikiančio tol, kol tai tampa svarbu. Abi to testo pusės būtinos, o antrąją žmonės praleidžia.

Užsirašykite priskirtus adresus, faktinius maršrutus abiejuose klientuose ir tikslias taisykles serveryje bei B. Sėkmingas ping į tinklų sietuvą ar atviras prievadas serveryje nieko to neįrodo, nes abu gali būti tiesa, kol persiuntimas tarp lygiaverčių klientų vis dar blokuojamas. Užsirašykite tuos skaičius, kol tunelis pakeltas, nes adresas, kurį klientas gauna po pakartotinio prisijungimo, gali būti kitas.

Susiję straipsniai