이름 확인은 작동하지 않지만 nslookup은 작동합니다.

이름 확인은 작동하지 않지만 nslookup은 작동합니다.

Solaris 11을 설치할 때 매우 이상한 문제가 발생했습니다. DNS 확인은 작동하지 않지만 이상하게도 nslookup은 작동하고 연결은 잘 작동합니다.

root@solarisxyz:~# ping stackexchange.com
ping: unknown host stackexchange.com
root@solarisxyz:~# nslookup stackexchange.com
Server:         10.x.x.x (DNS)
Address:        10.x.x.x#y

Non-authoritative answer:
Name:   stackexchange.com
Address: 64.34.119.12

root@solarisxyz:~# ping 64.34.119.12
64.34.119.12 is alive

문서의 관련 부분:

  • /etc/resolv.conf:(이것은 우리의 리눅스 박스와 같은 것입니다)

    domain us.oracle.com
    nameserver 10.x.x.x
    nameserver 10.x.x.x  
    
  • /etc/호스트:

    # ::1 solarisxyz localhost (commented out)
    127.0.0.1 localhost loghost solarisxyz
    
  • /etc/nsswitch.conf:

    hosts:    files dns
    # pretty much everything else set to files
    

답변1

Solaris 11부터 네트워크 구성이 근본적으로 변경되었습니다. nsswitch.conf는 이제 정보 제공용입니다. 자동 모드가 아니고 DNS가 올바르게 구성된 경우 새로운 절차는 다음과 같습니다.

http://docs.oracle.com/cd/E23824_01/html/E24456/gliyc.html#OSTELgllcu

답변2

SMF를 사용하여 이름 지정 서비스 구성

다음 예에서는 SMF 명령을 사용하여 DNS를 구성하는 방법을 보여줍니다.

# svccfg
svc:> select dns/client
svc:/network/dns/client> setprop config/search = astring: \
("us.company.com" "eu.company.com" "companya.com" "companyb.com" "company.com" )
svc:/network/dns/client> setprop config/nameserver = net_address: \
( 138.2.202.15 138.2.202.25 )
svc:/network/dns/client> select dns/client:default
svc:/network/dns/client:default> refresh
svc:/network/dns/client:default> validate
svc:/network/dns/client:default> select name-service/switch
svc:/system/name-service/switch> setprop config/host = astring: "files dns"
svc:/system/name-service/switch> select system/name-service/switch:default
svc:/system/name-service/switch:default> refresh
svc:/system/name-service/switch:default> validate
svc:/system/name-service/switch:default> 
# svcadm enable dns/client
# svcadm refresh name-service/switch
# grep host /etc/nsswitch.conf
hosts:  files dns
# cat /etc/resolv.conf

답변3

내 생각에 귀하의 문제는 Solaris 이름 서비스 데몬, 더 정확하게는 이 괴물의 구성과 관련이 있는 것 같습니다. 어쩌면 /etc/nsswitch.conf를 수동으로 편집했습니까? 이는 이름 서비스 데몬이 이를 수신하지 못한 이유를 설명합니다.

내가 아는 한, nslookup 명령은 Solaris 이름 서비스를 사용하지 않습니다. 이는 nslookup이 예상대로 작동하는 것으로 보이지만 다른 모든 것은 그렇지 않은 이유를 설명할 수 있습니다.

Solaris에서는 항상 명령을 사용하여 조회 서비스가 예상대로 작동하는지 확인하는 것이 좋습니다 getent. 귀하의 예에서는 다음과 같습니다.

getent 호스트 stackexchange.com

따라서 문제는 Solaris 이름 서비스가 두 개의 로컬 파일에서 호스트 이름을 찾아야 한다는 것을 어떻게 알 수 있는지 확인하는 것입니다.또한DNS에서. Solaris 11에서는 더 이상 /etc/nsswitch.conf와 같은 파일을 직접 편집하는 것이 허용되지 않는다는 점을 명심하십시오. 이는 SMF에서 실행되는 데몬에 의해 제어됩니다. 변경하는 방법은 다음과 같습니다.

#svccfg
svc:> 이름 서비스/스위치 선택
svc:/system/name-service/switch> setprop config/host = astring: "file dns"
svc:/system/name-service/switch> 시스템/name-service/switch:default 선택
svc:/system/name-service/switch:default> 새로 고침
svc:/system/name-service/switch:default> 확인
svc:/system/name-service/switch:default> 종료
# svcadm 새로 고침 이름 서비스/스위치

/etc/nsswitch.conf그 후에는 파일이 디스크에 다시 기록되었음을 알 수 있습니다 . 이전에 수동으로 편집한 경우 실제 변경 사항이 표시되지 않을 수 있습니다. 명령 을 다시 실행 getent하면 이제 제대로 작동할 것입니다.

행운을 빌어요.

답변4

먼저 다음 truss과 같이 시작하십시오 nscd.

truss -aefld -vall -wall -rall -o truss-nscd.out -u nss_\*:: -u libnsl:: -p `pgrep nscd`

위의 truss명령이 실행되면 시도해보십시오.

truss -aefld -vall -wall -rall -o truss-getent_1.out -u a.out,libnsl:: getent hosts ANY_HOSTNAME

그런 다음 일시적으로 비활성화하십시오 nscd.

svcadm disable name-service-cache

그리고 다음을 실행하세요:

truss -aefld -vall -wall -rall -o truss-getent_2.out -u a.out,libnsl:: -u nss_\*:: getent hosts ANY_HOSTNAME

이제 이름 서비스 캐싱을 다시 활성화할 수 있습니다.

svcadm enable name-service-cache

지금 시도해 보십시오. 효과가 있기를 바랍니다.

관련 정보