Бир OpenVPN кардарына SSH аркылуу экинчисине бассейнди ачпастан жетүүгө уруксат бериңиз
client-to-client өчүк турсун, ядро бир агымды өткөрсүн, ал эми бассейндин калган бөлүгү жабык калсын. Серверде эки эреже жана максатта бир эреже.
Бир кардар экинчи кардардын SSH кызматына жетиши керек, ал эми бассейндин калган бөлүгү бүгүнкүдөй обочолонгон бойдон калышы керек. Кызыктырган которгуч client-to-client, ал теңдештердин ортосундагы кирүүнү баарына бир убакта ачат жана чечимди ядронун ордуна OpenVPN-га берет. Тар жооп бул которгучту өчүк кармайт жана сервердин өзүнүн маршруттоосу менен коргоо дубалына так бир агымды көтөрүүгө жол берет.
Механизм эреженин текстинен маанилүү, анткени эки ыкма пакетти ар башка жерлерге коёт. Кайсынысын тандаганыңызды билүү эч нерсе кылбагандай көрүнгөн эрежени да, ансыз туташкан теңдешти да түшүндүрөт.
client-to-client пакетти кайда жылдырат
client-to-client күйгүзүлгөндө сервер теңдештин пакетин туннель түзмөгүнөн кайра чыгарбастан ичинен өткөрөт, ошондуктан пакет эч качан ядронун өткөрүү жолуна жетпейт. Бул ыңгайлуу жана коргоо дубалыңыз көзөмөлдөшү керек болгон агымды эч качан көрбөйт дегенди билдирет. Параметрди өчүк калтырыңыз, сервер пакетти ошол эле интерфейстен кайра сыртка багыттайт, бул аны netfilterдин алдына коёт. Ошол эле интерфейс кирет, ошол эле чыгат, жана FORWARD тизмегинин сөзү бар.
Алмашуу ачык: бир саясат чекитин аласыз жана кыска жол сиз үчүн жасаган маршруттоо менен өткөрүүнү өз мойнуңузга аласыз. Бул иш бир агым үчүн кичине жана кошкон ар бир өзгөчөлүк менен өсөт. Өзгөчөлүктөрдү азыр санаңыз, анткени теңдештердин ортосундагы саясат чындыгында эрежелер жыйындысында жашайт.
Теңдештин пакети чындыгында баскан жол
Linux Community OpenVPN 2.6 кызматын, DCOнун ордуна колдонуучу мейкиндигинде TUN иштетүүнү, subnet топологиясын, tun0 жана кардар A 10.44.0.21-дө, кардар B 10.44.0.37-дө болгон 10.44.0.0/24 бассейнин болжолдонуз. Subnet топологиясында A алган дарек жана маска бассейнди мурунтан эле камтыйт, ошондуктан A пакетти кошумча түртүлгөн маршрутсуз туннель түзмөгүнө жөнөтөт. Aдагы реалдуу маршрутту болжолдобой текшериңиз.
Серверде пакет B дарегине келет, бул жергиликтүү дарек эмес, ошондуктан өткөрүлөт. Бул такыр болушу үчүн IPv4 өткөрүү күйгүзүлүшү керек жана маршрут издөө пакетти кайра tun0 аркылуу сыртка жөнөтүшү тийиш. Ошондуктан коргоо дубалы эки тарапта тең бирдей интерфейстүү өткөрүлгөн агымды көрөт, жана бул көпчүлүк эрежелер жыйындысы өткөрүп жиберген деталь. Бул жерде булакты которуу талап кылынбайт, жана A дарегин бузулбаган бойдон сактоо Bге өзүнүн булакка негизделген эрежесин колдонууга мүмкүндүк берет.
Серверде эки эреже, ушул тартипте
Үч эреже бүт уруксатты көтөрөт: өткөрүү, жуп өзгөчөлүгү жана туннель жубу үчүн демейки таштоо. Кабыл алуу эрежеси жупту жана кызматты атайт, ошондуктан уруксат өсүп жаткан бассейнде да сакталат. Аны туннель-туннель трафиги үчүн ар кандай жалпы тыюудан мурун коюңуз, анткени биринчи дал келүү жеңет:
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Бул буйруктар үлгү болуп саналат жана хостүңүз эрежелерди сактоо үчүн колдонгон механизмге таандык; иштөө убагында киргизилген кошумча кийинки жүктөөдө жоголот. Абалдуу эреже Bнин жооптору менен TCP кол алышуусунун экинчи, күзгү кабыл алуусуз кайтышына мүмкүндүк берет.
Кийин эрежелер тизмесин эмес, эсептегичтерди текшериңиз, анткени эч качан дал келбеген эреже иштегенден айырмаланбайт. Эсептегичтер нөлдө калса, пакет сиз ойлогон жол менен жүрбөйт.
B дагы эмнеге уруксат бериши керек
SSH кызматын B жүргүзөт, ошондуктан туннель дарегинде бир нерсе угуп жатабы жана өз хостүнүн коргоо дубалы булакты кабыл алабы, муну B чечет. Сервердеги тармактык уруксат Bдеги эч бир эсеп үчүн уруксат эмес, ал эми хост ачкычын текшерүү жана колдонуучуну аутентификациялоо кайсы гана жерден болбосун окшойт.
Алгач оң учурду сынаңыз: Aдан Bнин туннель дарегине жаңы SSH туташуу, күтүлгөн хост ачкычы менен кабыл алынсын. Анан башка теңдешти же башка портту сынаңыз жана четке кагылганын ырастаңыз, анткени үнсүз баарына уруксат берген уруксат маанилүү болмоюнча иштегенден айырмаланбайт. Бул сыноонун эки жарымы тең керек, ал эми экинчиси — адамдар таштап кеткен жарымы.
Бөлүнгөн даректерди, эки кардардагы реалдуу маршруттарды жана сервердеги жана Bдеги так эрежелерди жазып алыңыз. Шлюзга ийгиликтүү ping же серверде ачык порт булардын эч бирин далилдебейт, анткени теңдештердин ортосундагы өткөрүү дагы эле бөгөттөлгөн кезде экөө тең туура болушу мүмкүн. Бул сандарды туннель көтөрүлгөн кезде жазыңыз, анткени кардар кайра туташкандан кийин алган дарек башка болушу мүмкүн.