KVM 설치

1
2
sudo apt install -y qemu-kvm virt-manager \
    libvirt-daemon-system virtinst libvirt-clients bridge-utils

이후 일반 사용자 권한으로 VM을 관리할 수 있도록 다음과 같이 사용자 그룹을 추가해준다.

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

가상머신 생성

GUI 환경이라면 virt-install 대신 Virtual Machine Manager 사용을 권장한다.

1
2
3
4
5
6
7
8
9
10
# https://manpages.debian.org/testing/virtinst/virt-install.1.en.html

sudo virt-install \
    --name vm-server-1 \
    --ram 2048 \
    --vcpus 2 \
    --disk size=64 \
    --network bridge=virbr0,model=virtio \
    --graphics none \
    --location /var/lib/libvirt/images/ubuntu-22.04.2-desktop-amd64.iso

.iso 파일은 /var/lib/libvird/ 하위에 두는 것을 권장한다. 참고자료: virt-install cannot use ISO file as location

  • --name: 가상머신 이름. vm-server-1로 설정
  • --ram: 메모리 용량(MB), 2기가 할당
  • --vcpus: 가상 CPU 코어 수, 2코어 할당
  • --disk: 디스크 설정(GB), 64G 할당
  • --network: 네트워크 설정, 네트워크 브릿지 virbr0 인터페이스로 설정
  • --graphics: 그래픽(디스플레이) 관련 설정, 터미널 환경에서 작업하므로 none
  • --location: OS 이미지 파일 위치 혹은 원격지 URI

VM 생성 시 virsh를 활용해 VM을 관리할 수 있으며 virsh vm관리 명령어들은 해당 포스팅에서 다루진 않는다.
(나중에 따로 정리할 생각이다.)

포트포워딩

외부에서 VM에 SSH로 접속하기 위해 22번 포트를 포워딩 하려고한다.

시스템 정보는 다음과 같이 구성되어 있으며

  • 호스트 IP: 192.168.1.2
  • VM IP:192.168.122.245 iptables를 활용하여 포트포워딩 하는 것이 일반적이지만, 개인적으로는 Nginx를 사용하는것을 더 선호한다. (nginx 설정 만지는게 더 직관적인듯)
1
2
3
4
5
6
7
8
9
stream {
    upstream vm1-ssh {
        server 192.168.122.245:22;
    }
    server {
        listen 4000;
        proxy_pass vm1-ssh;
    }
}

http블록에 포함되지 않도록 유의하자 (/etc/nginx/conf.d/에 작성 금지)