Монтирањето на CIFS преку VPN не успева поради редот во nsswitch
Споделениот ресурс одговара по адреса и виси по име, затоа пребарувањето умира пред SMB да започне. Споредете getent со host, потоа прочитајте ја линијата hosts по ред.
Тунелот е подигнат. Датотечниот сервер одговара на ping по адреса. Потоа mount.cifs со името на домаќинот виси извесно време и соопштува дека домаќинот е недостапен, и вие почнувате одново да градите VPN профил што никогаш не бил проблемот. Во Linux името го разрешува glibc пред воопшто да постои било каков SMB пакет, а редот во тој резолвер може да го прекине пребарувањето пред DNS воопшто да биде прашан. Ова е патеката што ја одам, почнувајќи од командата што не успеа, а не од клиентот.
Прочитајте го неуспехот на вистинското место
Две алатки одат по различни патеки до истото име, а нивната споредба чини една команда. getent оди низ конфигурираниот стек на служби за имиња; host и dig прашуваат DNS директно и го игнорираат тој стек. Ако директното барање врати адреса, а getent не врати ништо, DNS серверот е достапен и вашата конфигурација на резолверот е онаа што не успева.
getent hosts fileserver.corp.example
host fileserver.corp.example 10.61.0.1
getent -s dns hosts fileserver.corp.example
Третата команда е решавачката: таа го наложува DNS изворот и го прескокнува остатокот од стекот. Кога таа работи, а обичниот getent не, вие докажавте дека вината е во редот, не во тунелот и не во серверот.
Линијата hosts е низа што запира рано
Резолверот на glibc чита /etc/nsswitch.conf и го поминува записот hosts: од лево кон десно. Многу дистрибуции испорачуваат линија во која multicast пребарувањето е прво со прикачена акција за рано враќање. Акцијата не е украс: кога mDNS одговара “not found”, [NOTFOUND=return] го завршува целото пребарување, така што корпоративното име никогаш не се праќа до резолверот што VPN-от го наметнал. Ништо тоа не го запишува, зашто не е испратено никакво барање што резолверот би можел да го одбие. Затоа монтирањето изгледа како да виси и потоа соопштува недостапен домаќин.
cat /etc/nsswitch.conf | grep '^hosts:'
# illustrative repair: dns before the early-return action
hosts: files myhostname mdns4_minimal dns [NOTFOUND=return] wins mdns4
Преместете го DNS пред акцијата за рано враќање, наместо да го бришете mDNS, и менувајте го преку управување со конфигурација. Рачната поправка живее до следното градење на сликата, а потоа истиот тикет пристигнува од друга машина што не ја памети поправката.
Резолверот не е домен за пребарување
За разрешување треба и името да биде пробано. Нецелосно име како fileserver станува fileserver.corp.example само кога доменот за пребарување е прикачен на интерфејсот што го носи барањето. VPN што наметува DNS сервер без список за пребарување создава многу конкретна поделба: целосното име се разрешува, а секое кратко име не успева.
Тестирајте ги двете форми пред да го уредувате профилот, зашто двата неуспеха покажуваат во различни правци. На домаќин со systemd-resolved врската на тунелот има свои сервери и домени за рутирање, затоа читајте ја врската, а не глобалната датотека.
resolvectl status
resolvectl query fileserver.corp.example
resolvectl dns
resolvectl domain
Ако барањето се припишува на врска што не го носи тунелот, доменот за рутирање недостасува иако DNS адресата е присутна. Тоа е проблем на политика во конфигурацијата на resolved, не проблем на рутирање во тунелот.
Контејнерите носат своја копија од одговорот
Контејнер изграден од општа слика обично испорачува фиксен resolv.conf. Промените на резолверот на домаќинот не стигнуваат до него, како и доменот за пребарување, затоа задачата за градење што монтира споделен ресурс преку тунелот не успева, додека истата команда надвор од контејнерот работи. Дајте му на контејнерот сопствени поставки за DNS и пребарување во compose датотеката или во аргументите за извршување, не само во профилот на домаќинот.
Проверете внатре во контејнерот пред да ја обвините сликата. Две команди ја повторуваат целата дијагностика за неколку секунди, а втората докажува кој резолвер навистина одговорил.
Дури тогаш погледнете го споделениот ресурс и филтерот
Штом името се разреши, останатите неуспеси се обични мрежни. 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 е проблем на огнена ѕид или слушател од другата страна. Неразрешеното име е проблем на резолверот. А монтирање што се автентикува, но враќа грешки за дозволи, не е ниту едно од двете, затоа не отворајте го мрежното прашање повторно кога сесијата е воспоставена.
Држете го заклучокот тесен колку доказите. Кога адресата работи, а името не, тунелот ја врши својата работа и поправката припаѓа на редот на резолверот, доменот за пребарување или сопствената конфигурација на контејнерот.