서론: 네트워크 설정이 중요한 이유

홈서버를 구축했다면 이제 가장 중요한 단계가 남았습니다. 바로 네트워크 설정입니다. 아무리 좋은 하드웨어에 완벽한 운영체제를 설치했더라도, 네트워크 설정이 제대로 되어 있지 않으면 외부에서 접속할 수 없는 고립된 컴퓨터에 불과합니다.

이번 편에서는 홈서버를 어디서든 안전하게 접속할 수 있도록 만드는 네트워크 설정 전반을 다룹니다. 고정 IP 설정부터 시작해서 포트포워딩, DDNS 설정, SSH 원격 접속, 보안 강화, 그리고 WireGuard VPN까지 차근차근 설명하겠습니다. 처음에는 복잡해 보일 수 있지만, 하나씩 따라 하다 보면 어느새 전문가 수준의 네트워크 환경을 구축하게 될 것입니다.

1. 내부 네트워크의 이해와 고정 IP 설정

1.1 내부 IP와 외부 IP의 차이

네트워크 설정을 시작하기 전에 먼저 IP 주소의 개념을 정확히 이해해야 합니다. 가정에서 사용하는 네트워크에는 두 종류의 IP 주소가 존재합니다.

외부 IP (공인 IP)는 인터넷 서비스 제공업체(ISP)가 여러분의 가정에 할당하는 주소입니다. 전 세계에서 유일하며, 외부에서 여러분의 네트워크를 찾을 때 사용됩니다. 보통 공유기의 WAN 포트에 할당됩니다.

내부 IP (사설 IP)는 공유기가 가정 내 각 기기에 할당하는 주소입니다. 192.168.x.x, 172.16.x.x, 10.x.x.x 대역을 사용하며, 같은 내부 네트워크 안에서만 통신할 수 있습니다.

1.2 서버에 고정 IP 설정하기

서버는 항상 같은 IP 주소를 가져야 합니다. DHCP가 자동으로 할당한 IP는 재부팅하거나 시간이 지나면 변경될 수 있어서, 포트포워딩이나 다른 설정이 작동하지 않게 됩니다.

Ubuntu/Debian에서 Netplan을 이용한 고정 IP 설정:

# 현재 네트워크 인터페이스 확인
ip addr show

# Netplan 설정 파일 편집
sudo nano /etc/netplan/00-installer-config.yaml

설정 파일 내용을 다음과 같이 수정합니다:

network:
  version: 2
  ethernets:
    enp0s3:  # 실제 인터페이스 이름으로 변경
      dhcp4: no
      addresses:
        - 192.168.1.100/24  # 원하는 고정 IP
      routes:
        - to: default
          via: 192.168.1.1  # 공유기 IP (게이트웨이)
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4

설정을 적용합니다:

# 설정 적용
sudo netplan apply

# 변경된 IP 확인
ip addr show

Tip: 고정 IP를 설정할 때는 공유기의 DHCP 범위 밖의 주소를 선택하는 것이 좋습니다. 예를 들어 DHCP가 192.168.1.2~192.168.1.99를 사용한다면, 서버는 192.168.1.100 이상의 주소를 사용하면 충돌을 피할 수 있습니다.

2. 포트포워딩 이해와 설정

2.1 포트포워딩이란?

포트포워딩은 외부에서 들어오는 특정 포트의 트래픽을 내부 네트워크의 특정 기기로 전달해주는 기능입니다. 공유기는 기본적으로 외부에서의 접속을 차단하기 때문에, 서버에 접속하려면 반드시 포트포워딩 설정이 필요합니다.

예를 들어 외부에서 SSH로 접속하려면, 공유기에게 "22번 포트로 들어오는 연결은 192.168.1.100으로 보내줘"라고 설정해야 합니다.

2.2 주요 포트 번호

