Туннель иштеп турат. Файлдык сервер pingге дарек боюнча жооп берет. Анан mount.cifs хосттун аты менен бир аз илинип туруп, хостко жетүү мүмкүн эместигин билдирет, сиз болсо эч качан көйгөй болбогон VPN профилин кайра кура баштайсыз. Linuxте атты glibc кандайдыр бир SMB пакети пайда боло электе эле чечет, жана ал resolverдеги тартип DNS сурала электе эле издөөнү бүтүрүшү мүмкүн. Бул — мен баскан жол, кардардан эмес, иштебей калган буйруктан башталат.

Жаңылыштыкты туура жерден окуңуз

Эки курал бир атка ар башка жол менен барат, аларды салыштыруу бир буйрукка турат. getent конфигурацияланган ат кызматынын стегинен өтөт; host жана dig DNSке түз суроо жөнөтүп, ал стекти этибарга албайт. Эгер түз суроо даректи кайтарса, ал эми getent эч нерсе кайтарбаса, DNS серверине жетүү мүмкүн, ал эми сиздин resolver конфигурацияңыз иштебей жатат.

getent hosts fileserver.corp.example
host fileserver.corp.example 10.61.0.1
getent -s dns hosts fileserver.corp.example

Үчүнчү буйрук — чечүүчү: ал DNS булагын мажбурлап, стектин калганын аттап өтөт. Ал иштеп, жөнөкөй getent иштебесе, сиз күнөө тартипте экенин далилдедиңиз, туннелде да, серверде да эмес.

hosts сабы — эрте токтогон ырааттуулук

glibc resolver /etc/nsswitch.conf файлын окуп, hosts: жазуусун солдон оңго карай өтөт. Көпчүлүк дистрибутивдер multicast издөөсү биринчи турган, ага эрте кайтуу аракети тиркелген сапты берет. Бул аракет — жасалга эмес: mDNS “not found” деп жооп бергенде, [NOTFOUND=return] бүт издөөнү бүтүрөт, ошондуктан корпоративдик ат VPN таңуулаган resolverге эч качан жөнөтүлбөйт. Эч нерсе аны журналга жазбайт, анткени resolver четке кага турган суроо такыр жөнөтүлгөн эмес. Ошондуктан түйүн илинип тургандай көрүнүп, анан хостко жетүү мүмкүн эмес деп билдирет.

cat /etc/nsswitch.conf | grep '^hosts:'
# illustrative repair: dns before the early-return action
hosts: files myhostname mdns4_minimal dns [NOTFOUND=return] wins mdns4

mDNSти өчүрүүнүн ордуна DNSти эрте кайтуу аракетинин алдына жылдырыңыз жана аны конфигурация башкаруу аркылуу өзгөртүңүз. Кол менен оңдоо кийинки image курууга чейин жашайт, анан ошол эле билет оңдоону эстебеген башка машинеден келет.

Resolver — издөө домени эмес

Чечүү үчүн аттын аракет кылынышы да керек. fileserver сыяктуу толук эмес ат суроону алып жүргөн интерфейске издөө домени тиркелгенде гана fileserver.corp.example болот. Издөө тизмеси жок DNS серверин таңуулаган VPN абдан так бөлүнүү пайда кылат: толук квалификацияланган ат чечилет, ал эми ар бир кыска ат иштебейт.

Профилди оңдоодон мурун эки форманы тең сынаңыз, анткени эки иштебей калуу ар башка жакты көрсөтөт. systemd-resolved хостунда туннель шилтемесинин өз серверлери жана маршруттоо домендери бар, ошондуктан глобалдык файлды эмес, шилтемени окуңуз.

resolvectl status
resolvectl query fileserver.corp.example
resolvectl dns
resolvectl domain

Эгер суроо туннелди алып жүрбөгөн шилтемеге таандык болсо, DNS дареги бар болсо да маршруттоо домени жетишпейт. Бул resolved конфигурациясындагы саясат маселеси, туннелдеги маршруттоо маселеси эмес.

Контейнерлер жооптун өз көчүрмөсүн алып жүрөт

Жалпы imageден курулган контейнер адатта туруктуу resolv.conf алып келет. Хосттогу resolver өзгөртүүлөрү ага жетпейт, издөө домени да жетпейт, ошондуктан туннель аркылуу бөлүшүүнү туташтырган build тапшырмасы иштебейт, ал эми ошол эле буйрук контейнерден тышкары иштейт. Контейнерге өзүнүн DNS жана издөө жөндөөлөрүн compose файлында же run аргументтеринде бериңиз, хост профилинде гана эмес.

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

Ошондон кийин гана бөлүшүүгө жана чыпкага көңүл буруңуз

Ат чечилгенден кийин калган иштебей калуулар — кадимки тармактык маселелер. SMB серверге TCP 445 керек, ал эми жумушчу топтун тизмесин кароо туннель өткөрбөшү мүмкүн болгон ат кызматтарына көз каранды. Тизменин толушун күтүүнүн ордуна хосттун аты боюнча туташтырыңыз жана кардар кайсы баскычка жеткенин айтсын. Четке кагылган туташуу менен үнсүз timeoutту да ажыратуу керек, анткени биринчиси адатта бир нерсе жооп бергенин, экинчиси эч нерсе жооп бербегенин билдирет.

getent hosts fileserver.corp.example
nc -vz fileserver.corp.example 445
mount -t cifs //fileserver.corp.example/share /mnt/share \
  -o vers=3.1.1,username=svc_mount,uid=1000

Чечилген даректе 445 порту четке кагылса же убактысы өтсө, бул аркы тараптагы firewall же listener маселеси. Чечилбеген ат — resolver маселеси. Ал эми аутентификациядан өтүп, укук каталарын кайтарган түйүн — ал да, бул да эмес, ошондуктан сессия орногондон кийин тармак суроосун кайра ачпаңыз.

Корутундуну далилдегендей тар кармаңыз. Дарек иштеп, ат иштебесе, туннель өз ишин кылып жатат, ал эми оңдоо resolver тартибине, издөө доменине же контейнердин өз конфигурациясына таандык.

Тектеш макалалар