[멋쟁이사자처럼부트캠프] 캥거루 주머니는 아늑할까?
오늘字
컴퓨터 안에 컴퓨터을 깔수 있다는 사실을 아는가? (진짜 모름)

캥거루 주머니 안에 아기 캥거루처럼 하나의 물리 PC안에서 여러 개의 OS를 독립적으로 구동할 수 있는 Virtual Machine을 정리해봅시다.
VM과 Hypervisor
가상 머신을 생성하고 관리해주는 소프트웨어를 하이퍼바이저Hypervisor라고 부릅니다. 하이퍼바이저는 크게 두 가지 구동 방식으로 나뉩니다.
- Type-2
Hosted: 기존 OS 위에서 애플리케이션 형태로 실행됩니다. - Type-1
Bare-Metal/Low-Layer: 하드웨어 바로 위에서 OS 없이 직접 실행됩니다.
일단 대표적으로 Type-2에는 버추얼박스, vmware 등이 있지만 저는 압도적인 성능을 좋아하는 사람이라 등 law layer의 성능 짱짱한 Type-1의 hyper-v, QEMU/KVM등을 좋아합니다.

그러므로 저는 QEMU/KVM의 GUI툴인 virt-manager을 사용하겠습니다.
VM 만드는 법
- 연결 확인:
QEMU/KVM호스트에 자동으로 '연결됨(Connected)' 상태인지 확인합니다. - 새 VM 생성: 상단 메뉴의 모니터 모양 아이콘(New Virtual Machine)을 클릭합니다.
- 미디어 선택:
Local install media (ISO image or CDROM)를 선택하고, 미리 다운로드해 둔 Ubuntu 등의.iso파일 경로를 지정합니다. - 자원 할당: 메모리(RAM)와 CPU 코어 수를 원하는 만큼 할당합니다.
- 디스크 크기 지정: 가상 머신이 사용할 용량을 설정하고 Finish를 누르면 짜란~ 완성입니다.

