l 대상 : 중간
  • 전제 조건 : 우분투, 터미널, 기본 네트워크 개념에 대한 기본 지식

  • 기술적 개념 : NAT, 포트 포워딩, 방화벽, 역방향 프록시

  • 시스템 명령어 : 터미널 사용, 네트워크 구성

  • 고급 섹션 : 모니터링, 보안, 클라우드 대안

문제: NAT와 개인 주소

문제 : Ubuntu 머신에서 웹 애플리케이션을 개발하고 있고, 이를 가정 네트워크 외부에서 접근 가능하게 만들고 싶으신가요? 그렇다면 올바른 곳에 오셨습니다! 이 글에서는 인터넷 박스의 포트 포워딩을 설정하여 로컬 서비스(예: 포트 8080)를 인터넷에 노출하는 방법을 알아볼게요.

기본적으로, 귀하의 인터넷 박스는 NAT(네트워크 주소 변환)를 사용하여 가정 네트워크의 모든 기기 간에 하나의 공용 IP 주소를 공유합니다. 로컬 머신은 인터넷에서 라우팅될 수 없는 사설 IP 주소(192.168.x.x, 10.x.x.x 등)를 사용합니다.

Ubuntu 머신에서 서비스를 실행할 때(예: 포트 8080의 웹 서버), 해당 서비스는 로컬 네트워크에서만 접근할 수 있습니다. 인터넷에서 접근할 수 있도록 하려면 포트 포워딩을 구성해야 합니다.

단계 1 : 공용 IP 주소 식별

먼저, 인터넷 연결의 공개 IP 주소를 가져옵시다:

# Plusieurs méthodes au choix
curl ifconfig.me
curl ipecho.net/plain
wget -qO- http://ipecho.net/plain

# Ou encore
curl -s checkip.amazonaws.com

이 IP 주소는 사용자들이 귀하의 서비스에 접속할 때 사용할 주소입니다.

단계 2: Ubuntu 기기의 로컬 IP 주소를 확인합니다

귀하의 Ubuntu 머신은 로컬 네트워크에서 사설 IP 주소를 가지고 있습니다. 이를 확인하려면 :

# Afficher toutes les interfaces réseau
ip addr show

# Ou plus spécifiquement pour l'interface principale
ip route get 1.1.1.1 | awk '{print $7; exit}'

# Alternative avec hostname
hostname -I | awk '{print $1}'

