(Raspian) DHCP 시작 경쟁 조건 - 시작 시 많은 서비스 실패(약 5~10초 동안 DNS 없음)

(Raspian) DHCP 시작 경쟁 조건 - 시작 시 많은 서비스 실패(약 5~10초 동안 DNS 없음)

(편집: 이것은 접미사에만 적용되는 것이 아닙니다. 제가 발견/디버깅한 부분입니다.)

postfix를 설치했지만 부팅하고 chroot를 생성하면 빈 복사본이 생기 /etc/resolv.conf므로 도메인을 확인할 수 없습니다.

Resolve.conf가 언제 지워지거나 다시 채워지는지, 그리고 postfix가 언제 시작되는지 확인하기 위해 다양한 네트워크 스크립트에 일부 로깅을 추가했습니다...

시작 시 로그는 다음과 같습니다.

Sun Mar 27 19:12:30 UTC 2016
  EXECUTE: root + /sbin/resolvconf2 -d eth0 -f

Sun 27 Mar 19:12:31 UTC 2016
  Postfix startup script

Sun Mar 27 19:12:37 UTC 2016
  EXECUTE: root + /sbin/resolvconf2 -a eth0

구성을 지우기 위해 resolvconf를 호출한 후 다시 채우는 사이에는 7초의 지연이 있습니다. 이 시간 동안 /etc/resolv.conf는 사실상 비어 있습니다. postfix(및 기타 많은 서비스)가 시작되는 것은 이러한 호출 사이입니다.

resolvconf를 지우고 다시 만드는 사이의 큰 간격에서 서비스를 시작하는 것이 이상해 보입니다.

이것은 Postfix가 설치된 Raspbian의 새로운 설치이며 다른 변경 사항은 없습니다.

편집하다: 시스템 로그를 살펴보면 실제로 dhcpcd가 시작되고 종료되는 시간 사이에 DNS가 없어 실패하는 일이 많이 있습니다. 동시에 시작하려고 하는 다른 서비스에 버그가 있는 것 같나요?

답변1

글쎄, 많은 시간을 낭비한 후에 raspi-conf에서 이것을 찾았습니다 ...

라스피 컨퍼런스

그래서 이것은 디자인 문제인 것 같습니다. 기본 "빠른 시작"은 임의의 결함을 희생하여 발생합니다. Raspian을 새로 설치하면 postfix가 설치되지 않은 경우에도 시스템 로그에 DHCP 프로세스 중 다양한 스크립트에서 발생한 수많은 DNS 오류가 포함됩니다.

따라서 해결 방법은 시작 시 네트워크를 기다리는 스크립트를 생성하는 "느린" 시작으로 설정하는 것입니다.편집하다raspi-config: 다음과 같이 호출을 스크립팅할 수 있습니다.

sudo raspi-config nonint do_wait_for_network Slow

이렇게 하면 제가 발견한 접미사 문제가 해결되고 일반적으로 시작 시 시스템 로그에 기록되는 많은 DNS 관련 오류도 해결됩니다.

나는 기본 동작으로 이것이 미친 것이라고 생각합니다. 나는 이미 게시했다GitHub에 대한 피드백.

답변2

이 문제를 처리하는 또 다른 방법은 네트워크가 완전히 가동된 후 resolv.conf를 다시 복사하는 것입니다. systemd를 사용하여 /etc/systemd/system의 파일에 다음과 같은 이름을 넣고 fixpostfix.service실행하여 이 작업을 수행할 수 있습니다 sudo systemctl fixpostfix.service. 이제 재부팅할 때마다 네트워크가 완전히 온라인 상태가 되면 올바르게 채워진 resolv.conf가 복사됩니다.

[Unit]
Description=Fix poorly copied resolv.conf for postfix
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/bin/cp /etc/resolv.conf /var/spool/postfix/etc/resolv.conf

[Install]
WantedBy=multi-user.target

답변3

고려해야 할 또 다른 사항은 DHCP 할당 IP 주소를 사용하여 서버에 서비스를 할당하는 것에 대한 기본 설정입니다.

dhcpclient 기본적으로IP 주소를 기다리지 않습니다. 워크스테이션에서는 이를 변경하는 데 관심이 없을 수도 있지만 서버에서는 우선 순위 문제가 발생합니다.

기본적으로 So는 -nw 옵션과 함께 호출됩니다 dhclient.수동:

-nw IP 주소를 얻기 위해 기다리지 않고 즉시(기다리지 않고) 데몬이 됩니다.

이 우선순위로 인해 몇 가지 문제가 발생했습니다(예: DHCP 종료 후크에서 재부팅한 후에도 BIND가 올바르게 시작되지 않음).

eth0을 다음과 같이 변경했습니다.

iface eth0 inet dhcp

도착하다

iface eth0 inet manual
   pre-up /sbin/dhclient -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0

관련 정보