
이 글에서는 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)를 다운로드받아 진행합니다.
- OS 선택: Raspberry Pi OS Lite (64-bit)를 선택합니다.
- GUI가 없는 Lite 버전은 유휴 RAM 사용량이 약 120MB로 매우 적어 서버 가용 자원을 극대화할 수 있습니다.
- 사용자 지정 설정 (톱니바퀴 아이콘 클릭):
- 호스트 이름: [HOSTNAME] // 예: homeserver, raspberrypi 등 네트워크 식별용 이름 설정.
- 사용자 및 비밀번호: [USER_ID] // 주로 pi를 사용하나, 강력한 비밀번호를 설정하길 권장합니다.
- 원격 접근: SSH 활성화에 체크하고 비밀번호 인증 사용을 선택합니다. 비밀번호 인증 사용 시 직전에 입력한 내용을 사용합니다.
- 로컬화: 시간대를 Asia/Seoul로 설정하여 서버 로그 및 자동화 시간을 동기화합니다.
- 라즈베리파이 커넥트: 리소스 낭비 방지를 위해 비활성화를 권장합니다.
2단계: 하드웨어 배치 및 물리 구성
24/7 안정적인 구동을 위해 발열과 먼지를 관리하고 물리적 연결을 완료합니다.

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

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

만약 IP 할당이 되지 않거나, 핑(Ping) 타임아웃이 발생하거나, 부팅할 때마다 MAC 주소가 변한다면 이 단계를 확인하세요.
4.1. MAC 주소 고정 (MAC Randomization 해제)
최신 OS의 보안 기능을 해제하여 공유기에서 설정한 IP 바인딩이 무효화되지 않도록 합니다.
- 설정 파일 생성:
sudo nano /etc/NetworkManager/conf.d/10-ignore-mac-randomization.conf - 아래 내용 입력:
[device] wifi.scan-rand-mac-address=no [connection] ethernet.cloned-mac-address=preserve wifi.cloned-mac-address=preserve - 서비스 재시작:
sudo systemctl restart NetworkManager
4.2. 커널 매개변수를 통한 MAC 강제 할당 (보조 방법)
위 방법으로도 MAC 주소가 변한다면 부팅 단계에서 하드웨어 주소를 고정합니다.
- 설정 수정:
sudo nano /boot/firmware/cmdline.txt - 기존 내용 끝에 한 칸 띄우고 추가:
smsc95xx.macaddr=[HW_MAC]// 예:2C:F0:5D:96:24:66 - 재부팅:
sudo reboot
4.3. ARP 캐시 초기화
공유기와 PC에 남아있는 잘못된 MAC-IP 매칭 정보를 지웁니다.
- 공유기: 관리 페이지 접속 → DHCP 고정 할당 목록에서 기존 라즈베리파이 항목 삭제 → 랜선 재연결.
- Windows PC: PowerShell(관리자 권한)에서 실행.
arp -d * ping [IP_ADDRESS]// 예:ping 192.168.0.100
5단계: [선택] 이중 NAT 환경 대응 (건물 모뎀 + 개인 공유기)

이중 NAT 환경이 아닌 경우 생략합니다.
PC와 라즈베리파이가 같은 공유기에 있음에도 대역폭 불일치로 서로 보이지 않을 때 수행합니다.
- DNS 서버 강제 지정: 인터넷 연결은 되나 도메인(tailscale.com 등) 접속이 안 될 때 수정합니다.
sudo nano /etc/resolv.conf# 기존 내용 삭제 후 아래 추가nano의 경우 작성 후 Ctrl+O, Enter, Ctrl+X 로 저장 후 종료합니다.nameserver 8.8.8.8 nameserver 8.8.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 환경을 구축합니다.
- 라즈베리파이 설치:
- 화면에 나타나는 URL로 브라우저에서 로그인하여 인증합니다.
curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up을 입력합니다.- OCI 서버 연동: OCI 인스턴스에도 위와 동일한 과정을 수행하여 라즈베리파이와 OCI를 같은 가상망으로 묶습니다.
- 인증 유지: Tailscale 대시보드에서 라즈베리파이 장비의 Disable Key Expiry 옵션을 활성화합니다.
- 기본적으로 Tailscale에선 6개월마다 디바이스 인증 정보를 초기화합니다. 이를 방지하기 위한 옵션입니다.
curl로 tailscale 다운로드 시 타임아웃 에러가 발생하는 경우, 5단계: 이중 NAT 환경 대응에서 네임서버 추가 작업을 진행하세요.
7단계: SSH 접속 최적화 (Config 및 무암호 로그인)

별칭(Alias)으로 즉시 접속하고 비밀번호 입력을 생략하는 환경을 만듭니다.
- SSH Config 작성: PC의 ~/.ssh/config에 저장합니다.
HostName \[TAILSCALE\_IP\] // 예: 100.x.y.z User \[USER\_ID\] // 예: pi- 무암호 로그인 (키 전송):
# Windows PowerShell에서 실행 cat $HOME\.ssh\id_rsa.pub | ssh [ALIAS] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"- 최종 확인: 이제
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 |