Aller au contenu principal

33. Port Redirection and Network Address Translation (NAT)


포트 리디렉션 이해

사설 내부 네트워크에서 서버가 운영될 때, 공개 서버가 중간 역할을 합니다. 포트 리디렉션을 통해 들어오는 연결을 적절한 사설 서버로 전달하는 규칙을 만들 수 있습니다.

예시:

  • 포트 80 → 서버 1
  • 포트 993 → 서버 2
  • 포트 3306 → 서버 3

NAT (Network Address Translation) 이해

네트워크 패킷에는 출발지/목적지 IP 주소 정보가 포함됩니다. 외부 장치(IP: 203.0.0.113)가 공개 서버(IP: 123.4)의 포트 80으로 데이터를 전송하면, 서버는 내부 서버(10.0.0.5)로 전달합니다. 그러나 내부 서버의 응답은 공개 서버를 거치지 않고 외부 IP로 직접 연결하려 합니다.

마스커레이딩(Masquerading): 공개 서버가 출발지 IP를 자신의 공개 주소로 교체합니다. 이는 가정용 라우터가 여러 장치가 단일 공개 IP를 공유하게 하는 방식과 동일합니다.

Linux에서 포트 리디렉션 설정

IP 포워딩 활성화

인터페이스 간 패킷 전달을 허용하려면 IP 포워딩을 활성화해야 합니다. Ubuntu에서 /etc/sysctl.d/99-sysctl.conf 편집 후 주석 해제:

net.ipv4.ip_forward=1

설정 재로드:

sudo sysctl --system

iptables로 설정

포트 8080으로 들어오는 TCP 연결을 내부 주소 192.168.0.5의 포트 80으로 전달:

sudo iptables -t nat -A PREROUTING -i enp1s0 -s 10.0.0.0/24 -p tcp --dport 8080 -j DNAT --to-destination 192.168.0.5:80

반환 패킷이 공개 서버를 통해 라우팅되도록 마스커레이딩 설정:

sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o enp6s0 -j MASQUERADE

nftables 대안

최신 시스템에서는 iptables 대신 nftables를 사용할 수 있습니다. 활성 규칙 확인:

sudo nft list ruleset

많은 배포판이 iptables 규칙을 자동으로 nftables로 변환합니다.

영구 규칙 유지

iptables 규칙은 임시적이며 재부팅 후 사라집니다. iptables-persistent 설치:

sudo apt install iptables-persistent

이후 수정 시:

sudo netfilter-persistent save

보안 고려사항

항상 규칙을 특정 인터페이스와 IP 범위로 제한합니다. UFW를 사용한 예시:

sudo ufw allow 22
sudo ufw enable
sudo ufw route allow from 10.0.0.0/24 to 192.168.0.5

빠른 참조 명령어

동작명령어
IP 포워딩 활성화/etc/sysctl.d/99-sysctl.conf 편집 후 sudo sysctl --system
iptables NAT 규칙 확인sudo iptables -L -t nat
iptables NAT 테이블 초기화sudo iptables --flush --table nat
nftables 규칙 확인sudo nft list ruleset
규칙 저장sudo netfilter-persistent save