본문 바로가기

KVM Hypervisor Type 1.5에서 VM 관리

KVM[HyperVisor Type1] 설치

Ubuntu Server 22.04 CLI 환경

KVM 지원 여부 확인

grep -Eoc '(vmx|svm)' /proc/cpuinfo

출력 결과가 0이 아니면 KVM을 지원한다.

KVM을 지원하지 않는 경우, BIOS 설정 문제일 가능성도 높다.

HP 기준 해결 방법

Security > System Security > Virtualization Technology (VTx)Enabled로 설정

패키지 설치

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst
패키지명 설명
qemu-kvm KVM 하이퍼바이저용 하드웨어 에뮬레이션
libvirt-daemon-system libvirt 데몬 시스템 서비스 구성
libvirt-clients 가상화 플랫폼 관리 소프트웨어
bridge-utils 이더넷 브리지 구성 명령 줄 도구
virtinst 가상 머신 생성 명령 줄 도구

virt-manager를 제외한 이유
CLI 환경에서만 작업하므로, virt-manager는 사용이 제한됨. 따라서 설치 대상에서 제외

설치 완료 확인

kvm 설치 확인

$ kvm --version
QEMU emulator version 6.2.0 (Debian 1:6.2+dfsg-2ubuntu6.15)
Copyright (c) 2003-2021 Fabrice Bellard and the QEMU Project developers

설치 후 추가 작업

그룹에 사용자 추가

sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

서비스 시작 및 활성화

sudo systemctl enable --now libvirtd

게스트 OS 생성

virt-install \
  --name [가상머신 이름] \
  --ram [메모리 크기] \
  --disk path=[디스크 경로],size=[디스크 크기] \
  --vcpus [CPU 수] \
  --os-type [OS 타입] \
  --os-variant [OS 버전] \
  --network bridge=virbr0 \
  --graphics none \
  --console pty,target_type=serial \
  --location '[OS 설치 이미지 경로]' \
  --extra-args 'console=ttyS0,115200n8 serial'
  • --network bridge=virbr0 : 가상 머신이 호스트 시스템의 virbr0 브리지로 연결되도록 함
  • --graphics none : CLI 환경이므로 그래픽 출력 비활성화
  • --extra-args 'console=ttyS0,115200n8 serial' : 해당 머신의 화면 정보를 시리얼 콘솔로 전달

예시

sudo virt-install \
  --name myvm \
  --vcpus 2 \
  --ram 2048 \
  --os-variant ubuntu20.04 \
  --location 'http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/' \
  --network bridge=virbr0,model=virtio \
  --graphics none \
  --extra-args='console=ttyS0,115200n8 serial'

기타 게스트 OS 관리

virsh start [가상머신 이름]      # 시작
virsh shutdown [가상머신 이름]   # 정지
virsh reboot [가상머신 이름]     # 재시작
virsh list --all                 # 게스트 상태 확인

KVM에서 VM 생성 (접속 불가 오류 해결 포함)

KVM으로 VM을 생성하면  Escape character is ^] (Ctrl + ])  이후에 진행이 안되는 문제가 발생한다.
해외 사이트에도 방안이 나와있지 않아 직접 연구하여 서술한다.

VM 생성

예시를 참고하여 VM을 생성한다. 현재 생성한 방법은 다음과 같다.

  • name : DNSserv
  • disk : 논리 디스크 경로 (LVM 파티션을 따로 생성하였음)
virt-install \
  --name DNSserv \
  --ram 2048 \
  --vcpus 2 \
  --os-variant ubuntu20.04 \
  --disk path=/dev/ubuntu-vg/kvmvol1,bus=virtio,size=10 \
  --network bridge=virbr0,model=virtio \
  --graphics none \
  --location 'http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/' \
  --extra-args 'console=ttyS0,115200n8 serial'

참고 — Logical Volume 생성

sudo vgscan                                          # Volume Group 확인
sudo vgdisplay 해당그룹                               # 여유 공간 확인
sudo lvcreate -n 새볼륨명 -L 10G 해당그룹              # 새 논리 볼륨 생성
sudo mkfs.ext4 /dev/해당그룹/새볼륨명                   # 파일 시스템 생성

설치 진행

 

Go Back 선택

 

Download installer components 선택

기본 설정

기본적인 설정을 진행한다. 설치를 위한 기본 필드이므로, 안내에 따라 진행한다.

  • Hostname
  • Ubuntu Archive 미러 도메인 설정
  • 소유주명
  • 계정명 / 계정 비밀번호 설정

설정을 마치면 다시 처음 본 창이 뜬다. Go back 선택

SSH 설정을 위한 세팅

CLI 환경에서 접속 불가한 VM 머신에 연결하도록 미리 OpenSSH Server를 구동시킨다.

 

Select and install software 선택

이후 파티션 설정PAM 설정을 진행한다.

참고 — 파티션 설정 선택지

선택지 설명
Guided - resize Virtual disk 1 (vda) and use freed space 기존 OS/데이터가 있는 디스크에서 추가 공간을 만들 때 유용. KVM 인스턴스에는 비적합
Guided - use entire disk 디스크 전체 사용
Guided - use entire disk and set up LVM 전체 디스크 사용 + LVM 설정. 추후 파티션 크기 조정·스냅샷 등 필요 시
Guided - use entire disk and set up encrypted LVM LVM + 디스크 전체 암호화
Manual 수동 파티셔닝. 파티션 크기·파일 시스템 유형·마운트 포인트 등 직접 설정

