Прагляд унутры дыстрыбутыва працуе, а першае ўнутранае імя хоста зрываецца ў той момант, калі ўзнімаецца тунель. Рэфлекс — дадаць публічны рэзалвер, што вяртае інтэрнэт і робіць карпаратыўнае імя недасяжным да канца дня. У WSL 2 /etc/resolv.conf — гэта згенераваны вывад, а не канфігурацыя, і менавіта гэты механізм варта зразумець. Выпраўленне — не лепшы рэзалвер, а валоданне файлам.

Файл генеруецца, а не наладжваецца

WSL 2 запісвае файл пры запуску з тых адаптараў Windows, якія бачыць у гэты момант, і друкуе ўверсе каментар пра гэта. Калі кліент VPN пазней дадае або перазапісвае адаптар, дыстрыбутыў не абавязкова нешта перагенеруе, і файл працягвае апісваць сетку, якой ужо няма.

Другі рэжым збою цішэйшы: WSL можа капіяваць серверы толькі з некаторых адаптараў. Калі фізічны адаптар ужо мае рэзалвер IPv6, серверы IPv4, якія падае адаптар VPN, могуць быць адкінутыя замест дадання, і файл выглядае поўным, але менавіта той, што адказвае на ўнутраныя імёны, прапушчаны.

Параўнайце від з Windows і від з Linux

Прачытайце абодва бакі перад рэдагаваннем. Унутры дыстрыбутыва паглядзіце, што змяшчае файл і ці гэта звычайны файл ці спасылка. У Windows пералічыце рэзалвер для кожнага адаптара, уключаючы той, які стварыў VPN:

ls -l /etc/resolv.conf
cat /etc/resolv.conf
Get-DnsClientServerAddress -AddressFamily IPv4
Get-NetAdapter | Where-Object Status -eq 'Up'

Калі адаптар VPN паказвае карпаратыўныя серверы, а Linux — нешта іншае, разыходжанне ў генерацыі, а не ў дасяжнасці. Параўнайце спіс адаптараў разам з адрасамі, бо адсутны адаптар тлумачыць адсутны сервер. Гэтае адрозненне вырашае, ці вы рамантуеце WSL, ці фаервол, і агульнага паміж імі няма нічога.

Адключыце генерацыю і напішыце свой файл

Ёсць адна дакументаваная налада, якая не дае WSL перазапісваць файл, і яна знаходзіцца ў /etc/wsl.conf. Дадайце ў гэты файл раздзел сеткі:

[network]
generateResolvConf = false

Затым спыніце дыстрыбутыў з Windows праз wsl --shutdown і запусціце яго зноў. Калі шлях — сімвалічная спасылка, а не звычайны файл, выдаліце спасылку перад запісам уласнага змесціва, бо запіс праз спасылку можа аднавіць згенераваную цэль пры наступным запуску. З гэтага моманту файл ваш, і нішто яго не перазапісвае.

nameserver 172.28.4.10
nameserver 172.28.4.11
search site.corp.example
options timeout:1 attempts:2 rotate

Без пошукавага дамена непоўнае імя хоста дапаўняецца публічным коранем і вяртаецца як «такі дамен не існуе». timeout не дае мёртваму першаму серверу тармазіць кожны запыт, attempts абмяжоўвае колькасць спроб на запыт, а rotate размяркоўвае паўторы замест таго каб заўсёды пачынаць зверху. Кампраміс у тым, што файл больш не ідзе за VPN, адрас рэзалвера якога змяняецца паміж сесіямі.

Разбярыцеся з рэзалверам, які перамяшчаецца, затым праверце

Некаторыя кліенты выдаюць рэзалвер, спецыфічны для сесіі, таму статычны файл ламаецца пры наступным падключэнні. Два падыходы апраўданыя. Пішыце файл з невялікага скрыпта, калі адрас змяняецца, або пакіньце генерацыю ўключанай і пераканайцеся, што адаптар, з якога капіюе WSL, нясе карпаратыўны сервер. Другі не патрабуе кручка і зрываецца, калі генерацыя прапускае адаптар VPN; абодва ўсё яшчэ патрабуюць спачатку вырашыць канфлікт IPv6.

Windows таксама прымяняе свае палітыкі імёнаў, напрыклад спіс пошуку суфіксаў або палітыку развязання для пэўных даменаў, і капіраванне адрасоў адаптараў не ўзнаўляе гэтыя правілы. Калі імя развязваецца ў Windows і не развязваецца ў дыстрыбутыве з тым жа серверам, параўнайце апрацоўку суфіксаў, перш чым вінаваціць тунель.

Правярайце імем, а не пакетам: getent hosts sensor-access0.corp.example праходзіць праз стэк рэзалвера, а ping можа паспець супраць кэшаванага або літаральнага адраса. Затым паўтарыце пасля адключэння і паўторнага падключэння, бо налада, якая працуе адзін раз і перагенеруецца пры аднаўленні, ніколі не была выпраўлена. Захавайце папярэдні змест і адзначце, які кампанент валодае шляхам на гэтай машыне, каб наступная змена пачалася з доказаў.

Падобныя артыкулы