resolv.conf-г засварлах нь VPN салсны дараа DNS-г засахгүй
Жагсаалтын дээд талд байх үхсэн туннелийн шийдэгч нь хайлт бүрт нэг тайм-аут үнэтэй. Файл хэнийх болохыг шалгаж, холбоосын төлөвийг сэргээж, үүсгэсэн гаралтыг засварлахаа болино.
Та VPN-г салгахад ping 1.1.1.1 хариу үйлдэл хийдэг хэвээр, хуудас эцэст нь бууж өгөх хүртэл нэр хайлт бүр өлгөгдөнө. Дараа нь cat /etc/resolv.conf зөвхөн туннелийн дотор байсан нэрийн серверийг харуулна, ихэвчлэн жагсаалтын эхэнд. Тэр мөрийг устгах нь арав орчим минутын турш зассан мэт харагдана, дараа нь унтах, Wi-Fi роуминг эсвэл дахин эхлүүлэх үйлдэл түүнийг буцааж авчирна. Таны засварласан файл нь тохиргоо биш; энэ нь өөр бүрэлдэхүүн эзэмшдэг холбоосын төлөвийн дүрслэл юм.
Нэг хуучин бичлэг хайлт бүрт яагаад секунд үнэтэй вэ
glibc шийдэгч нэрийн серверүүдийн жагсаалтыг дараалан туулж, дараагийнхыг туршихын өмнө тайм-аут дуусахыг хүлээнэ, харин resolv.conf(5) энэ жагсаалтыг гурван бичлэгээр хязгаарладаг. Туннель алга болсны дараа 10.8.0.1 зэрэг туннелийн талын шийдэгчийг жагсаалтын эхэнд тавь, тэгвэл хайлт бүр хариу үйлдэл хийдэг сервер рүү шилжихийн өмнө тайм-аутыг төлнө. Шинж тэмдэг нь DNS алдаа биш, үхсэн холболт мэт харагддаг шалтгаан энэ юм: хөтчүүд блоклогдож, хугацаа нь дуусч, заримдаа дараа нь хуучирдаг кэшлэсэн хаягийг өгдөг.
«Интернэт эвдэрсэн» гэсэн гомдол яагаад ирдэгийг ч энэ тайлбарлана. IP хаяг руу ping холбоос хэвийн гэдгийг баталж, алдааг програмынх мэт харагдуулна. Шийдэгчүүдийн жагсаалт нь хамгийн түрүүнд уншиж, хамгийн сүүлд засварлах зүйл юм.
Домог: resolv.conf бол тохиргооны файл
Өөрчлөхийн өмнө энэ зам үнэндээ юу вэ гэдгийг асуу:
ls -l /etc/resolv.conf
readlink -f /etc/resolv.conf
systemd-resolved хост дээр энэ нь 127.0.0.53 руу заасан stub файл руу хөтлөх симбол холбоос бөгөөд бодит серверүүд resolvectl хэвлэдэг холбоос тус бүрийн төлөвт амьдардаг. NetworkManager хост дээр энэ нь NetworkManager идэвхтэй холболтоос бичдэг файл байж болно. Зарим нийлүүлэгчийн клиентэд энэ нь холбогдох үед байр дээрээ дахин бичигддэг, азгүй бол салгах үед хэзээ ч сэргээгддэггүй энгийн файл юм. Эдгээр нь гурван өөр эзэмшигч бөгөөд эхний хоёрыг гараар засварлах нь юу ч хийхгүй эсвэл дараагийн сүлжээний үйл явдал хүртэл тэснэ.
resolvectl status бол үнэнийг хэлдэг харагдац: холбоос тус бүрийн DNS сервер, чиглүүлэлтийн домэйн, туннелийн холбоос байгаа эсэх. resolvectl query example.com цааш явж, аль интерфейс хариулсныг харуулна. Файлд хүрэхийн өмнө хоёуланг нь ашигла, мөн өөрийн аюулгүй DNS-тэй хөтөч энэ бүгдийг үл тоомсорлодгийг сана.
Ямар нэгэн зүйлийг засварлахаас өмнө эзэмшигчийг ол
Ихэвчлэн гурван бүрэлдэхүүн нэг тохиргооны төлөө өрсөлддөг: systemd-resolved, NetworkManager болон VPN клиентийн суулгасан зүйл. Эхлээд амьд байгааг тодорхойл:
systemctl is-active systemd-resolved
nmcli connection show --active
ps aux | grep -E "openvpn|wg-quick|vpn"
Хэрэв resolved идэвхтэй бөгөөд симбол холбоос түүний stub руу зааж байвал глобал файл нь үүсгэсэн гаралт бөгөөд таны засвар гоёл чимэглэлийнх юм. Хэрэв холболтыг NetworkManager эзэмшиж байвал серверүүд холболтын профайлд хамаарах тул засвар нь файл засварлах биш, nmcli шинж чанар өөрчлөх явдал. Хэрэв нийлүүлэгчийн демон ажиллаж байвал дараагийн холболтыг зөвхөн түүний өөрийн сэргээх зам давах болно.
Клиентийн үлдээсэн холбоосын төлөвийг цэвэрлэ
Алагдсан клиент өөрийн цэвэрлэгээний дэгээг ажиллуулж чадахгүй. SIGKILL-ийг огт барьж чадахгүй, харин SIGINT ба SIGTERM-ийг барьж болно, тиймээс албадан алахын дараа «зүгээр л зогссон» туннель ихэвчлэн интерфейсийн бүртгэл ба шийдэгчийн бичлэг хоёуланг нь байранд нь үлдээдэг. Тодорхой PID-ийг олоод дохиог зөвхөн түүнд явуул:
ps aux | grep -E "openvpn|wg-quick"
sudo kill <pid>
resolvectl revert tun0
Бүрэн тохирлын жагсаалтыг уншихаас өмнө pkill -f vpn эсвэл killall vpn руу гараа сунгах хэрэггүй. -f бүх командын мөрөнд тохирдог тул боодол скрипт, редакторын сесс эсвэл замд нь тэр мөр агуулагдсан хамааралгүй процессыг дуусгаж болно. Ажлын дунд буруу процессыг дуусгах нь шийдэгчийн асуудал алдагдсан файл болох зам юм.
resolvectl revert нь тэр холбоосын ажиллах үеийн DNS тохиргоог сэргээдэг бөгөөд энэ нь шийдэгчийг дахин эхлүүлэхээс нарийн, глобал файлыг засварлахаас хамаагүй нарийн юм. Хэрэв туннелийн холбоос бүрмөсөн алга болсон бол systemctl restart NetworkManager холболтын төлөвийг дахин бүтээдэг бөгөөд эх сурвалжийн урсгалууд байнга эргэж ирдэг алхам энэ юм. Restart=always бүхий үйлчилгээний менежерт анхаар, учир нь тэр алагдсан клиент болон түүний DNS тохиргоог шууд буцааж тавьж болно.
Нөгөө чиглэл: түлхэгдсэн ч хүрээгүй DNS
Хуучин бичлэгийн толин тусгал нь ямар ч ашигтай шийдэгчгүй туннель юм. Профайл дахь DNS сонголт бол хүсэлт; холболтыг удирддаг бүрэлдэхүүн үүнийг шийдэгчид дамжуулах ёстой. Хэрэв лог серверийг хүлээн авсан ч туннелийн холбоос ямар ч DNS тохиргоо агуулаагүй бол дутагдаж байгаа нь интеграц, сервер биш.
Дамжуулалтыг гараар хийж шалга, энэ нь «сервер буруу» ба «хэн ч хэрэглээгүй» хоёрыг ялгана:
resolvectl dns tun0 10.10.10.10
resolvectl domain tun0 ~.
Бүгдийг барьдаг чиглүүлэлтийн домэйн нэр бүрийг тэр холбоос руу илгээдэг бөгөөд бүрэн туннелийн клиент үүнийг хүсдэг, хуваасан DNS үүнийг хэрэглэх ёсгүй. Эдгээр тохиргоо дараагийн холболтод алга болно. NetworkManager дээр тэдгээрийг байнгын болгохын тулд автомат DNS-ийг унтрааж, серверийг холболт дээр тохируулж, домэйныг нэм:
nmcli connection modify office ipv4.ignore-auto-dns yes
nmcli connection modify office ipv4.dns 10.10.10.10
nmcli connection modify office ipv4.dns-search "~."
Зөвхөн дотоод нэрсэд хариулах ёстой компанийн туннелийн хувьд тэдгээр бүсийг бүгдийг барьдагын оронд эхэнд тильд тэмдэгтэй жагсаа, ингэснээр нийтийн нэрс орон нутгийн шийдэгчийг үргэлжлүүлэн ашиглана.
Дараагийн саатал болох түр шийдлүүд
Холбогдохын өмнө resolv.conf-г хуулж, дараа нь сэргээх нь runbook-д хууль ёсны мөр бөгөөд энэ нь засвар биш түр шийдэл юм. Энэ нь яг чухал үед бүтэлгүйтдэг, учир нь эвдрэл эсвэл албадан дахин ачаалалт сэргээлтийг алгасдаг. Дараагийн хүн үүн дээр тулгуурлахгүйн тулд түр шийдэл гэж бичиж үлдээ.
systemd-resolved-ийг унтрааж, нийтийн серверүүдийг хатуу кодлох нь өөр нэг алдартай алхам. Энэ нь холбогдох, салгахыг урьдчилан таамаглагдахуйц болгож, бусад бүх сүлжээний хувьд холбоос тус бүрийн DNS-ийг арилгадаг бөгөөд энэ нь дотоод нэрсийн хуваасан DNS-ийг эвдэж, асуулгыг дотроо байлгахаар зорьсон туннелийн зорилгыг утгагүй болгоно. resolvconf суулгаж, нийтийн серверүүдийг бэхлэх нь нэмэлт давхаргатай ижил үнэтэй. Аль нэгийг нь оношилгоо гэж үз: хэрэв энэ нь хөтлөлтийг сэргээвэл нийтийн серверүүд зөв гэсэн үг биш, шийдэгчийн интеграц буруутанг нь мэдсэн юм.
Байнгын засвар нь давхарга бүрт нэг эзэмшигч: туннелийн холбоосын DNS-ийг аль бүрэлдэхүүн эзэмшиж, глобал өгөгдмөлийг аль нь эзэмшихыг шийдэж, бичиж үлдээгээд бусдыг замаас нь хас. Дараа нь салсны дараа зөвхөн VPN шийддэг нэрээр шалга. Хэрэв хувийн нэр хариу үйлдэл хийсээр байвал бүртгэл арилаагүй; хэрэв юу ч шийдэгдэхгүй бол файл байхгүй сервер рүү зааж байна. Хоёулаа хөтөч нээхийн өмнө resolvectl дээр харагдана.