1. 개요
- KVM 환경에서 NAT 네트워크를 생성하고 VM에 할당하는 방법을 설명합니다.
- CLI(
virsh
)와 GUI(virt-manager
) 모두를 활용한 방법을 다룹니다.
2. 버전
- Rocky Linux 9.5
3. 설명
3-1. NAT (Network Address Translation)란?
- NAT(Network Address Translation)는 내부 네트워크의 IP 주소를 외부 네트워크와 통신할 때 변환해주는 기술입니다.
- 사설 네트워크(Private Network)에 속한 서버나 VM이 외부 네트워크(인터넷 등)와 통신할 수 있도록 도와줍니다.
3-2. NAT의 종류
- NAT는 사용 목적에 따라 여러 형태로 나뉩니다.
- KVM에서는 주로 출발지 NAT(SNAT) 형태가 기본으로 적용됩니다.
NAT 종류 | 설명 | KVM에서 사용 여부 |
---|---|---|
SNAT (출발지 NAT) | 내부에서 외부로 나갈 때 출발지 IP를 변환 | ✅ 기본 NAT 네트워크 |
DNAT (목적지 NAT) | 외부에서 내부로 들어올 때 목적지 IP를 변환 | ❌ 추가 설정 필요 |
PAT (포트 주소 변환) | 하나의 공용 IP에 여러 내부 포트를 매핑 | ✅ KVM NAT 내부적으로 사용 |
Full NAT | 출발지와 목적지 IP 모두 변환 | ❌ 기본에는 없음 |
4. NAT 네트워크 생성
4-1. NAT 네트워크 XML 파일 생성
# vim nat-net.xml
설정 예시:
<network> <name>nat-net</name> <forward mode='nat'/> <bridge name='virbr1' stp='on' delay='0'/> <ip address='192.168.100.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.100.100' end='192.168.100.254'/> </dhcp> </ip> </network>
항목 | 설정 값 | 설명 |
---|---|---|
<name> | nat-net | 네트워크 이름 |
<forward mode> | nat | NAT 방식으로 외부 통신 지원 |
<bridge name> | virbr1 | 가상 브리지 이름 |
stp | on | 브리지 STP(스패닝 트리) 활성화 |
delay | 0 | STP 딜레이 시간 |
<ip address> | 192.168.100.1 | 브리지 인터페이스 IP |
netmask | 255.255.255.0 | 서브넷 마스크 |
<dhcp range start> | 192.168.100.100 | DHCP 시작 IP |
<dhcp range end> | 192.168.100.254 | DHCP 끝 IP |
4-2. NAT 네트워크 생성
# virsh net-define nat-net.xml
4-3. NAT 네트워크 생성 확인
# virsh net-list --all
출력 예시:
Name State Autostart Persistent ---------------------------------------------- default active yes yes nat-net inactive no yes
4-4. NAT 네트워크 시작 및 확인
# virsh net-start nat-net
# virsh net-list --all
출력 예시:
Name State Autostart Persistent -------------------------------------------- default active yes yes nat-net active no yes
4-5. NAT 네트워크 자동 시작 설정 및 확인
# virsh net-autostart nat-net
# virsh net-list --all
출력 예시:
Name State Autostart Persistent -------------------------------------------- default active yes yes nat-net active yes yes
4-6. NAT Bridge 인터페이스 확인
# ifconfig virbr1
출력 예시:
virbr1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.100.1 netmask 255.255.255.0 broadcast 192.168.100.255 ether 52:54:00:44:30:1b 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
5. VM 설정
5-1. GUI(virt-manager)
5-1-1. Virt-manager 실행
# virt-manager
5-1-2. NAT 네트워크 추가

- VM 선택 → Open 클릭

- 전구 아이콘

- Add Hardware

- Network →
nat-net
선택 → Finish

- 생성 확인
5-1-3. Default NAT 삭제

- NIC(Default NAT) → Remove

- 삭제 확인
5-1-4. NAT 네트워크 확인
# ifconfig
출력 예시:
enp7s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.100.213 netmask 255.255.255.0 broadcast 192.168.100.255 inet6 fe80::32ce:f8bc:aab5:4575 prefixlen 64 scopeid 0x20<link> ether 52:54:00:99:a5:b3 txqueuelen 1000 (Ethernet) RX packets 71 bytes 5994 (5.8 KiB) RX errors 0 dropped 34 overruns 0 frame 0 TX packets 45 bytes 4434 (4.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# ping -c 3 google.com
5-2. CLI(virsh)
5-2-1. VM 확인
# virsh list --all
출력 예시:
Id Name State ----------------------------- - rocky9 shut off - rocky9-cli shut off
5-2-2. 인터페이스 추가
# virsh attach-interface --domain rocky9-cli --type network --source nat-net --model virtio --config
5-2-3. 인터페이스 확인
# virsh domiflist rocky9-cli
출력 예시:
Interface Type Source Model MAC ------------------------------------------------------------- - network default virtio 52:54:00:3b:03:32 - network nat-net virtio 52:54:00:52:76:7d
5-2-4. Default NAT 삭제
# virsh detach-interface --domain rocky9-cli --type network --mac 52:54:00:3b:03:32 --config
5-2-5. NAT 네트워크 확인
# virsh domiflist rocky9-cli
출력 예시:
Interface Type Source Model MAC ------------------------------------------------------------- - network nat-net virtio 52:54:00:52:76:7d
5-2-6. VM 부팅 및 NAT 네트워크 접속 확인
# virsh start rocky9-cli
# virsh domifaddr rocky9-cli
출력 예시:
Name MAC address Protocol Address ------------------------------------------------------------------------------- vnet1 52:54:00:52:76:7d ipv4 192.168.100.221/24
# ssh root@192.168.100.221
# ifconfig
출력 예시:
enp7s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.100.221 netmask 255.255.255.0 broadcast 192.168.100.255 inet6 fe80::c08e:726c:5a:6d80 prefixlen 64 scopeid 0x20<link> ether 52:54:00:52:76:7d txqueuelen 1000 (Ethernet) RX packets 682 bytes 373306 (364.5 KiB) RX errors 0 dropped 66 overruns 0 frame 0 TX packets 415 bytes 60106 (58.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# ping -c 3 google.com
6. NAT 네트워크 생성
6-1. 네트워크 확인
# virsh net-list --all
출력 예시:
Name State Autostart Persistent -------------------------------------------- default active yes yes nat-net active yes yes
6-2. Default 네트워크 자동 시작 비활성화
# virsh net-autostart default --disable
6-3. Default 네트워크 자동 시작 비활성화 확인
# virsh net-list --all
출력 예시:
Name State Autostart Persistent -------------------------------------------- default active no yes nat-net active yes yes
6-4. Default 네트워크 종료
# virsh net-destroy default
6-5. Default 네트워크 종료 확인
# virsh net-list --all
출력 예시:
Name State Autostart Persistent ---------------------------------------------- default inactive no yes nat-net active yes yes
6-6. Default 네트워크 삭제
# virsh net-undefine default
6-7. Default 네트워크 삭제 확인
# virsh net-list --all
출력 예시:
Name State Autostart Persistent -------------------------------------------- nat-net active yes yes