이 주소를 기록해 두세요 (예시`192.168.1.100`우리는 이것이 구성을 위해 필요할 것입니다.

3단계: 박스에서 포트 포워딩 설정하기

구성은 박스 모델에 따라 다르지만 원리는 동일합니다:

관리자 인터페이스에 접근

브라우저를 열고 라우터의 웹 인터페이스로 이동하세요:

  • Freebox:`192.168.1.1` ou mafreebox.freebox.fr

  • 라이브박스 오렌지:`192.168.1.1`

  • SFR 박스:`192.168.1.1`

  • Bbox Bouygues:`192.168.1.254`

리다이렉션 구성

포트 포워딩 전용 섹션을 찾으세요(이름은 다를 수 있음):

  • 포트 포워딩

  • NAT/PAT

  • 포트 포워딩

  • 게임 서버

이 매개변수로 새로운 규칙을 생성하세요:

필드 가치

이름/설명

Ubuntu 웹 서비스" (또는 다른 명시적인 이름)

외부 포트(또는 공용 포트)

8080

내부 IP 주소

Ubuntu 머신의 IP 주소 (예: 192.168.1.100)

내부 포트 (또는 프라이빗 포트)

8080

프로토콜

TCP

상태

활성화된

4단계 : Ubuntu에서 서비스 구성

서비스가 localhost가 아닌 모든 인터페이스에서 수신하도록 확인하세요:

# ✅ Correct : écoute sur toutes les interfaces
python3 -m http.server 8080 --bind 0.0.0.0

# ❌ Incorrect : écoute seulement en local
python3 -m http.server 8080 --bind 127.0.0.1

서비스가 올바르게 수신 중인지 확인하려면 :

# Vérifier les ports en écoute
sudo netstat -tlnp | grep :8080
# ou avec ss (plus moderne)
sudo ss -tlnp | grep :8080

당신은 무언가를 보는 것처럼 보여야 합니다.0.0.0.0:8080`그리고 아니다`127.0.0.1:8080.

5단계: Ubuntu 방화벽 구성

Ubuntu는 기본적으로 UFW(Uncomplicated Firewall)를 사용합니다. 상태를 확인하고 필요하면 포트를 허용하세요 :

# Vérifier le statut du pare-feu
sudo ufw status

# Si le pare-feu est actif, autoriser le port 8080
sudo ufw allow 8080/tcp

# Ou plus spécifiquement pour un service web
sudo ufw allow 'Apache'  # si vous utilisez Apache
sudo ufw allow 'Nginx Full'  # si vous utilisez Nginx

단계 6: 테스트 및 검증

로컬 네트워크에서 테스트

먼저, 로컬 네트워크의 다른 머신에서 접근을 테스트해 보세요:

# Remplacez par l'IP locale de votre machine Ubuntu
curl http://192.168.1.100:8080

외부에서 테스트

지금, 공용 IP를 사용하여 인터넷에서 테스트해 보세요 :

# Remplacez par votre IP publique
curl http://VOTRE_IP_PUBLIQUE:8080

또한 온라인 도구를 사용할 수 있습니다. 예를 들어:

모범 사례 및 보안

기본 보안

# Configurer fail2ban pour protéger contre les attaques par force brute
sudo apt update && sudo apt install fail2ban

# Limiter l'accès avec UFW (exemple : autoriser seulement certaines IP)
sudo ufw allow from 203.0.113.0/24 to any port 8080

연결 모니터링

# Surveiller les connexions en temps réel
sudo netstat -an | grep :8080

# Logs des connexions (selon votre application)
sudo tail -f /var/log/nginx/access.log  # pour Nginx
sudo journalctl -f -u your-service      # pour un service systemd

리버스 프록시 사용

보안과 유연성을 위해 Nginx와 같은 역방향 프록시 사용을 고려해 보세요:

server {
    listen 80;
    server_name votre-domaine.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

포트 포워딩 대안

클라우드 솔루션

  • ngrok임시 보안 터널

  • Cloudflare 터널무료이고 안전한 솔루션

  • serveo.net: 간단한 SSH 터널

# Exemple avec ngrok
ngrok http 8080

# Exemple avec serveo
ssh -R 80:localhost:8080 serveo.net

VPS 및 리버스 프록시

전문적인 용도로는 VPS를 사용하고, 로컬 인프라를 향하는 리버스 프록시를 VPN을 통해 연결하는 것을 고려하세요.

문제 해결

일반적인 문제

문제 해결책

외부에서 접근할 수 없는 서비스

포트 포워딩 구성을 확인하고 서비스가 0.0.0.0에서 수신 대기 중인지 확인하세요.

연결이 거부되었습니다.

서비스가 시작되지 않았거나 127.0.0.1에서만 수신 대기 중입니다.

연결 타임아웃

방화벽 문제(박스 또는 Ubuntu) 또는 포트 포워딩이 잘못 구성됨

공개 IP는 정기적으로 변경됩니다

동적 DNS(DynDNS, No-IP 등)를 구성하세요.

네트워크 디버그

# Tester la connectivité locale
telnet localhost 8080

# Tester depuis une autre machine du réseau
telnet 192.168.1.100 8080

# Vérifier les routes réseau
ip route show

# Analyser le trafic réseau
sudo tcpdump -i any port 8080

결론

인터넷에서 로컬 서비스를 노출하려면 포트 포워딩, 보안, 모니터링을 신중하게 구성해야 합니다. 이 접근 방식은 개발이나 개인 프로젝트에는 완벽하지만, 프로덕션 환경에서는 VPS, CDN, 클라우드 서비스와 같은 더 견고한 대안을 고려해야 합니다.

중요한 것은 항상 보안을 마음속에 두는 것입니다: 강력한 비밀번호를 사용하고, 시스템을 정기적으로 업데이트하며, 노출된 서비스에 대한 접근을 모니터링하세요.

주저하지 마시고 경험과 질문을 댓글에 공유해 주세요!

관련 기사