이중 NAT 환경에서 라즈베리파이 3 홈서버 구축 및 통합 가이드

2026. 5. 3. 20:56·IT 기술

이 글에서는 RaspberryPi 3 Model B를 활용하여 24/7 구동되는 홈서버를 구축하는 과정을 다룹니다.

이 글은 다음 상황에서 작성되었습니다:

  • 이중 NAT 환경: WAN - 건물 모뎀 - 집 공유기 - 라즈베리파이
    • 건물 모뎀에 접근할 수 없어 모뎀 - 공유기 간 포트포워딩이 불가능한 상황입니다.
  • Raspberry Pi 3 Model B 를 사용합니다. 라즈베리파이 버전과 모델은 달라도 상관없으나, 각 모델마다 설정이 다를 수 있습니다.
  • Oracle Cloud Infrastructure (OCI) 내 인스턴스를 실행하고 있습니다. 상기 이중 NAT 구조를 우회하기 위한 방법으로 사용했으며, AWS, GCP 등 다른 클라우드 서비스도 적용 가능합니다. 어디에서나 접근할 수 있는 서버가 있으면 해당 서버를 사용하시고, 외부에서 집 공유기로 바로 접속 가능하면 굳이 필요하지 않습니다.
  • 공유기 설정 및 라즈베리파이 설치는 Windows 10 데스크탑에서 진행했습니다.

1단계: OS 선택 및 초기 설정 (Raspberry Pi Imager)

라즈베리파이 3의 한정된 자원(RAM 1GB)에서 최적의 성능과 안정성을 확보하기 위한 기초 단계입니다.

https://www.raspberrypi.com/software/ 에서 라즈베리파이 이미저(Raspberry Pi Imager)를 다운로드받아 진행합니다.

  1. OS 선택: Raspberry Pi OS Lite (64-bit)를 선택합니다.
    • GUI가 없는 Lite 버전은 유휴 RAM 사용량이 약 120MB로 매우 적어 서버 가용 자원을 극대화할 수 있습니다.
  2. 사용자 지정 설정 (톱니바퀴 아이콘 클릭):
    • 호스트 이름: [HOSTNAME] // 예: homeserver, raspberrypi 등 네트워크 식별용 이름 설정.
    • 사용자 및 비밀번호: [USER_ID] // 주로 pi를 사용하나, 강력한 비밀번호를 설정하길 권장합니다.
    • 원격 접근: SSH 활성화에 체크하고 비밀번호 인증 사용을 선택합니다. 비밀번호 인증 사용 시 직전에 입력한 내용을 사용합니다.
    • 로컬화: 시간대를 Asia/Seoul로 설정하여 서버 로그 및 자동화 시간을 동기화합니다.
    • 라즈베리파이 커넥트: 리소스 낭비 방지를 위해 비활성화를 권장합니다.

2단계: 하드웨어 배치 및 물리 구성

24/7 안정적인 구동을 위해 발열과 먼지를 관리하고 물리적 연결을 완료합니다.

이미지 출처: https://robotscience.kr/goods/view?no=18963&srsltid=AfmBOorfmZ3G2B-vxKuQ3nH5n9llxjfZXuV9xPl2iS3PBi4LlCvjCmtA2f4

  1. 네트워크 연결: 반드시 유선 랜(Ethernet) 사용을 강력히 권장합니다. 이는 외부 접속 안정성을 확보하고 블루투스 사용 시 Wi-Fi 간섭을 방지하기 위함입니다.
    • Raspberry Pi 3 Model B는 Wi-Fi와 블루투스가 동일 장치/안테나를 공유하므로 유선랜을 권장합니다. 다른 모델을 사용하시는 경우 해당 이슈가 있는지를 확인해 판단하세요.
  2. 전원 공급: 정격 어댑터(5V 3A 이상 추천) 사용 여부를 확인하세요. 전원 공급이 부족한 경우 부팅에 실패하거나 성능 하락, 각종 불안정 현상이 발생할 수 있습니다.
  3. 방열 및 케이스:
    • 주요 칩셋에 방열판을 부착합니다. 라즈베리파이 정품 구매 시 칩셋용 방열판도 같이 배송받았을 겁니다.
    • 적절한 공간이 있으면 좋지만 마땅히 둘 공간이 없을 수 있습니다. 그럴 땐 먼지 방지를 위해 라즈베리파이 케이스에 수납하되, 뚜껑을 완전히 닫기보다 어느 정도의 유격을 주거나 공기 순환로를 확보하는 것을 추천합니다.
  4. 배치: 책장 위 등에 설치할 경우 벽면에서 3~5cm 이격하여 공기 흐름을 확보합니다.

