IPv4 대신 IPv6 주소를 사용하는 NTP

IPv4 대신 IPv6 주소를 사용하는 NTP

Linux 버전(3.12)을 실행하는 노트북이 있습니다. ntpd를 설치하고 time.google.com과 동기화하도록 구성했습니다. 내가 가진 문제는 IPV4 주소만 제공하는 네트워크에 연결하면 ntp용 DNS가 ipv6 주소를 사용한다는 것입니다.

    root@Node00b01973d6cc:~# ntpq -pn                                                                                           
     remote           refid      st t when poll reach   delay   offset  jitter                                              
==============================================================================                                              
 127.127.1.0     .LOCL.          10 l    7   64    1    0.000    0.000   0.002                                              
 ff0e::101       .MCST.          16 M    -   64    0    0.000    0.000   0.002                                              
 2001:4860:4806: .INIT.          16 u    -   64    0    0.000    0.000   0.000  

이제 ntpd가 -4 옵션과 함께 IPv4 DNS만 사용하도록 강제하면 모든 것이 잘 작동합니다.

root@Node00b01973d6cc:~# ntpq -pn 172.16.17.111                                                                             
     remote           refid      st t when poll reach   delay   offset  jitter                                              
==============================================================================                                              
 127.127.1.0     .LOCL.          10 l   60   64    1    0.000    0.000   0.002                                              
 216.239.35.12   .GOOG.           1 u   57   64    1   29.278  341.883   0.002     

하지만 IPv6 주소만 제공하는 네트워크에 들어가면 실패하기 때문에 그렇게 하고 싶지 않습니다. 내 인터페이스에 실제로 해당 제품군의 IP 주소가 있는 경우 IPv4(또는 IPv6)만 사용하도록 NTP를 구성할 수 있습니까?

ntpd 버전은 4.2.8p12입니다. 이것은 ntp.conf 파일입니다:

tinker panic 0                                                              
                                                            
driftfile /usr/local/etc/ntp.drift                                          
disable auth                                                                   
                                                                         
# Update the realtime clock and override its default                         
# stratum of 0.                                                                   
server time.google.com prefer #Real Time Clock                             
server 127.127.1.0 #Real Time Clock                           
server 127.127.1.0 #Real Time Clock                                         
fudge 127.127.1.0 stratum 10                                      
broadcast ff0e::101 iburst ttl 7              

왜 이런 일이 발생하는지 근본 원인을 알아냈습니다. 최근에 내 시스템에서 IPv6 전달을 비활성화했습니다. IPv6 전달을 다시 켜면 NTP는 예상대로 IPv4 주소를 사용하기 시작했습니다.

IPv6 전달이 활성화되면 왜 이런 일이 발생합니까?

기본적으로 시스템 시작 시 IPv6 전달은 비활성화되어 있습니다. 이를 켜려면 시작 스크립트 중 하나에 다음 줄이 있습니다.

sysctl -w net.ipv6.conf.all.forwarding=1

답변1

이 질문은 2년 전의 것이지만 이 주제는 확실히 그렇지 않습니다.

~에 따르면RFC-3484: IPv6에 대한 기본 주소 선택 운영 체제는 자동으로 최상의 IP 주소인 IPv6 또는 IPv4를 선택합니다.

변경되지 않았고 /etc/gai.confDNS가 제대로 작동하는 경우 Linux(및 기타 여러 운영 체제)는 IPv6 주소를 선호합니다. 그렇지 않으면 예를 들어 time.google.com에 연결하기 위해 IPv4를 선택합니다.

를 이용하여 확인할 수 있습니다 getent ahosts time.google.com. 각 소프트웨어는 이 목록의 모든 IP 주소를 위에서부터 순서대로 시도해야 합니다.

Linux는 어디에서 시간 서버를 얻습니까? DHCP인 경우 운영 체제는 FQDN이 아닌 IPv4 IP 주소를 가져오기 때문에 선택의 여지가 없습니다. NTP 클라이언트는 실제 구성된 NTP 서버 "이름" 대신 IP 주소의 역방향 DNS 호스트를 표시할 수 있습니다.

/edit: openSUSE 15.2 및 CentOS 7에서 ntpd 4.2.8p15 및 ntpd 4.2.6p5를 사용해 보았습니다. ntpd는 RFC 6742(3484)를 준수하지 않습니다. 그러나 크로니드는 그렇습니다.

/edit2: IPv6를 통해 NTP 서버에 연결할 수 없는 경우 chronyd(3.4)는 v4 주소를 사용하는 데 시간이 오래 걸리는 것 같습니다.

답변2

localhost호스트 파일에서 IPv6을 제거하거나 주석 처리합니다.

#::1            localhost6.localdomain6 localhost6

관련 정보