Хаягаар ping хийх нь дистрибутив дотор ажилладаг, пакет суулгах болон git татах нь ажиллахгүй, эвдрэл нь туннель өссөний дараа шууд илэрсэн. Зөвхөн нэрүүд шийдэгдэхээ болиод, энэ нь DNS-ийг зааж байна, холболтыг биш. Пакетуудыг дахин суулгах нь энд хамгийн түгээмэл буруу эхний алхам юм. WSL2-т яг энэ шинж тэмдгийг үүсгэх хоёр бие даасан арга байгаа бөгөөд тэд өөр өөр засвар шаарддаг.

Яагаад дистрибутив өөрийн resolver-ийг хадгалдаг вэ

Windows-ийн DNS клиент нь дистрибутив дотор ашиглагддаггүй. WSL2 ажиллах үед өөрийн resolver файлыг бүтээдэг бөгөөд энэ нь Windows туслах виртуал машины виртуал шилжүүлэгч дээр нийтэлдэг stub хаяг руу заадаг.

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

Дистрибутив дотор юу ч өөрчлөлтийг хянадаггүй тул файл зам дээр байхгүй байж болох хаяг руу заасаар байна. Дараагийн хайлт тэгэхэд хүлээгээд, хугацаа дуусаад эсвэл дотоод бүсийн талаар хэзээ ч сонсож байгаагүй серверээс хариу авдаг. Дотроос resolver зүгээр л хариу өгөхөө болиод, бүх нэр нэгэн зэрэг бүтэлгүйтдэг.

Эхлээд хоёр талаас нотолгоо цуглуулаарай

Аль нэгийг нь өөрчлөхөөс өмнө дистрибутив юу харж байгаа, дараа нь Windows юу харж байгааг бүртгээрэй. Яг энэ хоёр харагдац нийлээд бүтэлгүйтлийн төрлийг ялгадаг.

Дистрибутив дотор resolver файл, маршрутын хүснэгт, нэг дотоод болон нэг нийтийн хайлтыг хэвлээрэй:

ip -4 route
cat /etc/resolv.conf
getent hosts intranet.corp.example
getent hosts example.com

Windows дээр адаптер тус бүрийн DNS серверүүд болон хэмжүүртэй IPv4 хүснэгтийг жагсаа. VPN клиент ихэвчлэн WSL2 дэд сүлжээнд маршрут суулгадаг бөгөөд түүний хэмжүүр нь энэ урсгал туннелээр гарч байгаа эсэх эсвэл орон нутгийн үлдэх эсэхийг шийддэг.

Get-NetAdapter | Get-DnsClientServerAddress
route print -4

Маршрутын хэмжүүр эсвэл хуучирсан файл

Эхний эвдрэл нь хуучирсан файл юм. Resolver нь эхлэх үеийн адаптерын төлөвт зориулж бичигдсэн бөгөөд туннель тэр төлөвийг өөрчилсөн. Түүний stub хаяг одоо хүрэхгүй байж болно, эсвэл дотоод бүсийн талаар юу ч мэдэхгүй серверийг нэрлэж болно.

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

Ялгах туршилт нэг мөрөнд багтана. Нийтийн resolver шиг тоон хаяг нэрүүд бүтэлгүйтэж байхад ping-д хариу өгсөөр байвал зам бүрэн бөгөөд асуудал DNS дээр байна. Энэ нь resolver солих үндэслэлтэй тохиолдол бөгөөд үндэслэлгүй тохиолдол ч мөн тодорхой болдог. Тоон туршилт ч бүтэлгүйтвэл туслах виртуал машин маршрутаа алдсан бөгөөд ямар ч resolver файл үүнийг засахгүй.

Маршрутын тохиолдолд туннелийн адаптераас автомат хэмжүүрийг хасч, WSL2-ын холбоосын маршрутаас дээш тоо өгөөрэй:

Get-NetAdapter | Where-Object InterfaceDescription -Match VPN | Set-NetIPInterface -InterfaceMetric 5500
wsl.exe --shutdown

Унтраах нь чухал. Хэмжүүрийг өөрчлөх нь ажиллаж байгаа туслах виртуал машиныг дахин бичихгүй тул өөрчлөлт харагдахаас өмнө дистрибутивийг дахин бүтээх шаардлагатай.

Файлыг санаатайгаар өөрөө аваарай

Маршрут зөв бөгөөд зөвхөн дотоод нэрүүд бүтэлгүйтвэл resolver буруутай бөгөөд генераторыг зогсоож болно. Энэ бол засвар үйлчилгээний зардалтай санаатай өөрчлөлт, хайхрамжгүй хэрэглэх тойрч гарах арга биш.

Дистрибутив дотор үүсгэлтийг идэвхгүй болгодог сүлжээний хэсэгтэй /etc/wsl.conf-ыг үүсгээд, дараа нь resolver файлыг өөрөө бичээрэй, эхлээд корпорацийн сервер, дараа нь нийтийн нөөц:

[network]
generateResolvConf = false
search corp.example
nameserver 10.88.4.53
nameserver 9.9.9.9

Дараалал чухал. Нийтийн resolver дотоод нэрийг хариулж чадахгүй бөгөөд нөөц нь зөвхөн интернэт хайлтад зориулагдсан. Файл таных болсны дараа юу ч үүнийг дахин үүсгэхгүй тул нүүж буй корпорацийн resolver та өөрөө анзаарах ёстой тасалдал болдог.

Эхлээд нэрүүдийг, дараа нь пакетуудыг шалгаарай

Системийн resolver-ээр нэг дотоод болон нэг нийтийн нэрийг шалгаад, бүтэлгүйтсэн үйлдлийг давтаарай. Пакет менежерүүд заримдаа өөрийн resolver-ийг ашигладаг тул ажиллаж буй getent эвдэрсэн суулгацын хажууд байж болно.

Дахин бичихийг автоматжуулбал үүнийг идемпотент болго: туннель байхгүй үед хоосон серверийн жагсаалт бичихийн оронд байгаа файлыг үлдээ.

getent hosts intranet.corp.example
resolvectl status | head -20
getent hosts example.com

Дистрибутив дотроос ажиллаж буй дотоод хайлт болон ажиллаж буй нийтийн хайлт нь бүртгэх үнэ цэнэтэй үр дүн юм. Хост дээрх ногоон VPN дүрс аль нэгийг нь ч нотолдоггүй.

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