3단계: 초기 접속 및 인터페이스 최적화

장비의 전원을 켠 후 터미널을 통해 초기 최적화를 진행합니다.

  1. SSH 접속: 제어용 PC(Windows)에서 PowerShell을 열고 접속합니다.
  2. ssh [USER_ID]@[IP_ADDRESS] // 예: ssh pi@192.168.0.100
    • ssh pi@raspberrypi.local 로도 접속 가능합니다.
      불가능한 경우 arp 테이블을 초기화하거나 로컬 네트워크를 점검해 보세요.
  3. 무선 인터페이스 비활성화: 유선 랜을 사용 중이라면 블루투스 안정성을 위해 Wi-Fi를 차단합니다.
    • 방법 1 (커널 수준 차단 - rfkill): 하드웨어 라디오를 직접 제어합니다.
      sudo rfkill block wifi
    • 방법 2 (네트워크 매니저 차단 - nmcli): 소프트웨어 인터페이스 충돌을 방지합니다.
    • sudo nmcli device disconnect wlan0 sudo nmcli radio wifi off
    • 참고: rfkill은 하드웨어 자원 간섭 차단에 효과적이며, nmcli는 인터페이스 관리에 유용하므로 두 방법 모두 수행하는 것이 가장 확실합니다.

4단계: [선택] 네트워크 장애 트러블슈팅

(C) Cloudflare


만약 IP 할당이 되지 않거나, 핑(Ping) 타임아웃이 발생하거나, 부팅할 때마다 MAC 주소가 변한다면 이 단계를 확인하세요.

4.1. MAC 주소 고정 (MAC Randomization 해제)

최신 OS의 보안 기능을 해제하여 공유기에서 설정한 IP 바인딩이 무효화되지 않도록 합니다.

  1. 설정 파일 생성:sudo nano /etc/NetworkManager/conf.d/10-ignore-mac-randomization.conf
  2. 아래 내용 입력:
    [device] 
    wifi.scan-rand-mac-address=no 
    [connection] 
    ethernet.cloned-mac-address=preserve 
    wifi.cloned-mac-address=preserve
  3. 서비스 재시작: sudo systemctl restart NetworkManager

4.2. 커널 매개변수를 통한 MAC 강제 할당 (보조 방법)

위 방법으로도 MAC 주소가 변한다면 부팅 단계에서 하드웨어 주소를 고정합니다.

  1. 설정 수정: sudo nano /boot/firmware/cmdline.txt
  2. 기존 내용 끝에 한 칸 띄우고 추가: smsc95xx.macaddr=[HW_MAC] // 예: 2C:F0:5D:96:24:66
  3. 재부팅: sudo reboot

4.3. ARP 캐시 초기화

공유기와 PC에 남아있는 잘못된 MAC-IP 매칭 정보를 지웁니다.

  1. 공유기: 관리 페이지 접속 → DHCP 고정 할당 목록에서 기존 라즈베리파이 항목 삭제 → 랜선 재연결.
  2. Windows PC: PowerShell(관리자 권한)에서 실행.
  3. arp -d * ping [IP_ADDRESS] // 예: ping 192.168.0.100

5단계: [선택] 이중 NAT 환경 대응 (건물 모뎀 + 개인 공유기)

이중 NAT 환경이 아닌 경우 생략합니다.
PC와 라즈베리파이가 같은 공유기에 있음에도 대역폭 불일치로 서로 보이지 않을 때 수행합니다.

  1. DNS 서버 강제 지정: 인터넷 연결은 되나 도메인(tailscale.com 등) 접속이 안 될 때 수정합니다.
  2. sudo nano /etc/resolv.conf # 기존 내용 삭제 후 아래 추가nano의 경우 작성 후 Ctrl+O, Enter, Ctrl+X 로 저장 후 종료합니다.
  3. nameserver 8.8.8.8 nameserver 8.8.4.4
  4. PC IP 대역 수동 설정 (Windows): PC가 상위 모뎀(예: 192.168.55.x)의 주소를 받아올 경우, 하위 공유기 대역(예: 192.168.0.x)으로 강제 고정합니다.
    • 설정 → 네트워크 → 이더넷 → 수동(IPv4)
    • IP 주소: [PC_STATIC_IP] // 예: 192.168.0.110 (공유기 범위 내)
    • 서브넷 접두사: 24 // 서브넷 마스크인 경우: 255.255.255.0
    • 게이트웨이: [GATEWAY] // 예: 192.168.0.1