서비스 포트 번호 설명
SSH 22 원격 터미널 접속
HTTP 80 웹 서버
HTTPS 443 보안 웹 서버
FTP 21 파일 전송
Samba 445 Windows 파일 공유
WireGuard 51820 VPN

2.3 공유기에서 포트포워딩 설정

포트포워딩 설정은 공유기 관리 페이지에서 합니다. 브라우저에서 공유기 IP(보통 192.168.1.1 또는 192.168.0.1)로 접속한 후, 포트포워딩 또는 가상 서버 메뉴를 찾습니다.

일반적인 설정 항목:

  • 서비스 이름: 구분하기 쉬운 이름 (예: SSH, Web Server)
  • 외부 포트: 외부에서 접속할 때 사용할 포트
  • 내부 IP: 서버의 고정 IP 주소
  • 내부 포트: 서버에서 실제로 서비스하는 포트
  • 프로토콜: TCP, UDP, 또는 둘 다

보안 Tip: SSH 포트를 22 대신 다른 번호(예: 2222, 22022)로 변경하면 자동화된 공격을 상당 부분 피할 수 있습니다. 이 경우 외부 포트를 원하는 번호로 설정하고, 내부 포트는 22로 유지하면 됩니다.

3. DDNS 설정으로 동적 IP 문제 해결

3.1 DDNS가 필요한 이유

대부분의 가정용 인터넷은 동적 IP를 사용합니다. 즉, ISP가 주기적으로 또는 공유기 재시작 시 외부 IP를 변경할 수 있습니다. IP가 바뀔 때마다 새 주소를 확인해야 한다면 매우 불편합니다.

DDNS(Dynamic DNS)는 이 문제를 해결합니다. 변경되는 IP 주소를 고정된 도메인 이름에 자동으로 연결해주어, myserver.duckdns.org 같은 주소로 항상 접속할 수 있게 됩니다.

3.2 Duck DNS 설정

Duck DNS는 무료로 사용할 수 있는 DDNS 서비스입니다. 설정이 간단하고 안정적입니다.

1단계: Duck DNS 계정 생성

  1. https://www.duckdns.org 접속
  2. 소셜 계정으로 로그인
  3. 원하는 서브도메인 생성 (예: myserver)
  4. 토큰 값 확인 및 저장

2단계: 서버에서 자동 업데이트 스크립트 설정

# 스크립트 디렉토리 생성
mkdir -p ~/duckdns
cd ~/duckdns

# 업데이트 스크립트 생성
nano duck.sh

스크립트 내용:

#!/bin/bash
echo url="https://www.duckdns.org/update?domains=myserver&token=YOUR_TOKEN&ip=" | curl -k -o ~/duckdns/duck.log -K -

스크립트 실행 권한 부여 및 테스트:

# 실행 권한 부여
chmod 700 duck.sh

# 테스트 실행
./duck.sh

# 결과 확인 (OK가 출력되어야 함)
cat duck.log

3단계: 크론탭으로 자동 실행 설정

# 크론탭 편집
crontab -e

# 5분마다 실행하도록 추가
*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

3.3 No-IP 대안

No-IP도 인기 있는 DDNS 서비스입니다. 무료 계정은 30일마다 수동 확인이 필요하지만, 더 많은 도메인 옵션을 제공합니다.

# No-IP 동적 업데이트 클라이언트 설치
cd /usr/local/src
sudo wget https://www.noip.com/client/linux/noip-duc-linux.tar.gz
sudo tar xzf noip-duc-linux.tar.gz
cd noip-2.1.9-1
sudo make
sudo make install

# 설정 및 실행
sudo /usr/local/bin/noip2 -C
sudo /usr/local/bin/noip2

4. SSH 원격 접속 설정

4.1 SSH 서버 설치 및 기본 설정

SSH(Secure Shell)는 원격으로 서버를 관리하는 가장 기본적이고 안전한 방법입니다.

# SSH 서버 설치 (대부분 이미 설치되어 있음)
sudo apt update
sudo apt install openssh-server

