[멋쟁이사자처럼부트캠프] 캥거루 주머니는 아늑할까?

[멋쟁이사자처럼부트캠프] 캥거루 주머니는 아늑할까?

오늘字

컴퓨터 안에 컴퓨터을 깔수 있다는 사실을 아는가? (진짜 모름)

캥거루 주머니 안에 아기 캥거루처럼 하나의 물리 PC안에서 여러 개의 OS를 독립적으로 구동할 수 있는 Virtual Machine을 정리해봅시다.

VMHypervisor

가상 머신을 생성하고 관리해주는 소프트웨어를 하이퍼바이저Hypervisor라고 부릅니다. 하이퍼바이저는 크게 두 가지 구동 방식으로 나뉩니다.

  • Type-2 Hosted : 기존 OS 위에서 애플리케이션 형태로 실행됩니다.
  • Type-1 Bare-Metal/Low-Layer : 하드웨어 바로 위에서 OS 없이 직접 실행됩니다.

일단 대표적으로 Type-2에는 버추얼박스, vmware 등이 있지만 저는 압도적인 성능을 좋아하는 사람이라 등 law layer의 성능 짱짱한 Type-1hyper-v, QEMU/KVM등을 좋아합니다.

그러므로 저는 QEMU/KVMGUI툴인 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 설정 시 입력해야 하는 표준 네트워크 정보는 다음과 같습니다.

항목설정값 예시상세 설명
Address192.168.122.10본 Ubuntu 가상 머신이 사용할 고유한 사설 IP 주소
Gateway192.168.122.1

외부 네트워크로 나가는 출입구입니다.


⚠️ KVM 가상 브릿지(virbr0)의 기본 게이트웨이 IP는 .1로 끝납니다.

DNS8.8.8.8도메인 이름을 IP 주소로 변환해 주는 구글의 public DNS 서버
Netmask24255.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 등] 개인키 다운로드 및 접속 세팅

  1. virt-manager 내부 가상 머신의 SFTP 기능이나 파일 전송 도구를 이용해 kvm_user1_key.pem 개인키 파일을 호스트 PC로 가져옵니다.
  2. 접속 툴(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]

(완)