포트포워딩 이것만 기억하세요
●포트포워딩 개념설명
포트포워딩에 대해 알아보겠습니다. 네트워크는 일상에서 자주 접하며, 이 개념을 이해하기 위해서는 네트워크의 기본 동작을 알 필요가 있습니다. 간단히 말해, 포트포워딩은 다양한 환경(가정, 카페, 공항 등)에서 흔히 사용되는 네트워크 개념입니다. 예를 들어, 다양한 기기가 같은 IP 주소를 공유할 때, 고유한 내부 IP 주소와 포트 번호를 사용하여 외부 네트워크와의 통신을 가능하게 합니다.
실제 IP 주소와는 다른 사설 IP 주소를 사용하여 내부 네트워크에서만 통신합니다. 외부와의 통신 시에는 네트워크 주소 변환(NAT)을 통해 특정 포트 번호에 기반한 맵핑을 사용하여 통신합니다. 이는 기기 간의 충돌을 방지하고 효율적인 네트워크 관리를 가능하게 합니다.
포트포워딩 설정 방법으로는 Virtual Box 실습 환경 설정, Linux에서 Nginx를 사용한 로컬 포트 포워딩 설정, 그리고 Docker를 사용한 포트 포워딩 실습이 있습니다. 이 방법들은 기본 원리는 같지만, 구조적 차이가 있어 각각 다루는 것이 중요합니다.
●윈도우와 Virtual Box 리눅스 포트포워딩 구조
Windows 환경에서 Linux로 접속하기 위해 Virtual Box와 같은 가상 머신 환경을 사용할 때, 포트 포워딩 설정은 핵심적인 단계입니다. 사용자가 이 설정에 대해 혼란을 느끼는 경우가 많으며, 이는 다양한 설정 실수로 이어질 수 있습니다.
*Virtual Box 내 포트 포워딩 설정 과정:
1. 호스트(HOST): 여기서는 Windows를 의미합니다.
2. 게스트(GUEST): Linux 시스템을 의미합니다.
Windows에서 특정 포트(예: 2222)를 사용하여 Linux의 SSH 기본 포트(22번)로 접속하도록 설정하는 것이 일반적입니다. 이런 설정은 Windows에서 이루어지며, 설정된 포트를 통해 접속하면 직접적으로 Linux로 연결됩니다.
*중요한 포트 번호는 다음과 같습니다
- SSH (22번)
- HTTP (80번)
- HTTPS (443번)
이 포트 번호들은 기본적으로 알고 있어야 하며, 네트워크 통신에서 중요한 역할을 합니다.
Virtual Box에서는 간단한 터미널을 통해 Linux에 접속할 수 있으며, 이는 물리적 컴퓨터에 Linux를 설치하고 직접 모니터와 키보드를 연결하여 사용하는 것과 유사한 경험을 제공합니다. Linux에 이미 접속한 상태에서 추가로 SSH를 통해 접속할 필요는 없습니다.
로컬 환경에서 Linux로의 접속이 필요한 경우, 포트 포워딩을 설정하거나 네트워크 어댑터를 브리지 모드로 설정해 Windows와 동일한 네트워크 대역을 사용할 수 있습니다. 이를 통해 포트 포워딩 없이도 Linux에 직접 접속할 수 있습니다.
*네트워크 주소 변환(NAT)과 포트 포워딩
Virtual Box와 관련된 네트워크 인터페이스를 통해 주소 변환이 이루어지며, 이 과정을 통해 Windows에서 Linux로의 접속이 가능해집니다. 이 설정을 통해, 특정 호스트 포트를 게스트 포트에 매핑하여, 외부에서 내부 네트워크의 특정 서비스에 접근할 수 있게 됩니다.
실습을 통해 사용자는 이러한 설정을 직접 지정하고 확인할 수 있으며, 이는 가상 환경에서의 네트워크 구성과 관리를 이해하는 데 도움이 됩니다.
●윈도우와 Virtual Box 리눅스 포트포워딩 설정 실습
.
Virtual Box를 활용하여 Windows 환경에서 리눅스 가상 머신으로 접속하는 과정은 다음 단계로 이루어집니다
1. Virtual Box 실행: 먼저 Virtual Box를 실행합니다.
2. 네트워크 설정 변경: 가상 머신의 네트워크 설정을 '어댑터 브릿지'에서 원하는 설정으로 변경합니다. 이 설정 변경을 통해 가상 머신이 외부 네트워크와의 연결을 가능하게 합니다.
3. 포트 포워딩 설정: Virtual Box의 네트워크 설정 내에서 포트 포워딩 옵션을 선택하여 새로운 포트 포워딩 규칙을 추가합니다. 여기서 '호스트 포트'는 Windows 측 포트를, '게스트 포트'는 리눅스 가상 머신 내의 포트를 의미합니다. 예를 들어, 호스트 포트 2222를 게스트의 SSH 포트 22에 연결하여 외부에서 가상 머신에 접속할 수 있도록 설정합니다.
4. 가상 머신 부팅: 설정을 완료한 후, 가상 머신을 부팅하여 네트워크 연결을 활성화합니다. 이때 가상 머신은 설정된 네트워크 규칙에 따라 외부 접속이 가능한 상태가 됩니다.
5. SSH 접속 실습: 실습을 위해, 사용자는 SSH 클라이언트(예: Windows의 CMD, PowerShell, 또는 타 터미널 인터페이스)를 사용하여 가상 머신에 접속할 수 있습니다. 이 과정에서 설정한 호스트 포트를 통해 리눅스 가상 머신의 SSH 서비스에 접속하게 됩니다.
6. 실제 작업 확인: 가상 머신 내에서 파일 생성 또는 기타 작업을 수행한 후, 동일한 작업 결과를 Windows 측 SSH 클라이언트를 통해서도 확인할 수 있습니다. 이는 가상 머신과 SSH 클라이언트 간의 네트워크 연결이 성공적으로 이루어졌음을 확인하는 방법 중 하나입니다.
이 과정을 통해, 사용자는 Virtual Box 가상 환경에서의 포트 포워딩 설정과 SSH를 통한 원격 접속 방법에 대해 실습할 수 있습니다. 이는 네트워크 설정과 관리에 대한 이해를 높이는 데 도움이 될 것입니다.
●Apache(httpd) 포트포워딩 설정 실습
이번 실습에서는 Apache(httpd) 웹 서버를 기준으로 포트 포워딩 설정을 진행해보겠습니다. 포트 포워딩이란 특정 IP 주소와 포트로 접속했을 때, 그 요청을 다른 특정 포트로 전달하는 과정을 의미합니다. 이는 로컬 환경뿐만 아니라 네트워크 주소 변환(NAT) 개념과 결합하여 외부에서의 접속을 가능하게 합니다.
1. Apache(httpd) 웹 서버 설치 및 실행
- 가상 환경 또는 리눅스 서버에서 Apache(httpd) 웹 서버를 설치합니다.
- 설치 후 서비스를 시작하여 Apache 웹 서버가 정상적으로 동작하는지 확인합니다.
2. 포트 포워딩 설정 실습
- 외부에서 80번 포트(HTTP 기본 포트)로 접속했을 때, Java Spring Boot 애플리케이션이 구동되고 있는 다른 포트(예: 8080)로 요청을 전달하도록 설정합니다.
- 이 과정에서는 Apache 웹 서버의 설정 파일을 수정하여 포트 포워딩 규칙을 정의합니다.
3. 실습 환경 준비
- 실습을 위해 리얼리눅스(RealLinux)와 같은 가상 환경을 사용할 수 있습니다. 이 환경은 AWS와 유사하지만 더 빠른 속도를 제공합니다.
- 가상 환경에 Java, Apache(httpd), 그리고 Spring Boot 애플리케이션을 설치하고 구성합니다.
4. 실제 실습 진행
- Virtual Box와 같은 가상화 소프트웨어를 사용하여 가상 머신을 준비하고, 필요한 소프트웨어를 설치합니다.
- Apache 웹 서버의 설정 파일을 수정하여 포트 포워딩 규칙을 추가합니다. 이때, 외부에서의 접속을 내부적으로 처리할 수 있도록 설정합니다.
5. 테스트 및 확인
- 설정을 완료한 후, 외부에서의 접속을 시도하여 포트 포워딩이 제대로 구성되었는지 확인합니다.
- 이 과정을 통해, 사용자는 네트워크 설정과 웹 서버 구성에 대한 실제 경험을 얻을 수 있습니다.
● Docker와 컨테이너(nginx) 포트포워딩 설정 실습
Docker 환경에서 컨테이너를 사용하여 nginx 웹 서버를 구동하고 포트 포워딩 설정을 통해 외부에서 접속이 가능하게 하는 실습을 진행해보겠습니다. 이 실습은 Docker의 네트워킹 기능을 활용하여 컨테이너의 내부 포트를 외부 포트에 매핑하는 과정을 포함합니다.
1. Docker 및 컨테이너 소개
- Docker는 컨테이너 기반의 가상화 기술로, 컨테이너 내부는 독립된 환경으로 구성됩니다.
- nginx를 예로 들면, 기본적으로 80번 포트를 사용하지만, 컨테이너 내부에서는 이 포트가 외부로 직접 노출되지 않습니다.
2. 포트 포워딩 설정 실습
- Docker를 사용할 때는 컨테이너의 내부 포트를 호스트의 포트에 매핑하여 외부에서 접속할 수 있도록 설정합니다.
- 예를 들어, 컨테이너의 80번 포트를 호스트의 8000번 포트에 매핑하여 외부에서 컨테이너의 nginx 서버에 접속할 수 있게 합니다.
3. 실습 준비 및 실행
- 실습 환경으로 사용되는 Docker는 사전에 설치되어 있어야 하며, 실습 환경은 리얼리눅스(RealLinux)와 같은 가상 환경에서 진행할 수 있습니다.
- nginx 컨테이너를 구동하며, `docker run` 명령을 사용하여 포트 포워딩 설정을 포함하여 컨테이너를 실행합니다.
4. 실습 명령어 예시
- `docker run -p 8000:80 nginx` 명령어를 통해, 컨테이너의 80번 포트를 호스트의 8000번 포트에 매핑하고 nginx 컨테이너를 실행합니다.
5. 접속 및 확인
- 포트 포워딩 설정 후, 외부에서 호스트의 8000번 포트로 접속하면, Docker가 해당 요청을 컨테이너의 80번 포트로 전달합니다.
- 이를 통해 사용자는 외부에서 컨테이너 내부의 nginx 웹 서버에 접속할 수 있습니다.
다음 내용과 관련된 리얼리눅스 강의는 도커/K8s/클라우드(AWS) 네트워크 완전 정복 :https://reallinux.co.kr/course/se_network