# SSH 서비스 상태 확인
sudo systemctl status ssh

# 부팅 시 자동 시작 설정
sudo systemctl enable ssh

4.2 SSH 보안 강화 설정

기본 설정으로도 동작하지만, 보안을 위해 몇 가지 설정을 변경하는 것이 좋습니다.

# SSH 설정 파일 편집
sudo nano /etc/ssh/sshd_config

권장 설정 변경:

# 포트 변경 (선택사항, 기본 22에서 변경)
Port 22022

# root 직접 로그인 금지
PermitRootLogin no

# 비밀번호 인증 (키 설정 후 no로 변경)
PasswordAuthentication yes

# 빈 비밀번호 금지
PermitEmptyPasswords no

# 최대 인증 시도 횟수
MaxAuthTries 3

# 로그인 유예 시간
LoginGraceTime 60

# 특정 사용자만 허용 (선택사항)
AllowUsers yourusername

설정 적용:

# 설정 문법 검사
sudo sshd -t

# SSH 서비스 재시작
sudo systemctl restart ssh

4.3 SSH 키 인증 설정

비밀번호 대신 SSH 키를 사용하면 보안이 크게 향상됩니다. 키 파일이 없으면 접속 자체가 불가능하므로, 무차별 대입 공격으로부터 안전합니다.

클라이언트(로컬 PC)에서 키 생성:

# 키 쌍 생성 (Windows PowerShell 또는 Linux/Mac 터미널)
ssh-keygen -t ed25519 -C "your_email@example.com"

# 또는 RSA 방식 (호환성이 더 좋음)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

서버로 공개키 전송:

# Linux/Mac에서
ssh-copy-id -p 22022 username@server_ip

# Windows PowerShell에서
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh -p 22022 username@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

키 인증 테스트 후 비밀번호 인증 비활성화:

# 키로 접속 테스트
ssh -p 22022 username@server_ip

# 성공하면 서버에서 비밀번호 인증 비활성화
sudo nano /etc/ssh/sshd_config
# PasswordAuthentication no 로 변경

sudo systemctl restart ssh

5. fail2ban으로 보안 강화

5.1 fail2ban이란?

fail2ban은 로그 파일을 모니터링하여 반복적인 로그인 실패를 감지하고, 해당 IP를 자동으로 차단하는 도구입니다. SSH 무차별 대입 공격을 효과적으로 방어할 수 있습니다.

5.2 fail2ban 설치 및 설정

# 설치
sudo apt update
sudo apt install fail2ban

# 기본 설정 파일 복사
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# 설정 편집
sudo nano /etc/fail2ban/jail.local

SSH 보호를 위한 주요 설정:

[DEFAULT]
# 차단 시간 (초)
bantime = 3600

# 감시 시간 창
findtime = 600

# 최대 실패 횟수
maxretry = 3

# 차단에서 제외할 IP (자신의 IP)
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

[sshd]
enabled = true
port = 22022  # SSH 포트에 맞게 변경
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
# fail2ban 시작 및 활성화
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

# 상태 확인
sudo fail2ban-client status
sudo fail2ban-client status sshd

# 차단된 IP 확인
sudo fail2ban-client get sshd banned

# 특정 IP 차단 해제
sudo fail2ban-client set sshd unbanip 123.456.789.0

6. WireGuard VPN 서버 구축

6.1 VPN이 필요한 이유

VPN(Virtual Private Network)을 사용하면 외부에서 접속할 때 마치 집 내부 네트워크에 있는 것처럼 모든 서비스에 접근할 수 있습니다. 개별 포트를 열지 않아도 되므로 보안도 향상됩니다.

WireGuard는 최신 VPN 프로토콜로, 설정이 간단하고 속도가 빠르며 보안성이 뛰어납니다. OpenVPN보다 훨씬 가볍고 현대적입니다.

6.2 WireGuard 서버 설정

# WireGuard 설치
sudo apt update
sudo apt install wireguard

