CIFS таңбалауышы VPN арқылы nsswitch ретінен сәтсіз аяқталады
Желілік қатынас мекенжай бойынша жауап береді, ал атау бойынша ілініп қалады, сондықтан іздеу SMB басталмай тұрып өледі. getent пен host салыстырып, содан кейін hosts жолын ретімен оқыңыз.
Туннель жұмыс істеп тұр. Файл сервері 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 ретіне, іздеу доменіне немесе контейнердің өз конфигурациясына жатады.