본문 바로가기
기술 공부/DevOps

VirtualBox NAT 네트워크 설정과 SSH 포트포워딩 트러블슈팅

by soy-ul 2025. 12. 25.
반응형

🔹 들어가며

 

안녕하세요!

오랜만에 로컬 PC에 VirtualBox에서 Rocky Linux 9.7 VM을 설정하던 중, 네트워크 구성과 SSH 포트포워딩 설정 문제로 한참을 해맸습니다. 😂

그리고 이번 기회에 VirtualBox의 여러 네트워크 모드(NAT, NAT Network, 내부 네트워크 등) VirtualBox 네트워크 종류의 차이, NAT 포트포워딩의 정확한 설정 방법, 그리고 왜 문제가 발생했는지를 중심으로 상세하게 정리해보았습니다. 


🔹 작업 목표

현재 상황:

  • OS: Rocky Linux 9.7
  • 환경: VirtualBox 7.2
  • 어댑터 1: NAT Network (10.0.10.0/24)
  • 어댑터 2: 내부 네트워크 (192.168.0.0/24)

목표:

  • 호스트(Windows)에서 게스트 VM(Rocky Linux 9.7)으로 SSH 접속
  • 포트포워딩을 통한 localhost:22010 → VM:22 연결

발생한 문제:

ssh root@localhost -p 22010
# Connection refused

 

🔹 1단계: VirtualBox 네트워크 종류 이해

 

네트워크 모드 비교

 

VirtualBox가 제공하는 여러 네트워크 모드에 따른 인터넷/호스트/게스트 등 접속 방향 및 가능여부에 대해 정리해보겠습니다. 

모드 인터넷 접속 호스트→게스트 게스트→호스트 게스트→게스트 외부→게스트
NAT 포트포워딩
NAT Network 포트포워딩
브리지 ✅ 직접 ✅ 직접
내부 네트워크
Host-Only ✅ 직접 ✅ 직접

 

각 모드의 특징

 

1. NAT (Network Address Translation)

  • 기본 IP: 10.0.2.15/24
  • 게이트웨이: 10.0.2.2
  • 호스트 접속: VM별 포트포워딩 설정 필요
  • 각 VM마다 독립적인 NAT 네트워크 가짐
  • VM끼리 서로 통신 불가능
  • 용도: 간단한 개발/테스트 환경

 

2. NAT Network

  • 여러 VM이 같은 NAT 네트워크 공유
  • 사용자 정의 IP 대역 가능 (예: 10.0.10.0/24)
  • 같은 NAT Network의 VM끼리 통신 가능
  • 여러 VM이 하나의 NAT 네트워크를 공유
  • 호스트 접속: 전역 포트포워딩 설정 필요
  • 용도: 클러스터 환경, 여러 VM 간 통신 필요 시

 

3. 내부 네트워크 (Internal Network)

  • 완전히 격리된 프라이빗 네트워크
  • 호스트 및 외부와 통신 불가
  • 같은 이름의 내부 네트워크 VM끼리만 통신
  • IP는 수동 설정 필요
  • 용도: 완전 격리가 필요한 백엔드 네트워크

 

4. Host-Only Adapter

  • 호스트-게스트 간 전용 네트워크
  • 외부 인터넷 접속 불가 (기본값)
  • 호스트 IP: 192.168.56.1
  • 용도: 개발 환경, 파일 공유

 

5. 브리지 어댑터 (Bridged Adapter)

  • VM이 물리적 네트워크에 직접 연결된 것처럼 동작
  • 호스트와 같은 네트워크 대역의 IP 주소를 VM에 할당 
  • 네트워크상에서 독립된 장치처럼 보임
  • 호스트, 게스트, 외부 네트워크 모두 자유롭게 통신
  • 포트포워딩 불필요 (직접 IP로 접근)
  • 용도: 실제 서버 환경 구축, 외부에서 직접 접근이 필요한 경우

🔹 2단계: 첫 번째 시도 - NAT Network 혼동

상황

초기 VM 설정:

어댑터 1: NAT
포트포워딩: 호스트 22010 → 게스트 10.0.10.10:22

 

VM 내부 IP 확인:

[root@testsvr01 ~]# ip addr show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    inet 10.0.10.10/24 brd 10.0.10.255 scope global noprefixroute enp0s3

 

