리눅스 (10) - 복제 VM의 MAC 주소·고정 IP·SSH 포트 포워딩 설정하기
VirtualBox에서 Ubuntu VM을 복제하면 디스크뿐 아니라 운영체제의 네트워크 설정도 함께 복사된다. 복제 과정에서 가상 NIC의 MAC 주소를 새로 만들었다면, 기존 Netplan 설정이 원본 MAC을 기준으로 인터페이스를 찾지 않도록 함께 점검해야 한다.
이 글에서는 VirtualBox에서 새 MAC 주소를 받는 최소 설정과, 복제본의 Netplan에서 MAC 매칭과 고정 IP를 바꾸는 방법을 정리한다. 이어서 NAT Network의 호스트 포트를 복제 VM의 SSH 22번 포트로 전달해, VM을 실행하는 호스트에서 SSH로 접속한다. Tailscale과 SSH 공개키 인증은 다음 글에서 다룬다.
1. VirtualBox에서는 복제와 새 MAC 주소 생성만 확인한다
VirtualBox 관리자에서 원본 VM을 복제할 때 다음 두 항목만 확인한다.
| 항목 | 선택할 값 |
|---|---|
| Clone Type | 완전한 복제(Full Clone) |
| MAC 주소 정책 | 모든 네트워크 어댑터의 새 MAC 주소 생성 |
이렇게 복제하면 VirtualBox가 복제본의 각 가상 NIC에 새 MAC 주소를 부여한다. MAC 주소를 호스트에서 별도 명령으로 설정할 필요는 없다.
다만 VM 내부의 Netplan 파일까지 자동으로 새 MAC에 맞춰 바뀌는 것은 아니다. 기존 설정에 match.macaddress가 있다면, 복제본의 실제 MAC을 확인해 YAML을 수정하거나 해당 매칭을 제거해야 한다.
원본 VM
└─ enp0s3 MAC: 08:00:27:11:22:33
└─ Netplan의 match.macaddress도 원본 MAC
복제 VM
└─ enp0s3 MAC: 08:00:27:aa:bb:cc ← VirtualBox가 새로 생성
└─ Netplan은 원본 MAC을 그대로 참조할 수 있음
2. 복제본에서 실제 MAC 주소 확인하기
복제본을 처음 부팅할 때는 VirtualBox 콘솔에서 로그인한다. 네트워크 설정이 아직 맞지 않을 수 있으므로, SSH보다 콘솔에서 먼저 확인하는 편이 안전하다.
ip link show
예를 들어 복제본의 enp0s3에 다음 값이 보인다면 새 MAC 주소는 08:00:27:aa:bb:cc다.
link/ether 08:00:27:aa:bb:cc brd ff:ff:ff:ff:ff:ff
인터페이스 이름은 환경마다 enp0s3, enp0s8처럼 다를 수 있다. 이후 YAML의 인터페이스 이름과 MAC 주소는 반드시 이 출력에 맞춘다.
3. Netplan의 match.macaddress를 새 MAC으로 변경하기
기존 Netplan이 MAC 주소로 NIC를 찾도록 설정돼 있다면, 원본 MAC을 복제본의 새 MAC으로 바꾼다. 아래 예시에서 세 값만 자신의 환경에 맞게 바꾼다.
enp0s3:ip link show에서 확인한 인터페이스 이름08:00:27:aa:bb:cc: 복제본에서 확인한 새 MAC 주소192.168.56.12/24: 원본과 겹치지 않는 복제본 고정 IP
# /etc/netplan/00-installer-config.yaml 등의 기존 Netplan 파일
network:
version: 2
ethernets:
enp0s3:
match:
macaddress: "08:00:27:aa:bb:cc"
set-name: enp0s3
dhcp4: false
addresses:
- 192.168.56.12/24
routes:
- to: default
via: 192.168.56.1
match.macaddress는 “이 MAC 주소를 가진 NIC에 이 설정을 적용한다”는 의미다. VirtualBox가 새 MAC을 만들었는데 YAML이 원본 MAC을 계속 참조하면 인터페이스를 찾지 못해 설정이 적용되지 않을 수 있다.
match와 set-name을 지워도 되는 경우
학습 환경처럼 인터페이스 이름이 이미 enp0s3으로 안정적으로 유지된다면, MAC 매칭 없이 인터페이스 이름만으로 설정하는 편이 단순하다. 이 경우 match와 set-name을 모두 제거한다.
network:
version: 2
ethernets:
enp0s3:
dhcp4: false
addresses:
- 192.168.56.12/24
routes:
- to: default
via: 192.168.56.1
원래 설정 파일이 여러 개라면 Netplan이 병합해서 읽으므로, 특정 파일 하나만 보고 판단하지 않는다.
ls -al /etc/netplan
sudo netplan get
4. 원본과 복제본은 서로 다른 고정 IP를 사용한다
새 MAC 주소는 네트워크 카드의 식별자를 바꿔 주지만, Netplan의 고정 IP까지 자동으로 바꾸지는 않는다. 원본과 복제본을 동시에 켠다면 두 VM의 고정 IP는 반드시 달라야 한다.
| VM | MAC 주소 | 고정 IP 예시 |
|---|---|---|
| 원본 | 08:00:27:11:22:33 |
192.168.56.11/24 |
| 복제본 | 08:00:27:aa:bb:cc |
192.168.56.12/24 |
같은 네트워크에서 같은 IP를 사용하면 ARP 정보가 계속 바뀌어 연결이 간헐적으로 끊기거나, 요청이 원본과 복제본 중 엉뚱한 VM으로 전달될 수 있다.
YAML을 수정한 뒤 문법을 검증하고 적용한다. 원격 SSH가 아니라 VirtualBox 콘솔에서 작업할 때도 netplan try를 먼저 실행하면 설정이 잘못됐을 때 자동으로 되돌릴 수 있다.
sudo chmod 600 /etc/netplan/*.yaml
sudo netplan generate
sudo netplan try
sudo netplan apply
ip -br addr
ip route
netplan try에서 설정을 확인해 승인했다면 netplan apply는 생략할 수 있다. 반대로 netplan try가 실패하거나 되돌아갔다면 YAML의 인터페이스 이름, MAC 주소, IP 대역을 다시 확인한다.
5. 고정 IP로 접속할 수 있는 범위는 네트워크 모드에 따라 다르다
고정 IP를 설정했다고 해서 모든 위치에서 그 IP로 접속할 수 있는 것은 아니다. VirtualBox에서 VM NIC를 어떤 네트워크에 연결했는지에 따라 접근 경로가 달라진다.
| VirtualBox 네트워크 모드 | 고정 IP의 주된 용도 | VM을 실행하는 호스트에서 직접 ssh user@<VM_IP> |
|---|---|---|
| NAT Network | VM 간 통신·인터넷 연결 | 불가 — 호스트 포트 포워딩 필요 |
| Host-Only Adapter | 호스트와 VM 간 전용 통신 | 가능 |
| Bridged Adapter | 실제 LAN의 다른 장치와 통신 | 가능 — LAN 정책·방화벽 영향 |
현재 어댑터가 NAT Network라면 위의 고정 IP는 같은 NAT Network의 VM들이 서로 찾는 데 사용한다. VM을 실행하는 호스트에서 SSH를 열려면 포트 포워딩을 추가하거나, Host-Only 또는 Bridged 어댑터를 별도로 구성해야 한다.
6. OpenSSH를 실행하고 NAT Network 포트 포워딩 추가하기
앞에서 설정한 복제본의 고정 IP가 192.168.56.12이고, VirtualBox NAT Network 이름이 k8s-natnet이라고 가정한다. 아래 블록에서 VM 이름, NAT Network 이름, VM IP, SSH 사용자 이름, 호스트 포트만 자신의 환경에 맞게 바꾼다.
# VM을 실행하는 호스트 OS의 터미널에서 실행
VM_NAME="nfsserver"
NAT_NETWORK="k8s-natnet"
VM_IP="192.168.56.12"
VM_USER="etakyung"
HOST_SSH_PORT="2226"
먼저 복제 Ubuntu VM의 콘솔에서 OpenSSH 서버를 설치하고 시작한다. 이미 설치돼 있다면 같은 명령을 다시 실행해도 안전하다.
# 복제 Ubuntu VM 안에서 실행
sudo apt update
sudo apt install -y openssh-server
sudo systemctl enable --now ssh
sudo systemctl status ssh
UFW가 활성화된 환경이라면 VM 안에서 SSH 포트도 허용한다. UFW를 사용하지 않거나 비활성화된 환경에서는 이 단계가 필요 없다.
# 복제 Ubuntu VM 안에서 실행
sudo ufw allow 22/tcp
sudo ufw status
이제 호스트의 127.0.0.1:$HOST_SSH_PORT로 들어온 TCP 요청을 NAT Network 안의 $VM_IP:22로 전달한다. 호스트 IP를 127.0.0.1로 지정했으므로, 같은 LAN의 다른 기기에는 이 포트가 열리지 않는다.
# VM을 실행하는 호스트 OS의 터미널에서 실행
VBoxManage natnetwork modify --netname "$NAT_NETWORK" \
--port-forward-4 "ssh-$VM_NAME:tcp:127.0.0.1:$HOST_SSH_PORT:[$VM_IP]:22"
VBoxManage natnetwork list
VirtualBox GUI로 설정하려면 도구 → 네트워크 → NAT Networks → k8s-natnet → 포트 포워딩에서 다음 규칙을 추가한다. Host IP를 빈칸으로 두면 호스트의 모든 인터페이스에 열릴 수 있으므로, 호스트에서만 쓸 목적이라면 127.0.0.1을 입력한다.
| 항목 | 값 |
|---|---|
| 이름 | ssh-nfsserver 등 구분 가능한 이름 |
| 프로토콜 | TCP |
| Host IP | 127.0.0.1 |
| Host Port | 2226 등 사용하지 않는 포트 |
| Guest IP | 복제 VM의 고정 IP, 예: 192.168.56.12 |
| Guest Port | 22 |
마지막으로 VM을 실행하는 호스트 OS에서 접속을 확인한다.
# VM을 실행하는 호스트 OS의 터미널에서 실행
ssh -p "$HOST_SSH_PORT" "$VM_USER@127.0.0.1"
연결이 거부되면 VM에서 sudo systemctl status ssh와 sudo ss -tlnp | grep ':22'를 확인한다. 연결 시간이 초과되면 NAT Network 이름·Guest IP·포트 포워딩 규칙을 먼저 점검한다. 여러 복제 VM에 SSH를 열 때는 VM마다 Guest IP와 Host Port를 모두 다르게 지정한다.
7. 정리
VirtualBox 복제 시 “모든 네트워크 어댑터의 새 MAC 주소 생성”을 선택하면 복제본의 MAC 주소는 자동으로 분리된다. 하지만 Netplan의 match.macaddress는 원본 값을 그대로 가질 수 있으므로, 복제본의 실제 MAC에 맞춰 바꾸거나 불필요한 match·set-name을 제거해야 한다.
또한 원본과 복제본을 동시에 실행한다면 고정 IP를 서로 다르게 지정해야 한다. 새 MAC 생성, Netplan MAC 매칭 확인, 고정 IP 변경, OpenSSH 실행, NAT Network 포트 포워딩까지 마치면 VM을 실행하는 호스트에서 ssh -p <호스트포트> user@127.0.0.1로 복제본에 접근할 수 있다.