이중 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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바