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 бичиж чаддаг ч демон бичиж чадахгүй зам нь холболт бүрийг логт хэд хэдэн мөр доогуур булагдсан зөвшөөрлийн алдаатай татгалзал болгоно.
Хуваарилалт нь зөвшөөрөл биш: тогтоосон хаяг нь серверийн ард байгаа бүх очих газарт нэвтрэх эрх өгөхгүй. Маршрутлалт болон галт ханын бодлогыг өөрийн давхаргад байлгаж, дөнгөж тогтоосон хаягтай харьцуулан шалгаарай.