# 서버 키 쌍 생성
cd /etc/wireguard
umask 077
wg genkey | sudo tee privatekey | wg pubkey | sudo tee publickey

# 키 확인
sudo cat privatekey
sudo cat publickey

서버 설정 파일 생성:

sudo nano /etc/wireguard/wg0.conf
[Interface]
# 서버의 VPN 내부 IP
Address = 10.0.0.1/24
# 서버의 개인키
PrivateKey = 서버_개인키_내용
# WireGuard 포트
ListenPort = 51820
# 패킷 포워딩 설정
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# 클라이언트 1의 공개키
PublicKey = 클라이언트_공개키
# 클라이언트에 할당할 IP
AllowedIPs = 10.0.0.2/32

IP 포워딩 활성화:

# IP 포워딩 설정
sudo nano /etc/sysctl.conf
# net.ipv4.ip_forward=1 주석 해제

# 적용
sudo sysctl -p

WireGuard 시작:

# 인터페이스 시작
sudo wg-quick up wg0

# 상태 확인
sudo wg show

# 부팅 시 자동 시작
sudo systemctl enable wg-quick@wg0

6.3 클라이언트 설정

클라이언트 키 생성 (서버에서):

wg genkey | tee client_privatekey | wg pubkey > client_publickey

클라이언트 설정 파일:

[Interface]
PrivateKey = 클라이언트_개인키
Address = 10.0.0.2/24
DNS = 8.8.8.8

[Peer]
PublicKey = 서버_공개키
Endpoint = your.ddns.domain:51820
AllowedIPs = 0.0.0.0/0  # 모든 트래픽을 VPN으로
# 또는 AllowedIPs = 192.168.1.0/24, 10.0.0.0/24  # 특정 네트워크만
PersistentKeepalive = 25

WireGuard 공식 앱은 Windows, Mac, iOS, Android에서 모두 사용 가능합니다. 설정 파일을 가져오거나 QR 코드로 간편하게 설정할 수 있습니다.

7. 방화벽 설정

7.1 UFW 기본 설정

UFW(Uncomplicated Firewall)는 Ubuntu의 기본 방화벽 도구입니다. 간단한 명령어로 방화벽 규칙을 관리할 수 있습니다.

# UFW 상태 확인
sudo ufw status

# 기본 정책 설정
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH 허용 (포트 변경 시 해당 포트로)
sudo ufw allow 22022/tcp

# HTTP/HTTPS 허용
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# WireGuard 허용
sudo ufw allow 51820/udp

# UFW 활성화
sudo ufw enable

# 규칙 확인
sudo ufw status verbose

8. 정리 및 네트워크 점검 체크리스트

지금까지 홈서버의 네트워크 설정과 원격 접속에 대해 알아보았습니다. 마지막으로 모든 설정이 제대로 되었는지 점검해봅시다.

설정 완료 체크리스트

  • 서버에 고정 IP가 할당되어 있는가?
  • 공유기에서 필요한 포트포워딩이 설정되어 있는가?
  • DDNS가 정상적으로 IP를 업데이트하는가?
  • SSH 키 인증이 작동하는가?
  • fail2ban이 활성화되어 있는가?
  • 방화벽이 적절히 설정되어 있는가?
  • VPN 연결이 정상적으로 되는가? (선택)

외부 접속 테스트

# 외부에서 SSH 접속 테스트 (모바일 데이터 등 외부 네트워크에서)
ssh -p 22022 username@your.ddns.domain

# 포트 오픈 확인 (외부 서비스 이용)
# https://www.yougetsignal.com/tools/open-ports/

이제 여러분의 홈서버는 어디서든 안전하게 접속할 수 있는 상태가 되었습니다. 다음 편에서는 파일 서버 구축에 대해 알아보겠습니다. Samba를 이용한 Windows 공유, NFS 설정, 그리고 효율적인 디스크 관리 방법까지 다룰 예정입니다.