내 mDNS 요청을 차단하는 요소가 무엇인지 어떻게 확인할 수 있나요?

내 mDNS 요청을 차단하는 요소가 무엇인지 어떻게 확인할 수 있나요?

이것이 그 경우 다. avahi를 통해 여러 도메인을 게시하는 홈 서버가 있습니다.

Avahi 및 resolvctl은 클라이언트(ubuntu 22)에 설치됩니다.

파일에서 /etc/nsswitch.conf- hosts: files mdns4_minimal [NOTFOUND=return] dns.이것은 정상적으로 보입니다.

하지만,

$ avahi-resolve -n whoami.homeserver.local
whoami.homeserver.local 192.168.0.4

하지만 Ping이나 Curl을 통해 주소를 해결하려고 하면

$ curl whoami.homeserver.local
curl: (6) Could not resolve host: whoami.homeserver.local

UPD: 흥미롭습니다. homeserver.local기본 이름이 ping을 통해 올바르게 확인되었습니다.

답변1

mDNS를 통해 3개의 태그 이름을 확인하려고 합니다.

일반적으로 mdns4_minimal2개의 태그 이름만 구문 분석됩니다.

바라보다libnss-mdns 파서 라이브러리의 소스 코드:

// If mdns_allow_file is NULL, then this implements the "local" SOA
// check and two-label name checks similarly to the algorithm
// described at https://support.apple.com/en-us/HT201275. This means
// that if a unicast DNS server claims authority on "local", or if the
// user tries to resolve a >2-label name, we will not do mDNS resolution.

언급된 Apple 지원 문서는 더 이상 존재하지 않지만archive.org에서 볼 수 있습니다..

여기서 언급된 것은 mdns_allow_file빌드 시간 구성 가능 ${sysconfdir}/mdns.allow(일반적으로 /etc/mdns.allow)을 나타냅니다. 이 파일이 존재하는지 테스트합니다 mdns4_minimal. 존재하는 경우 더 넓은 mDNS 조회가 허용됩니다. 이것이 없으면 기본적으로 <single_label>.local양식의 두 레이블 이름만 mDNS를 통해 조회됩니다. local.일반 DNS SOA 레코드가 발견되면 조회도 건너뛰게 됩니다.

mDNS가 도입되었을 때 많은 조직이 이미 내부 DNS 계층 구조를 .local또는 .organization.local.

mDNS 사용 할당과 관련된 문제를 최소화하기 위해 우리는 타협점에 도달했습니다. 기본적으로 mDNS는 더 넓은 사용을 위해 특별히 활성화하지 않는 한 .local으로 끝나는 이중 레이블 이름에서만 작동합니다 . .local이렇게 하면 세 개 이상의 태그로 끝나는 이름을 이전처럼 확인할 수 있지만 .localmDNS/Zeroconf/Bonjour를 위해 mDNS/Zeroconf/Bonjour로 끝나는 두 개의 태그 이름이 유지됩니다..local

문서가 잘 정리되어 있지 않은 것 같지만,유익한 커밋 메시지에 대한 지원 추가:

버전 0.5부터 에서 사용할 수 있는 nss-mdns간단한 구성 파일이 있습니다 . 이 파일에는 줄 바꿈으로 구분된 유효한 도메인 접미사가 포함되어 있습니다. #으로 시작하는 주석과 마찬가지로 빈 줄은 무시됩니다. 도메인 접미사에 관계없이 모든 이름에 대해 mDNS 조회를 활성화하려면 다음만 포함하는 줄을 추가합니다( 버전 <= 0.4의 작동 모드와 유사)./etc/mdns.allow.local*nss-mdns

# /etc/mdns.allow
*

구성 파일이 존재하지 않거나 읽을 수 없는 경우 nss-mdns동작은 다음 내용이 포함된 구성 파일을 읽는 것과 같습니다.

# /etc/mdns.allow
.local.
.local

즉, 로 끝나는 호스트 이름만 .localmDNS를 통해 확인됩니다.

구성 파일이 존재하지만 비어 있으면 mDNS 이름 조회가 완전히 비활성화됩니다.

독서이름이 mDNS 조회를 허용하는지 여부를 결정하는 함수의 소스 코드/etc/mdns.allowelse파일이 존재하지 않는 경우( 가장 바깥쪽 if...then...else절의 분기) 에만 이중 레이블 제한이 적용됨을 나타냅니다 .분명히 2-레이블 휴리스틱은 mdns.allow논문이 구현된 지 10년 후에 추가되었습니다.

따라서 3개의 레이블로 구성된 mDNS 이름이 작동하도록 하고 다른 모든 이름은 그대로 작동하도록 하려면 /etc/mdns.allow다음 콘텐츠가 포함된 파일을 생성해야 합니다.

.local.
.local

관련 정보