Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

A.19.3. 게스트의 PXE 부팅(또는 DHCP) 실패

증상
게스트 가상 머신이 성공적으로 시작되지만 DHCP에서 IP 주소를 가져오거나 PXE 프로토콜을 사용하여 부팅할 수 없습니다. 이 오류의 일반적인 원인은 브리지에 긴 지연 시간을 설정하고 iptables 패키지 및 커널에서 체크섬 조작을 지원하지 않는 경우의 두 가지 일반적인 원인이 있습니다.
브리지의 긴 전달 지연 시간
조사
이는 이 오류의 가장 일반적인 원인입니다. 게스트 네트워크 인터페이스가 STP(Spanning Tree Protocol)가 활성화된 브릿지 장치에 연결되어 있고 장기적인 지연이 설정된 브릿지 장치에 연결된 경우 브릿지는 게스트 가상 머신의 네트워크 패킷을 브릿지로 전달하지 않습니다. 브리지는 게스트가 브릿지에 연결된 이후 해당 수의 전달 지연 시간 간격이 경과한 때까지 브리지에서 네트워크 패킷을 브릿지로 전달하지 않습니다. 이 지연을 사용하면 브리지 시간이 인터페이스에서 트래픽을 감시하고 뒤에 있는 MAC 주소를 확인하고 네트워크 토폴로지에서 전달 루프를 방지할 수 있습니다.
전달 지연이 게스트 PXE 또는 DHCP 클라이언트의 시간 초과보다 길면 클라이언트의 작업이 실패하고 게스트가 부팅하지 못하거나 (DHCP의 경우 DHCP의 경우) IP 주소를 얻지 못합니다.
해결책
이 경우 브리지의 전달 지연을 0으로 변경합니다. 브리지에서 STP를 비활성화하거나 둘 다 비활성화합니다.
참고
이 솔루션은 브리지를 여러 네트워크를 연결하는 데 사용되지 않지만 여러 끝점을 단일 네트워크에 연결하는 데만 적용됩니다( libvirt에서 사용하는 브리지의 가장 일반적인 사용 사례).
게스트에 libvirt-managed 가상 네트워크에 연결된 인터페이스가 있는 경우 네트워크의 정의를 편집한 후 다시 시작합니다. 예를 들어 다음 명령을 사용하여 기본 네트워크를 편집합니다.
# virsh net-edit default
<bridge> 요소에 다음 속성을 추가합니다.
<name_of_bridge='virbr0' delay='0' stp='on'/>
참고
delay='0'stp='on' 은 가상 네트워크의 기본 설정이므로 이 단계는 기본값에서 구성을 수정한 경우에만 필요합니다.
게스트 인터페이스가 libvirt 외부에서 구성된 호스트 브리지에 연결된 경우 지연 설정을 변경합니다.
/etc/sysconfig/network-scripts/ifcfg-name_of_bridge 파일에서 다음 행을 추가하거나 편집하여 STP를 0초 지연으로 설정합니다.
STP=on DELAY=0
구성 파일을 변경한 후 브리지 장치를 다시 시작합니다.
/usr/sbin/ifdown name_of_bridge
/usr/sbin/ifup name_of_bridge
참고
name_of_bridge 가 네트워크의 루트 브릿지가 아닌 경우 해당 브리지의 지연이 결국 root 브리지에 대해 구성된 지연 시간으로 재설정됩니다. 이 문제가 발생하지 않도록 하려면 name_of_bridge 에서 STP를 비활성화합니다.
iptables 패키지 및 커널에서 체크섬 조작 규칙을 지원하지 않습니다.
조사
이 메시지는 다음 조건 중 4개 모두 충족되는 경우에만 문제가 됩니다.
  • 게스트는 virtio 네트워크 장치를 사용하고 있습니다.
    이렇게 하면 구성 파일에 다음이 포함됩니다. model type='virtio'
  • 호스트에는 vhost-net 모듈이 로드되었습니다.
    ls /dev/vhost-net 에서 빈 결과를 반환하지 않는 경우 해당합니다.
  • 게스트는 호스트에서 직접 실행 중인 DHCP 서버에서 IP 주소를 가져오려고 합니다.
  • 호스트의 iptables 버전은 1.4.10 미만입니다.
    iptables 1.4.10은 libxt_CHECKSUM 확장을 추가하는 첫 번째 버전입니다. libvirtd 로그에 다음 메시지가 표시되는 경우입니다.
    warning: Could not add rule to fixup DHCP response checksums on network default
    warning: May need to update iptables package and kernel to support CHECKSUM rule.
    중요
    이 목록에 있는 다른 세 가지 조건 모두 true인 경우를 제외하고 위의 경고 메시지는 무시될 수 있으며 다른 문제의 표시가 아닙니다.
이러한 조건이 발생하면 호스트에서 게스트로 전송된 UDP 패킷의 계산되지 않은 체크섬이 있습니다. 이로 인해 호스트의 UDP 패킷이 게스트의 네트워크 스택에 유효하지 않은 것처럼 보일 수 있습니다.
해결책
이 문제를 해결하려면 위의 네 가지 점을 무효화합니다. 가장 좋은 해결책은 호스트 iptables 및 커널을 iptables-1.4.10 이상으로 업데이트하는 것입니다. 그렇지 않으면 가장 구체적인 수정 사항은 이 특정 게스트에 대해 vhost-net 드라이버를 비활성화하는 것입니다. 이 작업을 수행하려면 다음 명령을 사용하여 게스트 구성을 편집합니다.
virsh edit name_of_guest
<driver> 행을 변경 또는 <interface> 섹션에 추가합니다.
<interface type='network'>
  <model type='virtio'/>
  <driver name='qemu'/>
  ...
</interface>
변경 사항을 저장하고 게스트를 종료한 다음 다시 시작합니다.
이 문제가 여전히 해결되지 않으면 firewalld 와 기본 libvirt 네트워크 간의 충돌로 인해 문제가 발생할 수 있습니다.
이 문제를 해결하려면 service firewalld stop 명령을 사용하여 firewalld를 중지한 다음 service libvirtd restart 명령을 사용하여 libvirt 를 다시 시작합니다.
참고
또한 /etc/sysconfig/network-scripts/ifcfg-network_name 파일이 올바르게 구성된 경우 게스트에서 dhclient 명령을 게스트에서 root로 사용하여 IP 주소를 가져올 수 있습니다.