운영체제/RHEL&CENTOS

[Linux] KVM(for Kernel-based Virtual Machine) (3) - Network 추가 하기

louky 2019. 6. 26. 10:11
반응형

KVM내에서 가상머신 끼리만 네트워크를 추가 하고자 할 경우에 대한 설정 방법이다. 

 

설정하기에 앞서 virsh 커맨더 내 네트워크  커맨더는 아래와 같다. 

Usage) virsh [option] [command]

net-autostart 네트워크 자동 시작
net-create  XML 파일에서 네트워크 생성 및 네트워크 활성화 시킴
net-define define an inactive persistent virtual network or modify an existing persistent one from an XML file, 네트워크 목록에만 추가하고 활성화 하지 않음
net-destroy  네트워크 삭제 (중지)
net-dhcp-leases print lease info for a given network
net-dumpxml XML에 있는 네트워크 정보
net-edit  네트워크를 위한 XML 설정을 편집
net-event  Network Events
net-info  네트워크 정보
net-list 네트워크 목록
net-name  네트워크 UUID를 네트워크 이름으로 변환
net-start (기존에 정의된) 비활성화 네트워크 시작
net-undefine undefine a persistent network
net-update  기존 네트워크 설정의 일부분을 업데이트합니다
net-uuid 네트워크 이름을 네트워크 UUID로 변환

 

  • 등록할 XML파일 생성 

 

먼저 KVM내 네트워크를 생성 하기 위한 파일을 만들어야 하는데 파일 관리를 위해 Directory를 생성한다. 

[root@cronus kvmimg]# mkdir kvm_net
[root@cronus kvmimg]# cd kvm_net/
[root@cronus kvm_net]# pwd
/var/kvmimg/kvm_net

새로 생성할 네트워크 인터페이스는 virbr1이다. 

 아직 생성전이기에 네트워크 인터페이스는 보이지 않는다. 

[root@cronus kvm_net]# ifconfig virbr1
virbr1: error fetching interface information: Device not found

 

KVM에서 추가할 네트워크 xml파일을 생성한다. 

파일 생성은 아래 방법 중 하나를 사용한다. 

 

방법1) IP를 미지정하기

[root@cronus kvm_net]# cat internal_virbr1.xml
<network>
  <name>internal</name>
  <bridge name='virbr1' stp='on' delay='0'/>
</network>

 

방법2) IP를 지정하기

[root@cronus kvm_net]# cat internal_virbr1.xml
<network>
  <name>internal</name>
  <bridge name='virbr1' stp='on' delay='0'/>
  <ip address='10.255.255.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='10.255.255.2' end='10.255.255.254'/>
    </dhcp>
  </ip>
</network>

 

생성된 네트워크 파일을 KVM 네트워크에 반영하는데 반영 방법이 영구적으로 반영하는 방법이 있는가 반면에 일시적으로 등록하는 방법이 있다. 

 

1.  XML파일을 생성하여 영구적으로 네트워크 생성/추가 

이 방법은 해당 네트워크를 종료해도 목록에서 삭제 되지 않는다.  

 

먼저 등록된 네트워크를 확인한다. 

[root@cronus kvm_net]# virsh net-list --all
 이름               상태     자동 시작 Persistent
----------------------------------------------------------
 default              활성화  예           예

 

* Filed 정의

filed name  정의
이름 (name) 정의된 네트워크 이름 (interface이름 아니다.)
상태 활성화/비활성화, 즉 동작 상태 표시
 자동시작  KVM동작시 자동으로 실행 여부 
Persistent 영구 등록인지 일시적인지 여부이며, No(아니오) 일 경우 net-destroy할 경우 없어진다. 

 

 생성한 XML파일을 목록에 업로드 한다. 

[root@cronus kvm_net]# virsh net-define internal_virbr1.xml
internal1에서 정의된 internal_virbr1.xml 네트워크


[root@cronus kvm_net]# virsh net-list           ## 비활성화된 네트워크 목록은 안보인다. --all옵션을 추가해야 확인이 가능하다.
 이름               상태     자동 시작 Persistent
----------------------------------------------------------
 default              활성화  예           예


[root@cronus kvm_net]# virsh net-list --all
 이름               상태     자동 시작 Persistent
----------------------------------------------------------
 default              활성화  예           예
 internal1            비활성화 아니요     예

[root@cronus kvm_net]#

 

등록은 했지만 해당 네트워크를 시작하지 않아 아직 Hostmachine내 인터페이스에는 반영되지 않는다. 

[root@cronus kvm_net]# ifconfig virbr1
virbr1: error fetching interface information: Device not found

 

추가한 네트워크를 시작한다. 

 

<해당 인터페이스에 IP를 미지정 했을경우>

[root@cronus kvm_net]# virsh net-start internal2
internal2 네트워크 시작

[root@cronus kvm_net]# ifconfig virbr2           ## 생성 여부 확인
virbr2: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 52:54:00:b7:10:ce  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

<해당 인터페이스에 IP를 지정했을 경우>

[root@cronus kvm_net]# virsh net-start internal1
internal1 네트워크 시작

[root@cronus kvm_net]# ifconfig virbr1           ## 생성 여부 확인
virbr1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 10.255.255.1  netmask 255.255.255.0  broadcast 10.255.255.255
        ether 52:54:00:cb:af:2d  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
**  시작한 네트워크를 종료 하고자할 경우에는 아래와 같이 실행한다. 
[root@cronus kvm_net]# virsh net-destroy internal1 
internal1 네트워크 강제 종료
**  추가한 네트워크를 목록에서 삭제하고자 할 경우 
[root@cronus kvm_net]# virsh net-list --all
 이름               상태     자동 시작 Persistent
----------------------------------------------------------
 default              활성화  예           예
 internal1            비활성화 아니요     예

[root@cronus kvm_net]# virsh net-undefine internal1
internal1 네트워크가 정의되지 않음

[root@cronus kvm_net]# virsh net-list --all
 이름               상태     자동 시작 Persistent
----------------------------------------------------------
 default              활성화  예           예

 

 

2.  XML파일을 생성하여 일시적으로 네트워크 생성/추가 

이 방법은 해당 네트워크를 종료해도 목록에서 삭제 된며, Autostart설정을 할수 없다. 

[root@cronus kvm_net]# virsh net-create internal_virbr3.xml
internal3 에서 생성된 internal_virbr3.xml 네트워크

[root@cronus kvm_net]# virsh net-list
 이름               상태     자동 시작 Persistent
----------------------------------------------------------
 default              활성화  예           예
 internal1            활성화  예           예
 internal3            활성화  아니요     아니요

net-autostart 를 설정하려 할 경우 설정되지 않는다. 

[root@cronus kvm_net]# virsh net-autostart internal3
오류:자동 시작으로 internal3 네트워크를 표시하기 실패
오류:요청한 동작이 바르지 않습니다: 임시 네트워크에 대해 autostart를 설정할 수 없음

주의  :  영구적으로 등록 또는 net-autostart 설정하려면  종료/삭제 후 net-define을 다시 생성해야 한다. 

[root@cronus kvm_net]# virsh net-define internal_virbr3.xml
오류:internal_virbr3.xml에서 네트워크 정의하기 실패
오류:작업 실패: uuid internal3를 갖는 네트워크 '9ff7a1af-9b01-499a-a5be-6361b29ca91a'가 이미 존재합니다

 

 

이미 생성된 KVM VM에 네트워크 추가 하기 

 

반응형