client-connect скриптиден даректи кайтаруу кардардын IP дарегин орното тургандай көрүнөт. Бирок андай эмес: илгичтин серверге бара турган жалгыз каналы — убактылуу файл, анын жолу скрипттин акыркы аргументи катары келет, жана дарек ошол жерде ifconfig-push синтаксисинде жазылышы керек. Даректи басып чыгарган же эч нерсе жазбастан нөл менен чыккан скрипт пулдан алынган дареги бар туташкан кардарды жаратат, ал эми сервер журналы таптакыр соо көрүнөт.

Түшүнбөстүк түшүнүктүү, анткени бир нече башка илгичтер чыгуу коддору же чөйрө өзгөрмөлөрү аркылуу чындыгында эле жооп берет. Бул илгичтин өз келишими бар, жана келишим файл атынан башталат.

Илгич файл жазат, кайтаруу маанисин эмес

Декларация эки сап: чакырууга уруксат берүү үчүн script-security 2, андан кийин client-connect /etc/openvpn/server/assign-address.sh. Кардар аутентификациядан өткөндө, сервер бул скрипти жаралган файл жолун акыркы аргумент катары кошуп иштетет, ал жол $1 болот, эгер декларация өзүнүн кошумча аргументтерин бербесе гана. Ошол кардарга колдонулгандын баары ошол файлга кадимки директивалар катары, ар бир сапка бирден, конфигурацияда көрүнгөндөй так жазылат. Өз параметрлерин кошкон каптама орунду жылдырат, ал эми классикалык белги — --verbose сыяктуу жолго жазган скрипт.

Чыгуу абалы келишимдин экинчи жарымы. Нөл — кабыл ал жана файлды оку дегенди билдирет; калган нерселердин баары туташууну четке кагат, жана картага түшүрүлбөгөн инсандык пулга үнсүз кайтуунун ордуна ушундай четке кагылат. Ийгиликти кайтармайынча толук директиваны жазыңыз, жарым жазылган файл эч качан кардардын конфигурациясына айланбасын.

Эки директива көңүл бурууга татыктуу, анткени алар калгандардын баары менен өз ара аракеттенишет. ifconfig-push даректи бекитет, ал эми жиберилген route кардарга туннел аркылуу эмнеге жетүүгө болорун айтат; биринчисин кайтарып, экинчисин унутуп калсаңыз, дареги бар, бирок барар жери жок кардар аласыз. Файл ичиндеги тартип маанилүү эмес, бирок толуктук маанилүү. Эч бир теңдеш жете албаган префикс үчүн маршрут жиберген илгич — экинчи жагынан көрүнгөн ошол эле ката.

Кирүүлөр чөйрө өзгөрмөлөрү аркылуу келет: common_name, trusted_ip, ifconfig_pool_remote_ip жана калгандары. Алардын баарын серверден тышкаркы саптар катары караңыз, эч качан shell бөлүктөрү катары эмес.

Даректерди картага түшүрүү — саясат, арифметика эмес

Кызыктырган кыска жол — сертификаттын атын талдап, анын сандарын акыркы октет катары пайдалануу. Бул бөлүштүргүч эмес, жана ал кадимки жолдор менен ишке ашпайт: бирдей уландысы бар эки ат кагылышат, 300 менен бүткөн ат дарек эмес, ал эми администратор атын өзгөрткөн сертификат түзмөктү үнсүз жылдырат. Ар бир чакырууда ички тармакка таандыктыгын, колдонууга боло турган хост диапазонун, резервделген даректерди жана уникалдуулукту текшериңиз, ал эми картага түшүрүүнү адам окуй алган таблицада сактаңыз.

Атты ким көзөмөлдөсө, даректи да ошол көзөмөлдөйт, ошондуктан бул жайгаштырууда common_name чындыгында эмнени билдирерин чечиңиз. username-as-common-name күйгүзүлгөндө инсандык — кирүү аты, сертификаттын субъектиси эмес. Бул маанини эч качан shell баалоосуна бербеңиз жана кардардын файл жолуна таасир этишине эч качан жол бербеңиз.

Реестрге негизделген бөлүштүргүч параллелдүүлүккө туруштук бериши керек. Даректи атомдук түрдө резервдеңиз, ийгиликсиз жазууну жарым конфигурацияланган кардарды кабыл албастан иштетиңиз жана ар бир бөлүштүрүүнү ага ээ болгон туташуу менен белгилеңиз, ошондо эски сессиянын кеч ажырашы жакыныраак сессия кармап турган даректи бошото албайт. Бир пулду бөлүшкөн бир нече сервер нускасы бул талапты тандоо эмес, курч кылат.

Топология ifconfig-push эмнени билдирерин аныктайт

10.77.0.0/24 тармагында topology subnet менен ifconfig-push 10.77.0.20 255.255.255.0 — бул дарек жана анын тармактык маскасы. topology net30 астында экинчи аргумент такыр маска эмес, теңдештин дареги, ошондуктан ички тармактын формасын net30 серверине көчүрүү сизге туташкан, бирок трафикти өткөрө албаган кардар берет. Топологияны атайын өзгөртүңүз, мисал ырааттуу көрүнүшү үчүн эч качан өзгөртпөңүз. Учурда net30 менен иштеп жаткан сервердин эски даректөөдө тирүү кардарлары бар, ошондуктан которуу — бир сапты оңдоо эмес, тейлөө терезеси бар миграция.

Статикалык даректер динамикалык пулдан тыш жана башка ар бир статикалык дайындоодон тыш болушу керек, анын ичинде кадимки client-config-dir файлдары бергендер. Эгер эки механизм ар кандай кардарларга бирдей дарек чыгара алса, алардын бири акыры ошентет.

Ага ишенүүдөн мурун төрт учурду сынаңыз

Ошол эле текшерүүлөрдү картага түшүрүлгөн инсандыкка, түшүрүлбөгөнгө, кайра туташууга жана моделденген реестр бузулушуна каршы иштетиңиз. openvpn --config client.ovpn --verb 4 берилген даректи push жообунда көрсөтөт, ал эми серверде grep -A2 PUSH_REPLY /var/log/openvpn/openvpn.log чындыгында эмне жиберилгенин ырастайт. Картага түшүрүлбөгөн инсандык үчүн күтүлгөн жыйынтык — пул дареги эмес, четке кагылган туташуу.

Андан кийин демон ошол убактылуу файлдарды жазган каталогду текшериңиз. Скрипт төмөндөтүлгөн кызмат контекстинде иштейт, ошондуктан root жаза алган, бирок демон жаза албаган жол ар бир туташууну журналда бир нече сап төмөндө көмүлгөн уруксат катасы менен четке кагууга айлантат.

Бөлүштүрүү — авторизация эмес: бекитилген дарек дагы эле сервердин артындагы ар бир максатка жетүүнү бербейт. Маршруттоо жана брандмауэр саясатын өз катмарында сактаңыз жана аны жаңы бекиткен дарекке каршы текшериңиз.

Тектеш макалалар