KVM / libvirt : 가상화 호스트에서 정적 게스트 IP 주소를 구성하는 방법


31

호스트 시스템에서 게스트의 네트워크 구성 (IP 주소, 서브넷, 게이트웨이, 브로드 캐스트 주소)을 설정하고 싶습니다. 사용 된 네트워크 설정이 bridge모드에 있습니다. 클라이언트 자체를 정적 네트워크 구성으로 구성하지 않고 호스트에서 네트워크를 구성하려면 어떻게해야합니까?

내가 실행하면 :

virsh edit vm1

거기입니다 <network>뿐만 아니라 블록은 내가 거기에서 네트워크 인터페이스를 구성하려고했으나 불행하게도 게스트는 VM 그것을 사용하지 않는 것와 (단지 자동 네트워크 구성을 사용하기 때문에)와 같은 네트워크에 오프라인 ... 고객 VM은 Linux 및 Windows 기반입니다. 도움을 주시면 감사하겠습니다.


2
예약 된 DHCP 임대를 통해 IP 주소를 전달하는 것이 옵션이 아닙니까?
MadHatter는 Monica

흠.하지만 VM # 1을 IP # 1에, VM # 2를 IP # 2 등에 할당하고 싶습니다 (임대에서 임의의 IP를 부여하는 대신). DHCP를 사용하여 이와 같이 구성 할 수 있다고 생각하십니까? 그렇다면이 방법을 사용해 보시기 바랍니다.
베타

2
나는 "와 같은 뭔가 질문 이름을 변경하는 것이 좋습니다 : 어떻게 가상화 호스트에 고정 게스트 IP 주소를 구성하는 KVM / libvirt를 "
닐스 Toedtmann

1
@NilsToedtmann에 동의하면 기본 OS처럼 사용되는 하이퍼 바이저에 대한 추가 정보가 도움이 될 것입니다. 가상화 된 시스템의 네트워킹 구성에 도움이되는 추가 OS 기반 관리 도구가있을 수 있습니다. YaST를 사용할 수있는 SUSE 기반 운영 체제와 함께 사용하기위한 KVMLXC에 대한 훌륭한 안내서 가 있습니다.
Matt

답변:


52

게스트 내부에서 구성을 수행하지 않으려는 경우 유일한 옵션은 고정 IP 주소를 전달하는 DHCP 서버입니다. bridge모드 를 사용한다면 아마도 외부 DHCP 서버 일 것입니다. 정적 임대 서비스를 제공하는 방법은 설명서를 참조하십시오.

그러나 적어도 정방향 모드에서는 nat또는을 route사용하면 libvirt의 내장 기능을 사용할 수 있습니다 dnsmasqd(최신 버전의 libvirtd는 dnsmasq의 "dhcp-hostsfile"옵션을 지원합니다). 방법은 다음과 같습니다.

먼저 고정 IP 주소를 할당하려는 VM의 MAC 주소를 찾으십시오.

virsh  dumpxml  $VM_NAME | grep 'mac address'

그런 다음 네트워크를 편집하십시오

virsh  net-list
virsh  net-edit  $NETWORK_NAME    # Probably "default"

<dhcp>섹션을 찾고 동적 범위를 제한하고 VM의 호스트 항목을 추가하십시오.

<dhcp>
  <range start='192.168.122.100' end='192.168.122.254'/>
  <host mac='52:54:00:6c:3c:01' name='vm1' ip='192.168.122.11'/>
  <host mac='52:54:00:6c:3c:02' name='vm2' ip='192.168.122.12'/>
  <host mac='52:54:00:6c:3c:03' name='vm3' ip='192.168.122.12'/>
</dhcp>

그런 다음 VM을 부팅 (또는, 예를 자사의 DHCP 클라이언트를 다시 시작합니다 ifdown eth0; ifup eth0)


업데이트 : "virsh net-edit"후에 변경 사항이 적용되지 않을 수 있다는보고가 있습니다. 이 경우 편집 후 다음을 시도하십시오.

