Бараг бүх жижиг OpenVPN гарц дээр хоёр нэрийн асуудал гардаг. Холбогдсон зөөврийн компьютерт сертификат дээрх нэрээр нь хүрч чадахгүй, туннелийн цаанаах үйлчилгээнүүдэд нэр огт байхгүй. Тэд нэг асуудал мэт харагдах ч эсрэг шийдэл шаарддаг, учир нь нэг хаяг сесс бүрт шилждэг, нөгөө нь шилждэггүй. Ямар нэгэн зүйлийг засахаас өмнө ямар төрлийн нэр нэмж байгаагаа шийд.

Гарцаар биш, нэрээр нь шийд

Шалгалт энгийн: клиент дахин холбогдоход энэ хаяг өөрчлөгдөх үү? Хэрэв тийм бол нэрийг VPN сессээс үүсгэх ёстой. Хэрэв үгүй бол та уншиж, хянаж болох статик бичлэгт хамаарна.

Name kindSource of truthWhere it lives
Connected clientThe address OpenVPN just assignedGenerated hosts file, rewritten per session
Service behind the tunnelA fixed address you choseStatic address= drop-in
Anything with a certificate nameThe certificate, not the poolEither, but the name must match the certificate

Тэднийг холих нь ердийн алдаа. Үүсгэсэн файлд тогтоосон үйлчилгээ скрипт анх удаа дахин бичихэд алга болдог, статик бичлэгт бичсэн клиент тэр хаягыг хамгийн сүүлд эзэмшиж байсан хүнийг заана. Хоёр алдаа нь нэр буруу машинд шийдэгдэх хүртэл үл үзэгдэнэ. Тэр үед засаж байгаа хүн DNS эвдэрсэн гэж боддог, файл биш.

Динамик зам: learn-address ба пул

OpenVPN хуваарилалтыг мэддэг тул түүнд хэлээрэй. Эдгээр серверийн тохиргоо нь хуваарилалтыг тогтвортой, скриптлэх боломжтой болгоно:

client-config-dir /etc/openvpn/ccd
ifconfig-pool-persist /etc/openvpn/ip-pool 60
script-security 2
learn-address /etc/openvpn/learn-address.sh

learn-address хаяг нэмэгдэх, шинэчлэгдэх, устгагдах бүрт таны скриптийг ажиллуулж, үйлдэл, хаяг, нийтлэг нэрийг дамжуулна. Хамгийн бага скрипт клиент бүрт нэг мөр нэмж, устгах үед түүнийг хасна:

#!/bin/sh
HOSTS=/etc/openvpn/hosts.lan
case "$1" in
  add|update) echo "$2 $3" >> "$HOSTS" ;;
  delete)     sed -i "/^$2 /d" "$HOSTS" ;;
esac
kill -HUP $(cat /var/run/dnsmasq.pid)

tun төхөөрөмж дээр хоёр дахь аргумент нь клиентийн туннелийн хаяг тул мөрийг шууд ашиглаж болно. tap төхөөрөмж дээр OpenVPN оронд нь клиентийн MAC хаягийг дамжуулна, учир нь tap сегмент IPv4-ээс бусад протоколыг ч зөөж чадна, тэгвэл ямар нэгэн зүйл бичихээс өмнө хаягийг пул файлаас нийтлэг нэрээр хайх хэрэгтэй.

Үүсгэсэн файл гэж юу болохыг тодорхой ойлго: одоо хэн холбогдсон тухай агшин зураг. Салгах үед нэрс алга болдог, энэ нь сүлжээнүүдийн хооронд шилжих зөөврийн компьютерт яг хүссэн зүйл, шөнөжин ажилладаг серверт яг хүсээгүй зүйл юм.

Статик зам: address= ба домэйны өргөтгөл

dnsmasq-г системийн hosts файлын оронд үүсгэсэн файл руу чиглүүлж, богино нэрс бүрэн чадварлаг нэрс болж өргөжих домэйн өг:

domain=corp.example
no-hosts
addn-hosts=/etc/openvpn/hosts.lan
listen-address=127.0.0.1,10.8.0.1
bind-interfaces

domain тохируулсан үед 10.8.0.6 alice мэт мөр alice болон alice.corp.example-д хоёуланд нь хариулна. listen-address-г зөвхөн туннелийн гарц ба loopback дээр баримтлаарай, учир нь LAN интерфэйс дээр санамсаргүй нийтлэгдсэн шийдэгч нь санал болгохоор төлөвлөөгүй үйлчилгээ юм.

Пулээс хэзээ ч ирдэггүй үйлчилгээнүүд өөрийн бичлэгтэй болно. Тэдгээрийг түгээлтийн тохиргооны хавтас дахь тусдаа drop-in файлд хий, ингэснээр багц шинэчлэлт тэдгээрийг дарж чадахгүй:

address=/files.corp.example/10.8.0.20
address=/db.corp.example/10.9.0.5

Шийдэгчийг дамжуул, эс бөгөөс юу ч болохгүй

Хэн ч асуудаггүй шийдэгч юу ч өөрчлөхгүй. Сервер үүнийг зарлах ёстой:

push "dhcp-option DNS 10.8.0.1"
push "dhcp-option DOMAIN corp.example"

Windows клиентүүд хоёр тохиргоог өөрсдөө хэрэгжүүлдэг. Ихэнх Linux клиент хэрэгжүүлдэггүй: тэдэнд дэмжигдсэн шийдэгчийн интеграц хэрэгтэй, жишээ нь түгээлтийн update-resolv-conf дэгээ эсвэл NetworkManager-ийн DNS боловсруулалт, эсвэл гараар тохируулсан хайлтын домэйн ба нэрийн сервер. push биелэгдсэн гэж таамаглахын оронд клиентийн бодит шийдэгчийг шалга, учир нь үл тоомсорлосон push хариу өгөхгүй сервертэй яг адил харагдана.

Гурван давхаргад шалга

Эхлээд серверээс шууд асуу, дараа нь клиентээс, дараа нь програмаас:

dig +short @10.8.0.1 alice.corp.example
getent hosts files.corp.example

Шууд асуулга хариулж, программ хариулахгүй бол буруу нь бүсэд биш, клиент рүү дамжуулалтад байна. Нэр шийдэгдэж, холболт дахин бүтэлгүйтвэл нэр нь зөв, дараа нь харах зүйл бол маршрут эсвэл галт хана.

Хоёр ангиллыг тохиргооны хажууд бичиж үлдээ: аль нэрс үүсдэг, аль нь тогтоосон, аль нь ямар сертификаттай тохирох ёстой. Дараагийн сервер нэмэх хүн эхлээд олсон загварыг хуулна.

Холбоотой нийтлэлүүд