Network
NAT Loopback (Hairpin NAT)이란? 개념과 해결 방법
로아다
2025. 2. 24. 15:42
728x90
반응형
1. NAT Loopback이란?
📌 NAT Loopback (Hairpin NAT) 정의
NAT Loopback, 또는 Hairpin NAT은 내부 네트워크에서 공인 IP를 통해 같은 내부망의 서버에 접근할 때 발생하는 문제를 해결하는 기능입니다. 일반적으로 라우터는 내부에서 공인 IP로 접속하려는 요청을 외부로 내보내지 않기 때문에, 추가적인 설정이 필요합니다.
📌 NAT Loopback 문제 상황
예를 들어, 다음과 같은 네트워크 환경이 있다고 가정해 보겠습니다.
- 웹서버 IP: 192.168.0.204
- 게이트웨이(라우터) IP: 192.168.0.1
- 내 PC(클라이언트) IP: 192.168.0.44
- 공인 IP: 203.0.113.10
- 도메인: example.com
🚀 외부에서 example.com으로 접속하면 **공인 IP(203.0.113.10) → 웹서버(192.168.0.204)**로 정상적으로 연결됩니다.
하지만 내부 PC(192.168.0.44)에서 example.com을 입력하면, DNS는 공인 IP(203.0.113.10)를 반환하지만 내부망에서 직접 이 공인 IP로 접속이 불가능한 문제가 발생합니다.
2. 왜 NAT Loopback이 필요할까?
🚫 NAT Loopback이 없을 때 발생하는 문제
- 내부 PC(192.168.0.44)가 example.com(203.0.113.10)로 요청을 보냄
- 라우터(192.168.0.1)가 요청을 받음
- 라우터는 "이 IP는 내 공인 IP인데?"라고 인식
- 외부로 나가지 않고 내부에서 처리하려고 함
- 트래픽을 차단하거나, 소스 IP(192.168.0.44)를 자신의 IP(192.168.0.1)로 변경 후 웹서버(192.168.0.204)로 보냄
- 웹서버(192.168.0.204)는 요청을 받지만…
- 출발지 IP가 **192.168.0.1(게이트웨이)**로 변경됨
- 따라서 웹서버 로그에는 클라이언트의 실제 IP(192.168.0.44) 대신 게이트웨이(192.168.0.1)가 기록됨
🚀 이 문제를 해결하려면 NAT Loopback을 활성화해야 합니다!
3. NAT Loopback 활성화 방법
✅ 1) 라우터에서 NAT Loopback 설정하기 (일반적인 공유기)
일부 고급 공유기에는 NAT Loopback 옵션이 존재합니다.
- 라우터 설정 페이지 접속
- 브라우저에서 192.168.0.1 입력 후 관리자 계정으로 로그인
- NAT 관련 설정 찾기
- "고급 설정" → "NAT", "포트 포워딩", 또는 "방화벽(Firewall)" 메뉴 탐색
- "NAT Loopback 허용(Enable NAT Loopback)" 옵션이 있는지 확인
- NAT Loopback 활성화 후 저장
- 설정 후 "적용" 또는 "저장"
- 라우터 재부팅 후 테스트
✅ 이 설정을 하면 내부에서도 공인 IP(203.0.113.10)로 접근 가능하고, 웹서버 로그에 실제 IP(192.168.0.44)가 찍힘!
✅ 2) 리눅스 서버에서 iptables NAT Loopback 설정하기 (CentOS 7.9 기준)
만약 라우터에서 NAT Loopback 설정이 불가능하다면, 리눅스 서버에서 직접 NAT 규칙을 추가할 수 있습니다.
# 내부망에서 공인 IP(203.0.113.10)로 접속 시, 웹서버(192.168.0.204)로 변환
sudo iptables -t nat -A PREROUTING -d 203.0.113.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.204
# 웹서버에서 나오는 응답이 내부 클라이언트(192.168.0.44)로 정상 전달되도록 처리
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.0.204 -j MASQUERADE
# 설정 저장
sudo iptables-save > /etc/sysconfig/iptables
4. 결론
✅ NAT Loopback(헤어핀 NAT)이 없으면?
- 내부 PC(192.168.0.44)에서 공인 IP(203.0.113.10)로 접속하면, 라우터가 요청을 차단하거나 소스 IP를 192.168.0.1(게이트웨이)로 변경
- 웹서버(192.168.0.204)에서 클라이언트의 실제 IP가 아니라 게이트웨이(192.168.0.1) IP가 찍힘 ❌
✅ NAT Loopback을 활성화하면?
- 내부망에서도 공인 IP(203.0.113.10)로 접속 가능
- 웹서버(192.168.0.204)에서 클라이언트의 실제 IP(192.168.0.44)가 찍힘 ✅
✅ 해결 방법
- 라우터에서 NAT Loopback 기능 활성화 (권장)
- 리눅스 서버에서 iptables NAT 설정 추가 (라우터에서 설정 불가능할 때)
728x90
반응형