6단계: 외부 접속(Tailscale) 및 OCI 서버 연동

포트포워딩 없이 외부에서도 내 서버에 안전하게 접속할 수 있도록 VPN 환경을 구축합니다.

  1. 라즈베리파이 설치:
    • 화면에 나타나는 URL로 브라우저에서 로그인하여 인증합니다.
  2. curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up 을 입력합니다.
  3. OCI 서버 연동: OCI 인스턴스에도 위와 동일한 과정을 수행하여 라즈베리파이와 OCI를 같은 가상망으로 묶습니다.
  4. 인증 유지: Tailscale 대시보드에서 라즈베리파이 장비의 Disable Key Expiry 옵션을 활성화합니다.
    • 기본적으로 Tailscale에선 6개월마다 디바이스 인증 정보를 초기화합니다. 이를 방지하기 위한 옵션입니다.

curl로 tailscale 다운로드 시 타임아웃 에러가 발생하는 경우, 5단계: 이중 NAT 환경 대응에서 네임서버 추가 작업을 진행하세요.

7단계: SSH 접속 최적화 (Config 및 무암호 로그인)

(C) IPXO

별칭(Alias)으로 즉시 접속하고 비밀번호 입력을 생략하는 환경을 만듭니다.

  1. SSH Config 작성: PC의 ~/.ssh/config에 저장합니다.
  2. HostName \[TAILSCALE\_IP\] // 예: 100.x.y.z User \[USER\_ID\] // 예: pi
  3. 무암호 로그인 (키 전송):
  4. # Windows PowerShell에서 실행 cat $HOME\.ssh\id_rsa.pub | ssh [ALIAS] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
  5. 최종 확인: 이제 ssh [ALIAS]만 입력하면 즉시 로그인이 완료됩니다.

8단계: 시스템 모니터링 및 유지보수

24/7 안정성을 위해 온도를 주기적으로 확인합니다.

  • 실시간 온도 확인: watch -n 5 vcgencmd measure_temp
  • 정상 범위: 50°C ~ 60°C.
  • 주의: 75°C 이상 지속 시 냉각 솔루션 보강 및 알림 스크립트 추가를 권장합니다.
 

'IT 기술' 카테고리의 다른 글

[Windows] 특정 프로세스 오디오 출력 디바이스 변경 스크립트, 트러블슈팅  (0) 2026.03.30
OpenAI 무료 토큰(Complimentary Daily Tokens)이 사용되지 않는 이유  (0) 2026.02.10
npm run dev 시 EACCES: Permission Denied 포트 충돌 해결방법  (0) 2025.07.13
구글 시트를 활용한 홈페이지 폼 데이터 수집 시스템 구축하기  (0) 2025.06.21
SEO와 AEO: 변화하는 디지털 마케팅 전략  (0) 2025.04.05
'IT 기술' 카테고리의 다른 글
  • [Windows] 특정 프로세스 오디오 출력 디바이스 변경 스크립트, 트러블슈팅
  • OpenAI 무료 토큰(Complimentary Daily Tokens)이 사용되지 않는 이유
  • npm run dev 시 EACCES: Permission Denied 포트 충돌 해결방법
  • 구글 시트를 활용한 홈페이지 폼 데이터 수집 시스템 구축하기
시남
시남
개발하는 사람입니다. 하고 싶은 것들 사이에서 매번 선택하는 삶을 살고 있습니다.
  • 시남
    Refactor Life like code.
    시남
  • 전체
    오늘
    어제
    • 분류 전체보기 (29) N
      • IT 기술 (9) N
        • Spring boot (5)
        • Claude (1)
        • AWS (5)
        • n8n (2)
      • 이야기 (3)
      • 독서 (0)
      • 개발일기 (4)
        • 1D3Q (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    이중NAT
    Complimentary Tokens
    git@github.com
    n8n자동화예제
    1인개발
    1D3Q
    Spring Boot
    자동화공부
    API빌링
    429에러
    n8n공부방법
    회고
    인프런n8n
    java
    reverse tunnel
    claude marketplace
    docker
    n8n실습
    사이드프로젝트
    Apify
    AWS
    gemini
    기획
    리버스 터널링
    도커 미러
    Ai
    도커 503
    도커 토큰 503
    개발일지
    Spring
  • 최근 댓글

  • 최근 글

  • hELLO By정상우.v4.10.4 관리
시남
이중 NAT 환경에서 라즈베리파이 3 홈서버 구축 및 통합 가이드
상단으로

티스토리툴바