virsh  net-destroy  $NETWORK_NAME  
virsh  net-start    $NETWORK_NAME  

... VM의 DHCP 클라이언트를 다시 시작하십시오.

그래도 문제가 해결되지 않으면

  • libvirtd 서비스를 중지하십시오
  • 아직 살아있는 dnsmasq 프로세스를 종료하십시오.
  • libvirtd 서비스를 시작하십시오

참고 : KVM 호스트가 알 수없는 OS 및 알 수없는 구성을 가진 VM이 특정 네트워크 구성을 사용하도록 할 수있는 방법은 없습니다. 그러나 VM이 DHCP와 같은 특정 네트워크 구성 프로토콜을 사용한다는 것을 알고 있다면 사용할 수 있습니다. 이것이이 게시물의 가정입니다.

일부 OS (예 : 일부 Linux 배포판)도 네트워크 구성 옵션을 게스트로 전달할 수 있습니다 (예 : 커널 명령 줄). 그러나 이것은 OS에 매우 다르며 DHCP 방법보다 이점이 없습니다.


고마워, 내가 그것을 시도하고 그 방식으로 작동하는지 다시보고합니다.
베타

시원한. 그러나 네트워크 모드를 변경해야합니다.
Nils Toedtmann

1
비슷한 요구가 있기 때문에 여기에 왔으며 적어도 유스 케이스에서 DHCP를 사용하는 것보다 이점을 설명 할 수 있다고 생각합니다. 상황은 분명히 드문 일입니다. 몇 주마다 두 네트워크 사이를왔다 갔다하는 서버가 있습니다. 약 10 명입니다. 네트워크 중 하나에는 DHCP 서버가 있는데 (나를 위해 제어하기 어려운) 다른 네트워크에는 없습니다. 그것은 DHCP를 사용하여 거의 배제됩니다. 호스트의 IP를 변경하고 그에 따라 게스트 IP 주소 등을 자동으로 업데이트하는 방법을 찾고 있습니다 (저는 자동화를 위해 chef를 사용하고 있으므로 일단 IP 주소가 설정되면 가겠습니다).
Kevin Keane

2
네트워크를 파괴하고 다시 시작하지 않으면 변경 사항이 적용되지 않음을 확인할 수 있습니다. 또한 이상하게도 종료하고 VM을 시작해야한다는 것을 알았습니다. 재부팅 만하면 인터페이스가 고장난 상태가됩니다.
orodbhen

네트워크를 다시 시작해도 DHCP 임대가 갱신되지 않습니다. 이를 위해 / var / lib / libvirtd / dnsmasq에서 네트워크 상태 파일을 삭제해야합니다.
orodbhen


3

프로세스에 신호를 dnsmasq보내서 새로 추가 된 IP-MAC 매핑을 '볼' 수있었습니다 . 그 후에 새 게스트를 재부팅하면 다시 시작할 필요없이 올바른 IP가 할당 될 수있었습니다.-HUPdnsmasqlibvirtd 하면 네트워크 하거나 있었습니다.

공식 libvirt 문서 ( http://wiki.libvirt.org/page/Networking#Applying_modifications_to_the_network )는 전체 프로세스를 자동화하는이 비공식적 인 Perl 스크립트를 언급합니다 : https://gist.github.com/bendiken/032ea1bddb9ffafe98b4

hostsfile이 이미 업데이트되었고 -HUP 신호를 보내는 것으로 충분하다는 것을 알았 기 때문에이 스크립트를 직접 시도하지 않았습니다.

호스트는 데비안 7.8을 실행하고 있으며 패키지 버전은 다음과 같습니다.

  • kvm 1 : 1.1.2 + dfsg-6 + deb7u8
  • qemu-kvm 1.1.2 + dfsg-6 + deb7u8
  • libvirt-bin 0.9.12.3-1 + deb7u1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.