Arch Linux dhcpd가 부팅 시 시작되지 않음 - 서브넷 선언을 찾을 수 없음

Arch Linux dhcpd가 부팅 시 시작되지 않음 - 서브넷 선언을 찾을 수 없음

Arch Linux에서 DHCP 서버를 실행하고 싶지만 문제가 발생했습니다. dhcpd를 시작하는 데 문제가 있습니다. 로그인 후 수동으로 실행하면 정상적으로 시작됩니다.sudo systemctl start [email protected]

저는 최신 버전의 Arch Linux(4.7.0-1)를 실행하고 있으며 Arch 네트워크 위키를 따라 이를 설정했습니다.

내 설정

  • dhcpcd 비활성화됨
  • 저는 systemd-networkd를 사용하여 고정 IP(활성화)를 수행합니다. 구성은 ( /etc/systemd/network/wired.network)입니다.

    [Match]
    Name=eth0
    
    [Network]
    Address=10.0.0.2/24
    Gateway=10.0.0.1
    
    • 내 것은 /etc/dhcpd.conf매우 간단합니다.

      option domain-name-servers 10.0.0.2;   
      option subnet-mask 255.255.255.0;   
      option routers 10.0.0.0.1;   
      subnet 10.0.0.0 netmask 255.255.255.0 {
          range 10.0.0.5 10.0.0.50;   
      }
      
  • 시스템 서비스 파일( )을 생성하고 다음을 사용하여 활성화했습니다./etc/systemd/system/[email protected]systemctl enable [email protected]

    [Unit]
    Description=IPv4 DHCP server on %I
    Wants=network.target
    After=network-pre.target
    Before=network.target
    
    [Service]
    Type=forking
    PIDFile=/run/dhcpd4.pid
    ExecStart=/usr/bin/dhcpd -4 -q -pf /run/dhcpd4.pid %I
    KillSignal=SIGINT
    
    [Install]
    WantedBy=multi-user.target
    

재부팅하면 시작 시(실행 시 journalctl -xe) 오류 메시지가 나타납니다.

 No subnet declaration for eth0 (no IPv4 addresses).
 ** Ignoring requests on eth0....

그런 다음 실행하면 문제없이 모든 것이 잘 실행됩니다.systemctl start [email protected]

인터넷 검색을 많이 했지만 이 문제에 대한 해결책을 찾지 못했습니다. 파일( dhcpd.conf, [email protected]wired.network)을 하드 코딩된 인터페이스로 조정하고, 추가 DHCP 문을 추가하고, 장치 요구 사항을 변경하는 등의 작업을 시도했지만 아무것도 작동하지 않는 것 같습니다.

답변1

dhcpd를 eth0으로만 제한해 보셨나요? 그렇지 않은 경우 간단히 표준 시스템 서비스 파일을 사용할 수 있습니다 dhcpd4.service.

그렇다면 바꿔서 시도해 보세요.

After=network-pre.target
Before=network.target

도착하다

After=network.target

이는 에도 규정되어 있다.표준dhcpd4.service. dhcpd에는 활성 인터페이스가 필요한 것 같습니다. 시작되면 보장되지 않습니다.앞으로 network.target.

답변2

내 질문에 대한 답을 찾았습니다! 문제는 네트워크가 부팅/구성될 때 부팅 프로세스가 DHCP 서비스를 시작하려고 시도하므로 DHCP가 바인딩할 작업 인터페이스를 찾을 수 없다는 것입니다. 이것이 바로 시작 dhcpd 서비스를 수동으로 실행하면 항상 작동하지만 시작 시에는 작동하지 않는 이유입니다.

이 기사에서 답에 대한 단서를 찾았습니다.아치 리눅스의 dhcp - rasp-pi. 사용자는 유닛 파일에서 재시작 문을 사용하여 서비스가 시작될 때까지 6초마다 서비스를 재시도했습니다. - 이 임시 해결책은 나에게도 효과가 있었습니다.

systemd 웹사이트를 뒤져봤는데특별한 목표페이지에서 이 링크를 찾으세요.네트워크 연결 후 서비스 실행. 이 페이지의 제안을 바탕으로 다음과 같이 조정했습니다.

  • 내부에[이메일 보호됨]내가 삭제 하고 Before=...변경 하고 변경한 유닛 파일AfterAfter=network-online.targetWantsWants=network-online.target
  • systemd-networkd-wait-online.service부팅 시 시작 도 활성화했습니다 .

이제 부팅 시 실행됩니다! 그러나 권장 사항 페이지에는 활성화 systemd-networkd-wait-online.service하면 부팅 시간이 느려지고 90초를 단축할 수 있다고 나와 있습니다 (올바르게 읽은 경우). 제 경우에는 부팅 시간이 1~2초 정도 증가한 것에 불과했습니다.

관련 정보