KVM 네트워크 아키텍처: 왜 고정 IP가 필요할까?
가상 머신 안의 Ubuntu가 매번 켤 때마다 IP가 바뀐다면 원격 접속할 때마다 주소를 찾아야 하므로 매우 번거롭습니다. 따라서 고정 IP(Static IP) 설정은 필수입니다. virt-manager의 핵심 네트워크 구조를 살펴봅시다.
A. NAT (Network Address Translation) 방식
외부 인터넷과 통신하기 위한 기본 방식입니다. virt-manager를 설치하면 내부적으로 virbr0라는 가상 네트워크 브릿지가 생성되며, Ubuntu의 사설 IP를 호스트 PC를 거쳐 공용 IP로 변환해 줍니다.
┌──────────────────────────────────────┐
│ [Ubuntu VM] (사설 IP: 192.168.122.10)│
└──────────────────┬───────────────────┘
│
┌──────────────────▼───────────────────┐
│ [KVM 가상 브릿지: virbr0 (NAT)] │
└──────────────────┬───────────────────┘
│
┌──────────────────▼───────────────────┐
│ [리눅스 호스트 PC] │
└──────────────────┬───────────────────┘
│
┌──────────────────▼───────────────────┐
│ [공유기 / 인터넷 광대역망] │
└──────────────────────────────────────┘
B. Isolated (Host-Only) 방식
외부 인터넷과는 완전히 단절된 채, 오직 호스트 PC와 가상 머신(Ubuntu) 사이의 내부 통신만을 위해 독립된 가상 스위치를 구성하는 방식입니다. 보안 테스트 환경에 적합합니다.
C. virt-manager 전체 네트워크 구조
KVM은 기본 가상 스위치(Default)인 virbr0를 통해 192.168.122.0/24 대역을 기본으로 제공합니다.
리눅스 호스트 PC
│
├─ libvirt 가상 네트워크 영역
│ │
│ ├─ [virbr0] (Default NAT 모드) ── 192.168.122.0 대역 ── [Ubuntu vnet0 (192.168.122.10)]
│ │
│ └─ [virbr1] (Isolated 모드) ──── 192.168.100.0 대역 ── [Ubuntu vnet1]
│
└─ 호스트 본체 (192.168.122.1 가상 게이트웨이 할당)
KVM 환경 Ubuntu 고정 IP 상세 설정값
KVM(virbr0) 환경에서 Ubuntu 설정 시 입력해야 하는 표준 네트워크 정보는 다음과 같습니다.
| 항목 | 설정값 예시 | 상세 설명 |
| Address | 192.168.122.10 | 본 Ubuntu 가상 머신이 사용할 고유한 사설 IP 주소 |
| Gateway | 192.168.122.1 | 외부 네트워크로 나가는 출입구입니다. ⚠️ KVM 가상 브릿지(virbr0)의 기본 게이트웨이 IP는 |
| DNS | 8.8.8.8 | 도메인 이름을 IP 주소로 변환해 주는 구글의 public DNS 서버 |
| Netmask | 24 | 255.255.255.0과 동일하며, 동일 네트워크 범위를 판별합니다. |
💡 CIDR 표기법 한눈에 이해하기 (192.168.122.10/24)
- 앞의 24비트(
192.168.122.)는 네트워크 주소이고, 나머지(10)는 호스트 주소입니다. - 전체 IP 범위:
192.168.122.0~192.168.122.255 - 사용 불가 IP (-2개):
192.168.122.0(네트워크 자체 주소),192.168.122.255(브로드캐스트 주소) - 실제 할당 가능 범위:
192.168.122.1~192.168.122.254(단,.1은 게이트웨이가 선점)
리눅스(Ubuntu) 기초 명령어 및 환경 설정
가상 머신 설치 직후 터미널 환경 최적화와 원격 접속을 위한 필수 명령어입니다.
A. 시스템 패키지 업데이트 및 업그레이드
Bash
sudo apt update # 설치 가능한 패키지 리스트 최신화
sudo apt full-upgrade # 패키지 업그레이드 (의존성에 따라 구버전 삭제 허용으로 최신화)
💡 apt upgrade vs full-upgrade:upgrade는 기존 패키지를 절대 지우지 않고 업데이트하지만,full-upgrade는 전체 시스템 의존성을 체크하여 불필요한 구버전을 삭제하고 완벽한 최신 상태를 만듭니다.
호스트 PC에서 KVM Ubuntu로 원격 접속하기 (SSH)
Step 1. Ubuntu 가상 머신에 SSH 서버 설치 및 구동
Bash
sudo apt install openssh-server # SSH 서버 설치
sudo systemctl status ssh # SSH 서비스 상태 확인
sudo systemctl start ssh # SSH 서비스 시작
sudo systemctl enable ssh # 재부팅 시 자동 실행 설정
Step 2. 호스트 터미널에서 최초 접속 테스트
Bash
ping 192.168.122.10 # 통신 신호 확인
ssh [email protected] # SSH 접속 시도
최초 접속 시 문구:(Yes/no/fingerprint)?라고 물어올 때yes를 입력하면 호스트의~/.ssh/known_hosts파일에 가상머신의 지문(Fingerprint)이 기록되어 다음부터는 비밀번호만 요구합니다.
비밀번호 없는 pem 키(비대칭키) 인증 구현
보안을 강화하고 자동 로그인을 위해 클라우드 환경에서 사용하는 비대칭키 방식을 적용해 봅시다.
[Ubuntu VM] 키 쌍 생성 및 권한 설정
Ubuntu 가상 머신 터미널에서 키를 생성하고 공개키를 자물쇠로 등록합니다.
Bash
# 1. 키 쌍 생성 (-q: 조용히, -N "": 패스워드 없이, -f: 파일명 지정)
ssh-keygen -q -N "" -f kvm_user1_key.pem
# 실행 후 파일 2개가 생성됩니다.
# - kvm_user1_key.pem : 개인키 (호스트 PC로 가져갈 열쇠)
# - kvm_user1_key.pem.pub : 공개키 (Ubuntu에 걸어둘 자물쇠)
# 2. 공개키 내용을 인증된 키 목록(authorized_keys)에 입력
cat kvm_user1_key.pem.pub > ~/.ssh/authorized_keys
# 3. 인증키 파일의 권한을 소유자 전용(읽기/쓰기)으로 제한 (필수!)
chmod 600 ~/.ssh/authorized_keys
[호스트 PC / MobaXterm 등] 개인키 다운로드 및 접속 세팅
virt-manager내부 가상 머신의 SFTP 기능이나 파일 전송 도구를 이용해kvm_user1_key.pem개인키 파일을 호스트 PC로 가져옵니다.- 접속 툴(MobaXterm, 우분투 터미널 등)에서 아래와 같이 개인키를 지정하여 접속합니다.
- CLI 기준:
ssh -i kvm_user1_key.pem [email protected] - MobaXterm GUI 기준:
Session->SSH->Advanced SSH settings->Use Private Key체크 후 다운로드한kvm_user1_key.pem파일 선택 후 [OK]
- CLI 기준:

(완)