OpenVPN client-connect ілгегі: мекенжайыңыз шын мәнінде қайда барады
client-connect скрипті мекенжайды басып шығару арқылы қайтара алмайды. Ілгектің уақытша файлы, шығу мәртебесі және топология клиенттің IP мекенжайын қалай анықтайтынын қараңыз.
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 жаза алатын, бірақ демон жаза алмайтын жол әрбір қосылымды журналда бірнеше жол төменде көмілген рұқсат қатесімен қабылдамауға айналдырады.
Бөлу — авторизация емес: бекітілген мекенжай әлі де сервердің артындағы әрбір мақсатқа қол жеткізуді бермейді. Маршруттау және брандмауэр саясатын өз қабатында ұстаңыз және оны жаңа бекіткен мекенжайға қарсы тексеріңіз.