문제점:

  • VirtualBox 설정은 "NAT"로 표시
  • 하지만 VM은 10.0.10.10 IP를 받음 (NAT Network의 IP 대역)
  • 일반 NAT라면 10.0.2.15를 받아야 함 (제가 잘못 설정한 부분)

 

원인 분석

 

VirtualBox 전역 설정 확인:

파일 → 환경설정 → 네트워크 → NAT 네트워크
이름: NatNetwork
IPv4 주소: 10.0.10.0/24
DHCP 서버: 활성화

 

발견한 내용:

  • "NAT Network"를 미리 생성해두었음
  • VM 설정에서 "NAT"로 표시되어도 실제로는 "NAT Network" 사용
  • 포트포워딩이 VM별 설정전역 설정 두 곳에 존재

 

포트포워딩 설정 문제

 

VM 설정에서 확인한 포트포워딩:

Rule 1:
프로토콜: TCP
호스트 IP: 192.168.56.1  ← 문제!
호스트 포트: 22010
게스트 IP: 10.0.10.10
게스트 포트: 22

 

🚨 발견한 문제들:

  1. 호스트 IP를 192.168.56.1로 설정 (Host-Only Adapter IP)
    • NAT 네트워크와 Host-Only는 별개의 네트워크임
    • NAT 포트포워딩이 Host-Only IP에서 작동할 수 없음
  2. 게스트 IP를 10.0.10.10으로 고정
    • NAT 모드에서는 게스트 IP를 비워두어야 자동 탐지됨 - DHCP 으로 구성해야 함
    • 고정 IP 지정 시 해당 IP가 없으면 연결 실패

 

🔹 3단계: SSH 연결 실패 원인 분석

 

에러 메시지들

 

에러 1: Connection Refused

ssh root@localhost -p 22010
# ssh: connect to host localhost port 22010: Connection refused

 

원인:

  • 호스트의 22010 포트가 열려있지 않음
  • 포트포워딩이 실제로 작동하지 않음

 

에러 2: Connection Abort

ssh root@127.0.0.1 -p 22010
# kex_exchange_identification: read: Software caused connection abort

 

원인:

  • 포트는 열려있으나 잘못된 대상으로 연결 시도
  • SSH 핸드셰이크 중 연결 끊김

 

VM 내부 확인

 

1. SSH 서비스 확인:

