VPN туташкандан кийин WSL2 DNS-ти жоготтубу? Эки себеп
Эскирген resolver файлы жана атаандаш маршрут метрикасы WSL2 ичинде бирдей белгини пайда кылат. Эки тарапты тең жазып алыңыз, анан чындап бузулганын оңдоңуз.
Дарек боюнча 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.comWindows’то ар бир адаптер боюнча 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 = falsesearch 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 белгиси экөөнү тең далилдебейт.