참고 — PAM(자동 업데이트) 설정 선택지

선택지 설명
No automatic updates 모든 업데이트를 수동으로 관리
Install security updates automatically 보안 업데이트만 자동 설치. 취약점에 신속 대응
Manage system with Landscape Canonical의 Landscape를 통해 웹에서 중앙 관리. 대규모 배포에 유용

 

위의 창이 뜨면 다음을 선택하여 설치한다.

  • OpenSSH server
  • Basic Ubuntu server

이후 GRUB 부트 로더를 설치한다.

설치 완료

 

에러 발생

막상 설치가 완료되어도 Escape character is ^] (Ctrl + ]) 에서 아무 반응이 없을 것이다.

에러 해결

VM의 IP 확인

연결된 VM의 IP를 확인한다. 여기서는 192.168.122.115이다.

SSH 접속

접속이 된다. 그러나 이는 임시방편이므로, virsh console이 작동되게 해야 한다.

grub 설정 편집

nano /etc/default/grub

 

변경 전

변경 후

다음과 같이 변경한다.

GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0"

마무리

다음의 명령어를 순차적으로 입력한다.

update-grub
systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service

이후 쉘에서 탈출한다.

접속 시도

virsh console 머신이름

이로서 VM 생성이 완료된다.


KVM Network Bridge 설정 (VM당 개별 IP 할당)

KVM의 VM을 위해서 Bridge를 설정할 때, VM에서 Bridge 설정이 제대로 되지 않는다.
이 역시도 해외 사이트를 검색해도 정보가 나오지 않는다.

현재 네트워크 인터페이스 확인

ip a

본문에서는 eno1 인터페이스를 가정하여 서술한다.

Bridge 설정

sudo vi /etc/netplan/파일명.yaml

사용 환경

  • 라우터 : 192.168.1.1
  • IP 대역 : 192.168.1.X
  • DHCP : 192.168.1.11 ~ 199
  • VM 머신 : 192.168.1.2 ~ 192.168.1.10 범위 내에서 설정

eno1 인터페이스에 대해 bridge를 설정한다. bridge의 이름은 br0으로 설정하였다.

다만, 호스트의 고정 IP 설정을 원한다면 다음과 같이 설정한다.

sudo netplan apply

이로서 호스트의 bridge 설정이 완료된다.

VM의 bridge 연결

virsh edit VM이름

<devices> 태그 내에서 <interface> 영역을 수정한다.

기본 설정은 nat 방식으로 되어있는데, <interface><source>bridge로 변경해준다.

virsh reboot VM이름

이로서 VM의 bridge 설정이 완료된다.

VM 내에서 IP 설정

VM 내부에서도 netplan 설정을 해준다.

virsh console VM이름                      # VM 진입
sudo vi /etc/netplan/파일명.yaml           # netplan 설정

만약 DHCP로 할당받기 원한다면 dhcp4: yes로 설정한다.

sudo netplan apply

이로서 VM 내부의 bridge IP 설정이 완료된다.

버그 발생

이 상태에서 통신을 시도하면, VM이 Host와는 ping으로 통신이 원활하나 Router 및 외부와는 통신이 불가하다. 이 문제는 여러 곳에서도 보고되나 해결 방안이 제시된 곳이 없다.

leesh@lshserv:~$ arp -a
? (192.168.1.3) at 52:54:00:ee:5d:6e [ether] on virbr0
_gateway (192.168.1.1) at bc:62:ce:2a:91:8c [ether] on virbr0

Host의 bridge 할당을 확인해보았으나 문제가 없었고, 공유기 설정에서도 VM에 IP를 제대로 할당하였다.

dnsserv@dnsserv:/etc/netplan$ sudo tcpdump -i enp1s0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp1s0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:09:54.530661 STP 802.1d, Config, Flags [none], bridge-id 8000.4e:8d:53:35:f2:bf.8002, length 35
11:09:55.249151 IP 192.168.1.3.45126 > 8.8.8.8.domain: Flags [S], seq 2656147049, win 64240, ...
11:09:56.546801 STP 802.1d, Config, Flags [none], bridge-id 8000.4e:8d:53:35:f2:bf.8002, length 35
11:09:58.193223 IP 192.168.1.3.53194 > 8.8.8.8.domain: Flags [S], seq 1669409495, win 64240, ...
11:09:58.530844 STP 802.1d, Config, Flags [none], bridge-id 8000.4e:8d:53:35:f2:bf.8002, length 35

tcpdump 확인 결과, VM이 공유기에 IP 요청을 원활히 하였으나 응답이 없다. 패킷이 Host를 통해 지나가는 과정에서 Router로부터의 응답이 차단된 것으로 판단하여, Host단의 문제로 가정하고 원인을 파악했다.

버그 해결

넷필터 모듈 확인 :

lsmod | grep br_netfilter

브릿지 네트워크 트래픽 처리 모듈(br_netfilter)이 적재되어있는지 확인한다.

해당 모듈을 비활성화하고, 재부팅 시 자동 적재를 방지한다.

sudo rmmod br_netfilter
echo "blacklist br_netfilter" | sudo tee -a /etc/modprobe.d/blacklist.conf

 

참고 문헌

'인프라 > KVM(Hypervisor Type1.5)' 카테고리의 다른 글

KVM Netfilter 설정  (0) 2026.03.28
NORMAL j/k: 이동 · Enter: 열기 · /: 검색 · ?: 도움말