[root@testsvr01 ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Active: active (running)

✅ SSH 서비스 정상 작동

 

2. 방화벽 확인:

[root@testsvr01 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Active: inactive (dead)

✅ 방화벽 비활성화됨

 

3. SSH 포트 리스닝 확인:

[root@testsvr01 ~]# ss -tlnp | grep :22
LISTEN    0    128    0.0.0.0:22    0.0.0.0:*    users:(("sshd",pid=1234,fd=3))

✅ SSH가 22번 포트에서 정상 리스닝

 

4. 게이트웨이 Ping 테스트:

[root@testsvr01 ~]# ping -c 3 10.0.10.1
PING 10.0.10.1 (10.0.10.1) 56(84) bytes of data.
--- 10.0.10.1 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss

⚠️ NAT 게이트웨이는 ping에 응답하지 않음 (정상 동작)

 

5. 외부 인터넷 Ping 테스트:

[root@testsvr01 ~]# ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 10.0.10.10 icmp_seq=1 Destination Host Unreachable

❌ 인터넷 연결 실패!

 

네트워크 설정 확인

 

VM 네트워크 설정 (GNOME):

IPv4 방식: 수동
주소: 10.0.2.15
넷마스크: 255.255.255.0
게이트웨이: (비어있음)  ← 문제!
DNS: 8.8.8.8

 

🚨 핵심 문제 발견:

  • 게이트웨이가 설정되지 않음
  • NAT 네트워크 IP(10.0.10.10)와 설정한 IP(10.0.2.15)가 불일치
  • 이것이 인터넷 연결 실패의 근본 원인이었음!

 

🔹 4단계: 해결 과정

 

해결책 선택

 

두 가지 옵션이 있었고, 저는 옵션 2 으로 진행하였습니다.:

 

옵션 1: NAT Network 계속 사용

  • 전역 포트포워딩 설정 필요
  • 게이트웨이 10.0.10.1 설정 필요

 

옵션 2: 단순 NAT로 변경 (선택함)

  • 설정이 더 간단함
  • VM별 포트포워딩 적용
  • 안정적인 기본 구성

 

단계별 수정

 

1. VM 네트워크를 단순 NAT로 변경

 

VirtualBox 설정:

설정 → 네트워크 → 어댑터 1
Attached to: NAT (NAT Network 아님!)
고급 → Virtual Cable Connected: 체크

 

2. 포트포워딩 규칙 수정

 

VirtualBox 설정 → 네트워크 → 어댑터 1 → 고급 → 포트 포워딩:

Rule 1:
이름: SSH
프로토콜: TCP
호스트 IP: (비워둠)       ← 192.168.56.1 삭제!
호스트 포트: 22010
게스트 IP: (비워둠)       ← 10.0.10.10 삭제!
게스트 포트: 22

 

왜 비워두어야 하나?

  • 호스트 IP를 비우면: 모든 호스트 인터페이스에서 수신
    • localhost(127.0.0.1) ✅
    • Wi-Fi IP(192.168.40.94) ✅
    • 심지어 Host-Only IP(192.168.56.1)도 ✅
  • 게스트 IP를 비우면: VirtualBox가 자동으로 NAT VM 탐지
    • NAT 모드: 자동으로 10.0.2.15 찾음
    • IP가 DHCP로 변경되어도 자동 추적

 

3. 재부팅 후 IP 확인

[root@testsvr01 ~]# ip addr show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3

✅ NAT 기본 IP로 변경

 

4. 라우팅 테이블 확인

[root@testsvr01 ~]# ip route show
default via 10.0.2.2 dev enp0s3 proto dhcp metric 100
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100

✅ 게이트웨이 자동 설정

 

5. 인터넷 연결 확인

[root@testsvr01 ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=10.2 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=11.5 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=117 time=9.8 ms

✅ 인터넷 연결 성공


🔹 5단계: SSH 접속 성공

호스트에서 SSH 접속

 

MobaXterm에서 접속:

ssh root@localhost -p 22010
# 접속 성공!

 

포트 확인 (호스트에서)

 

CMD or PowerShell:

PS> netstat -ano | findstr :22010
TCP    0.0.0.0:22010         0.0.0.0:0              LISTENING       5678

✅ VirtualBox가 22010 포트에서 수신 중

 


🔹 최종 구성

어댑터 구성

어댑터 1: NAT (인터넷 + SSH 접속)

Attached to: NAT
IP: 10.0.2.15/24 (DHCP 자동 할당)
게이트웨이: 10.0.2.2
DNS: 10.0.2.3

포트 포워딩:
- 호스트 22010 → 게스트 22 (SSH)

 

어댑터 2: 내부 네트워크 (VM 간 통신)

Attached to: 내부 네트워크
Name: intnet
IP: 192.168.0.10/24 (수동 설정)
게이트웨이: 없음

 

네트워크 구성도

┌─────────────────────────────────────────┐
│ 호스트 (Windows)                         │
│                                          │
│ localhost:22010                          │
└─────────────┬───────────────────────────┘
              │ 포트포워딩
              ↓
┌─────────────────────────────────────────┐
│ VirtualBox NAT                           │
│ 게이트웨이: 10.0.2.2                     │
└─────────────┬───────────────────────────┘
              │
              ↓
┌─────────────────────────────────────────┐
│ VM: testsvr01                            │
│                                          │
│ enp0s3 (NAT): 10.0.2.15                 │
│ - SSH: 22                                │
│ - 인터넷 접속                            │
│                                          │
│ enp0s8 (내부): 192.168.0.10             │
│ - VM 간 통신                             │
└─────────────────────────────────────────┘

 

🔹 핵심 포인트 정리

1. NAT vs NAT Network 구분

NAT (단순 NAT):

  • VM별 독립적인 네트워크
  • 기본 IP: 10.0.2.15
  • 포트포워딩: VM 설정에서 직접 설정
  • 추천: 단일 VM, 간단한 환경

NAT Network:

  • 여러 VM이 공유하는 네트워크
  • 사용자 정의 IP 대역
  • 포트포워딩: 전역 설정 필요
  • 추천: 클러스터, VM 간 통신 필요 시

 

2. 포트포워딩 설정 관련 참고사항

 

올바른 설정:

호스트 IP: (비워둠)    ← 모든 인터페이스에서 수신
호스트 포트: 22010
게스트 IP: (비워둠)    ← 자동 탐지
게스트 포트: 22

 

잘못된 설정:

호스트 IP: 192.168.56.1  ← Host-Only IP (NAT와 무관)
게스트 IP: 10.0.10.10    ← 고정 IP (유연성 떨어짐)

 

3. 게이트웨이의 중요성

 

게이트웨이 없으면:

VM → ??? → 인터넷 ✗

 

게이트웨이 있으면:

VM → 10.0.2.2 (NAT 게이트웨이) → 호스트 → 인터넷 ✓

 

설정 방법:

  • DHCP 사용: 자동 설정 
  • 수동 설정: 게이트웨이 필드에 10.0.2.2 입력

4. NAT 게이트웨이 Ping

ping 10.0.2.2
# 응답 없음 - 정상!
  • NAT 게이트웨이는 ICMP Echo에 응답하지 않도록 설계됨
  • 라우팅 기능은 정상 작동
  • 인터넷 연결로 확인: ping 8.8.8.8

🔹 트러블슈팅 체크리스트

VM 내부 확인

# 1. SSH 서비스 상태
sudo systemctl status sshd

# 2. SSH 포트 리스닝
sudo ss -tlnp | grep 22

# 4. IP 주소 확인
ip addr show enp0s3
# NAT: 10.0.2.15
# NAT Network: 10.0.10.x

# 5. 라우팅 테이블
ip route show
# default via 10.0.2.2 확인

# 6. 인터넷 연결
ping -c 3 8.8.8.8

# 7. DNS 해석
ping -c 3 google.com

 

호스트 확인

 

PowerShell:

# 1. 포트 확인
netstat -ano | findstr 22010

# 2. Telnet 테스트
telnet localhost 22010

 

VirtualBox 설정 확인

1. VM 설정 → 네트워크 → 어댑터 1
   - Attached to: NAT 확인
   - Virtual Cable Connected 체크 확인

2. 포트 포워딩 클릭
   - 호스트 IP: (비어있는지 확인)
   - 게스트 IP: (비어있는지 확인)

3. VM 로그 확인
   - VM 우클릭 → 로그 표시
   - NAT, forward 키워드 검색

🔹 추가 팁

MobaXterm 세션 저장

설정:

Session type: SSH
Remote host: localhost
Port: 22010
Username: root

저장하면 매번 명령어 입력 없이 더블클릭으로 접속 가능합니다.

다중 VM 접속

포트를 다르게 설정:

VM1: localhost:22010 → 10.0.2.15:22
VM2: localhost:22011 → 10.0.2.15:22
VM3: localhost:22012 → 10.0.2.15:22

 


🔹 정리

실수 1: 호스트 IP에 Host-Only IP 사용

호스트 IP: 192.168.56.1  ← NAT와 무관!

 

결과:

ssh root@localhost -p 22010
# Connection refused

 

실수 2: 게스트 IP 고정

게스트 IP: 10.0.10.10  ← NAT 모드에서는 10.0.2.15

결과:

  • 포트포워딩이 잘못된 IP로 전달됨
  • 연결 실패

 

실수 3: 게이트웨이 누락

IPv4 방식: 수동
게이트웨이: (비어있음)  ← 인터넷 연결 불가!

 

결과:

ping 8.8.8.8
# Destination Host Unreachable

 

실수 4: NAT Network 포트포워딩 위치

VM 설정 → 포트 포워딩  ← 작동 안 함!

 

올바른 위치:

파일 → 환경설정 → 네트워크 → NAT 네트워크 → 포트 포워딩

🔹 마치며

간단해 보였던 VirtualBox NAT 포트포워딩 설정이 NAT vs NAT Network의 혼동, 잘못된 IP 설정, 게이트웨이 누락 등의 문제로 인해 생각보다 오래 걸렸습니다.

하지만 덕분에 VirtualBox의 다양한 네트워크 모드를 깊이 이해하게 되었고, 특히 다음을 배웠습니다:

 

배운 점:

  1. NAT와 NAT Network는 완전히 다른 모드다
  2. NAT 방식의 포트포워딩에서 IP 필드는 비워두는 것이 가장 유연하다
  3. 게이트웨이 설정은 필수다 (DHCP 사용 권장)
  4. NAT 게이트웨이는 ping에 응답하지 않는다 (정상)
  5. 문제 발생 시 단계별로 확인하는 것이 중요하다

VM 설정에서 네트워크는 기초이지만 매우 중요한 부분입니다.

저의 경험이 비슷한 작업을 하시는 분들께 도움이 되길 바라며, 혹시 내용 중에 잘못된 부분이 있다면 알려주시면 감사하겠습니다! 😊

반응형