FreeBind жана After=: systemd сокетин VPN дарегине байлоо
FreeBind systemd'ге VPN дареги пайда боло электе эле угуучуну ээлөөгө мүмкүндүк берет; After= болжолу иштерди иреттейт. Экөөнү салыштырып, андан соң тартип менен даярдыкты текшериңиз.
Жүктөө учурунда белгиленген VPN дарегине байланган сокет бирдиги туннель аны дайындабай туруп ишке ашпай калышы мүмкүн, жана анын артындагы кызмат эч качан башталбайт. Эки которгуч түзөтүүгө окшош жана ошол көйгөйдүн ар башка жарымын чечет. FreeBind systemd'ге дарек жок кезде эле угуучуну түзүүгө мүмкүндүк берет. After= болжолу иштерди иреттейт, ошондуктан нерселердин качан башталарын өзгөртөт, бирок даректи эртерек жеткирбейт.
Эки башка көйгөй, эки башка которгуч
Биринчи көйгөй — байлоо ишке ашпай калышы: өзөк хост ээлик кылбаган даректе угуудан баш тартат, ошондуктан сокет бирдиги дароо ишке ашпайт жана кызмат эч качан активдештирилбейт. Экинчи көйгөй — даярдык ишке ашпай калышы: дарек акырында бар, бирок бир нерсе аны туннель трафикти ташыганга чейин колдонууга аракет кылат. FreeBind биринчисин чечет жана экинчиси үчүн эч нерсе кылбайт. Тартип көрсөтмөлөрү экөөнү тең түздөн-түз чечпейт, анткени алар эмнени эмне тартипте башталарын гана аныктайт. Сизде чынында бар катаны атоо — бүт чечим.
Кайсысы бар экенин кызматтын сүрөттөмөсүнөн эмес, журналдан ырастаңыз. Байлоо катасы даректи атайт жана аны дайындоо мүмкүн эместигин билдирет. Даярдык катасы адатта кийинчерээк көрүнөт, убакыт бүтүү же каршы тараптан көрүнгөн четке кагылган байланыш катары, ал эми журналдарда толугу менен соо сокет бирдиги болот.
FreeBind: угуучу даректен мурун бар
FreeBind өзөккө жергиликтүү эмес дарекке байлоого уруксат берүүнү айтат, ошондуктан systemd жүктөө учурунда угуучу сокетти түзүп, колдонмо башталган сайын аны колдонмого бере алат. Бул сокеттик активдештирүүнүн маңызы жана сокеттин өзүнүн артындагы кызматтан узак жашашынын себеби.
[Socket]
ListenStream=
ListenStream=10.8.0.1:8443
FreeBind=yes
Бош дайындоо жаңы жазуу кошулганга чейин жеткирүүчү бирдиктен мураска калган угуу жазууларын тазалайт, бул ар бир интерфейсте жооп берген калган wildcard угуучуну болтурбайт. Дарек менен портту өзүңүздүкүнө алмаштырыңыз жана болжолу drop-in файлын эмес, натыйжалуу бирдикти текшериңиз. Пакет файлын ордунда оңдоонун ордуна бирдиктин аты астында drop-in колдонуңуз, анткени кийинки пакет жаңыртуу оңдоону үстүнөн жазып, ниеттен эч кандай из калтырбайт. Андан соң аны сокет бирдиги күткөн кайра жүктөө жана кайра баштоо жол-жобосу менен колдонуңуз.
systemd сокетинин маалымдамасы бул опциянын артындагы IPv4 жана IPv6 жүрүм-турумун документтештирет, жана маанилүү деталь — ал байлоого тиешелүү, маршруттоого эмес. Анда эч нерсе дарек дайындабайт жана VPN баштабайт. FreeBind угуучуга берилген уруксат, интерфейстин ордун басуучу эмес.
After= жана Wants=: тартип даярдык эмес
Тартип менен талап өзүнчө октор, аларды аралаштыруу туура тартипте башталып, баары бир ишке ашпаган бирдиктерди жаратат. After=vpn-client.service эки иш тең башталса, бул экинчисинин башталышын күтөөрүн гана билдирет. Ал VPN'ди тартпайт жана VPN байланышты бүтүрүүсүн күтпөйт.
Wants= жана Requires= сыяктуу талап көрсөтмөлөрү активдештирүүнү иштетет жана көз карандылык ишке ашпаганда эмне болорунда айырмаланат: бири улантат, экинчиси токтойт. Экөө тең байланган туннелдин эмнени билдирерин билишпейт. VPN процесси дарек дайындалбай эле активдүү болушу мүмкүн, же дарек дайындалып, шеригине маршрут жок болушу мүмкүн, эки абал тең көз карандылыкты канааттандырат. Эгер колдонмого даректин бар болушу керек болсо, процесстин башталышын даярдыктын далили деп эсептөөнүн ордуна ошол шартты ачык моделдештириңиз.
systemctl cat жана systemctl show -p After -p Wants -p Requires аркылуу бирдиктин чынында эмнени жарыялаганын текшериңиз. Үч башка каталогдогу drop-in сиз эч качан жазбаган көрсөтмөлөрдү кошуусу мүмкүн, ал эми systemd натыйжалуу бирдикти гана окуйт.
network-online.target эмнени кылбайт
network-online.target кийин иреттелген бирдик тармак менеджери тармакты колдонууга жарактуу деп жарыялаганын күтөт, бул жүктөө учурундагы синхрондоо чекити, тынымсыз шарт эмес. Ал белгилүү туннелдин көтөрүлгөнү тууралуу эч нерсе айтпайт жана VPN түштөн кийин кайра туташканда кайра иштебейт. Аны кайра туташуу монитору деп кароо — ошол максаттын эң кеңири тараган туура эмес окулушу.
systemd долбоору бул айырманы түздөн-түз документтештирет, ал эми практикалык натыйжа — туннел дареги керек болгон нерсенин баары көз карандылыкты өзү ээлөөгө тийиш. network-online'ды күтүп, анан туннел дарегин байлаган бирдик туннель кокустан биринчи көтөрүлгөндө гана туура, ал эми бул кокустук, долбоор эмес.
Чынында тандаган турмуш циклин текшериңиз
Таза жүктөөнү, дарек пайда болгондон кийинки сурамды жана VPN кулап, кайра келгенден кийинки жүрүм-турумду текшериңиз. Бул үч учур иштеген угуучуну иштеген кызматтан ажыратат.
systemd-analyze verify myapp.socket
systemctl cat myapp.socket
ss -ltn "sport = :8443"
Биринчи буйрук кайра жүктөө алдында бирдик файлынын каталарын кармайт, экинчиси бириктирилген бирдикти көрсөтөт, үчүнчүсү угуучунун бар-жогун жана кайсы даректе экенин далилдейт. Туннел дарегин күткөн жерде wildcard дарегиндеги угуучу — бош ListenStream жок кылышы керек болгон ошол эле калдык. Дарек жылган-жылбаганын көрүү үчүн VPN кайра туташкандан кийин үчүнчү буйрукту кайталаңыз.
Турмуш цилин атайылап тандаңыз: туруктуу даректин кайтышын күткөн эркин байланган угуучу, же туннель менен токтоп, калыбына келүүдө кайра башталган кызмат. Булар башка долбоорлор жана башкача ишке ашпайт. Андан соң кирүү саясатын көздөгөн булактарга жана жолдорго байланыштырып кармаңыз, анткени дайындалган даректи байлоо кабыл алынган пакеттердин ишенимдүү интерфейстен келгенин талап кылбайт.