Бир Pi, эки OpenVPN инстанциясы: ар бир юнит эмнени окуйт
Бир Piдеги эки OpenVPN демону ар башка конфигурация файлдарын окуп, ар башка илгичтер аркылуу чыгат. Ар бир инстанцияны картага түшүрүп, анан пайдалуу жүктүн жолун өзүнчө текшериңиз.
Профилге кол тийгизүүдөн мурун OpenVPN процесстерин санаңыз. Роуминг колдонуучуларын кабыл алып, ошол эле учурда upstream кызматына туташкан Pi эки демонду иштетет, жана алардын ар бири сиз терген инстанция аты менен тандалган конфигурация файлын окуйт. Пакеттин шаблондору андан кийин ар бир демонго өзүнүн жумуш каталогун, өзүнүн runtime статус файлын жана өзүнүн туннель түзмөгүн берет. Бул бөлүштүрүүнү туура эмес жасасаңыз, иштеп жаткан процесс эч качан ачпаган файлдагы туура жөндөөнү өзгөртүүгө бир кечти сарптайсыз.
Ар бир инстанция аты өз файлын тандайт
OpenVPN 2.6 менен келген unit файлдарында иштетүү аргументтеринде @ белгисинен кийинки текст менен толтурулуучу инстанция орду бар. Сервер шаблону сервер конфигурация каталогунан иштеп, өз аргументин ошол жердеги %i.conf боюнча чечет, ал эми клиент шаблону дал ушундай клиент каталогунан жасайт. Ошондуктан [email protected] сервер каталогундагы admits.conf файлын окуйт, [email protected] клиент каталогундагы uplink.conf файлын окуйт, жана эки аттын экөө тең башка каталогдо эч кандай мааниге ээ эмес.
Пакет upstream демейкилерин сактады деп ойлобой, дал келүүнү машинада текшериңиз. Дистрибутивдин drop-in кошумчасы жумуш каталогун же конфигурация аргументин толугу менен алмаштыра алат.
systemctl cat [email protected]
systemctl cat [email protected]Ошол чыгарылыштагы WorkingDirectory сабын жана конфигурация аргументин окуңуз, анткени кайсы файл жүктөлөрүн активдештирилген unit гана чечет. ExecStart ичине --config кошкон drop-in шаблон жолу туура көрүнсө да шаблондон басымдуу. Жергиликтүү кайра аныктоо барбы-жокпу билүү үчүн фрагмент менен drop-in жолдорун сураңыз. Эгер эки ролу тең бир файлга чечилсе, сизде бир процесс сервер да, клиент да болууга аракет кылат, жана ошол файлдагы кийинки опция үнсүз басымдуу болот.
Жергиликтүү транспорт жана кайра жиберилген жүк башка илгичтерге тиет
Сервердин ар бир роуминг колдонуучуга болгон шифрленген байланышы Piнин өзүндө жаралат, ошондуктан анын тышкы жооптору жергиликтүү output илгичи аркылуу чыгат. Клиенттин upstream өнөктөшүнө болгон байланышы да жергиликтүү жаралган output, ал алыскы тармакка жетсе да. Кайра жиберилүүчү пайдалуу жүк үчүнчү категория, жана ядро аны пакет үчүн чыгуучу түзмөктү тандап бүткөндөн кийин гана салыштырат.
| Flow | Hook that sees it | What to inspect |
|---|---|---|
| Roaming user handshakes to the server | Local input and local output | Listener socket, bind address, rule admitting the UDP port |
| User payload leaving through the upstream tunnel | Forward | IPv4 forwarding switch, selected route, permission rule, any translation |
| Pi's own connection to the upstream peer | Local output | Underlay route to the provider endpoint, not the tunnel route |
forward тизмегиндеги чыгуучу интерфейске дал келген эреже маршруттоо мурун эле ошол интерфейске дайындаган пакетти уруксат кыла алат же таштай алат, бирок ал интерфейсти эч качан тандабайт. Бир хост бир туннелди бүтүрүп, экинчисин баштаганда, колдонуучу жүгүн upstream туннелине жиберүүчү саясат менен Piнин өз шифрленген жоопторун коргоочу саясат эки өзүнчө чечим. Алар кокустан бир физикалык NICке түшөт, ошондуктан алардын башы айкашат.
Бул айырмачылык кеңири тараган жарым-жартылай ийгиликсиздикти түшүндүрөт. Колдонуучулар туташат, handshake бүтөт, бирок трафиги дагы эле туура эмес жакка чыгат, анткени handshake жергиликтүү, пайдалуу жүк forward болгон жана экөөнүн бирөө гана текшерилген.
Импорттолгон маршрут колдонуучуларыңызга жоопторду жутуп алышы мүмкүн
Клиент профилинин коопсуздук жөндөөсү upstream Piнин маршруттоо таблицасына эмнени push кыла аларын чечет, ал эми кең redirect — иштеп турган кош ролдуу хостту бузулганга айландыруучу опция. Эгер push кылынган маршрут роуминг колдонуучуларынын коомдук даректерин камтыса, сервер аларга карай жараткан жооптор underlay аркылуу чыгуунун ордуна жаңы маршрут боюнча upstream туннелине кириши мүмкүн. Адамдар провайдерге туннель дагы эле иштейт деп текшерип, ошол жерде токтошот, анткени бул трафик туннелдин өзүнүн транспорту жана калгандын баары туура эмес иштеп жатканда да агып турат.
Булак же mark негизиндеги саясат — эки агымды бөлүк тутуунун жолу. OpenVPNнин Linux mark опциясы демондун өз шифрленген пакеттерине firewall mark басат, анан маршруттоо эрежеси аны атайын таблицага жибере алат. Булак даректери да так ушундай жакшы иштейт, эгер сервердин тышкы жооптору дайыма бир underlay дарегинен чыкса. Эки ыкмага тең тандалган таблицада жарактуу маршруттар жана провайдердин endpoint үчүн өзгөчөлүк керек, болбосо туннелдин өзү көтөрүлбөйт.
Кандайдыр бир эреже жазбастан мурун, жооп чындыгында кайсы жол менен жүрөрүн ядродон сураңыз. Төмөнкү даректер — Piнин underlay дареги менен бир роуминг колдонуучусунун коомдук дареги үчүн орундар.
ip rule show
ip route get 198.51.100.7 from 192.0.2.10Бөлүштүрүүнү текшериңиз, анан ролдорду бир-бирден токтотуңуз
Үч агымды өзүнчө текшериңиз, анткени ийгиликтүү handshake калган экөө жөнүндө эч нерсе далилдебейт. Жаңы кирүүчү байланышты кабыл алыңыз, уруксат берилген бир колдонмону upstream чыгуучусу аркылуу жибериңиз жана эки процесс те өз өнөктөштөрүнө дагы эле жетерин текшериңиз.
Анан клиент ролун токтотуп, сервер ролу эмнени сактап каларын көзөмөлдөңүз. Бул бир инстанцияга арналган, бирок экөөнө тең колдонулган маршрут же mark эрежесин табуунун эң арзан жолу.
systemctl stop [email protected]
systemctl status [email protected] --no-pager
ss -lunp | grep openvpn
journalctl -u [email protected] -n 20 --no-pagerКөргүңүз келгени — клиент ролу өчүп турганда listener дагы эле байланган, туннель түзмөгү дагы эле бар жана журналда жаңы каталар жок. Эгер клиентти токтотуу сервердин учурдагы колдонуучуларга жоопторун да үзсө, эки ролу бирөөнө гана чектелиши керек болгон нерсени бөлүшүп турат. Ар бир өзгөрүү кайсы инстанцияга, кайсы конфигурация файлына жана кайсы агым ээсине тийгенин жазып коюңуз, болбосо бул хостту кийинки жөндөөчү адам ошол эле ачылышты нөлдөн кайталайт.