원문 보기: https://dawoum.duckdns.org/wiki/Port_forwarding
컴퓨터 네트워킹에서, 포트 포워딩(port forwarding) 또는 포트 매핑(port mapping)은 패킷이 라우터나 방화벽과 같은 네트워크 게이트웨이를 횡단하는 동안 통신 요청을 한 주소와 포트 번호 조합에서 또 다른 조합으로 리다이렉션하는 네트워크 주소 변환 (NAT)의 응용입니다. 이 기술은 통신의 목적지 IP 주소와 포트 번호를 내부 호스트로 다시 매핑함으로써 보호되거나 위장된 (내부) 네트워크에 있는 호스트의 서비스를 게이트웨이 (외부 네트워크)의 반대편에 있는 호스트에서 사용할 수 있도록 하는 데 가장 공통적으로 사용됩니다.
Purpose
포트 포워딩은 원격 컴퓨터, 예를 들어, 인터넷 호스트와 지역 영역 네트워크 (LAN) 내의 특정 컴퓨터 또는 서비스와의 연결을 용이하게 합니다.
전형적인 주거 네트워크에서, 노드는 라우터 또는 네트워크 주소 번역기 (NAT/NAPT)에 연결된 DSL 또는 케이블 모뎀을 통해 인터넷 접근을 얻습니다. 개인 네트워크에서 호스트는 이더넷 스위치에 연결되거나 무선 LAN을 통해 통신합니다. NAT 장치의 외부 인터페이스는 공개 IP 주소로 구성됩니다. 다른 한편, 라우터 뒤에 있는 컴퓨터는 각각 개인 IP 주소로만 통신하기 때문에 인터넷 호스트에게는 보이지 않습니다.
포트 포워딩을 구성할 때, 네트워크 관리자는 특정 호스트에 위치한 개인 네트워크에서 서비스와의 통신의 독점적으로 사용을 위해 게이트웨이에서 하나의 포트 번호를 따로 설정합니다. 외부 호스트는 네트워크-내부 서비스와 통신하기 위해 이 포트 번호와 게이트웨이 주소를 알아야 합니다. 종종, 웹 서비스 (HTTP)에 대한 포트 번호 80과 같은 잘-알려진 인터넷 서비스의 포트 번호는 공통적인 인터넷 서비스가 개인 네트워크 내 호스트에서 구현될 수 있도록 포트 포워딩에 사용됩니다.
일반적인 응용은 다음을 포함합니다:
- 개인 LAN 내에서 공개 HTTP 서버를 실행합니다
- 인터넷에서 개인 LAN에 있는 호스트로의 보안 쉘 접근을 허용합니다
- 인터넷에서 개인 LAN에 있는 호스트로의 FTP 접근을 허용합니다
- 개인 LAN 내에서 공개적으로 사용 가능한 게임 서버를 실행합니다
관리자는 게이트웨이 운영 시스템에서 포트 포워딩을 구성합니다. 리눅스 커널에서, iptables 또는 netfilter 커널 구성 요소에서 패킷 필터 규칙에 의해 달성됩니다. Yosemite (OS 10.10.X) 이전의 BSD와 macOS 운영 시스템은 그것을 Ipfirewall (ipfw) 모듈에서 구현하고, 반면에 Yosemite로 시작하는 macOS 운영 시스템은 그것을 Packet Filter (pf) 모듈에서 구현합니다.
게이트웨이 장치에서 사용될 때, 포트 포워딩은 목적지 주소와 포트를 번역하기 위해 단일 규칙으로 구현될 수 있습니다. (리눅스 커널에서, 이것이 DNAT 규칙입니다). 이 경우에서, 소스 주소와 포트는 변경되지 않았습니다. 네트워크의 기본 게이트웨이가 아닌 컴퓨터에서 사용될 때, 소스 주소는 번역하는 기계의 주소로 변경되어야 하거나, 패킷은 번역기를 우회할 것이고 연결이 실패할 것입니다.
포트 포워딩이 프록시 프로세스 (예를 들어, 응용 계층 방화벽, 방화벽을 기반으로 하는 SOCKS 또는 TCP 회로 프록시를 통해)에 의해 구현될 때, 패킷이 실제로 번역되지 않으며, 오직 데이터만 프록시됩니다. 이것은 보통 소스 주소 (및 포트 번호)가 프록시 기계의 주소로 변경되는 결과를 초래합니다.
보통 개인 호스트 중 하나만 특정 포워딩된 포트를 한 번에 사용할 수 있지만, 구성은 때때로 원래 호스트의 소스 주소에 의해 접근을 구별하는 것이 가능합니다.
유닉스-계열 운영 시스템은 때때로 1024보다 작은 포트 번호가 루트 사용자로 실행하는 소프트웨어에 의해서만 생성될 수 있는 포트 포워딩을 사용합니다. 슈퍼 사용자 권한으로 실행하는 것 (포트를 바인딩하기 위해)은 호스트에 대한 보안 위험이 될 수 있고, 따라서 포트 포워딩은 응용 프로그램 소프트웨어가 줄어든 권한을 갖는 공통 공통 시스템 사용자로 실행될 수 있도록 낮은-숫자 포트를 또 다른 높은-숫자 포트로 리다이렉션합니다.
Universal Plug and Play 프로토콜 (UPnP)은 주거용 인터넷 게이트웨이에 포트 포워딩의 인스턴스를 자동으로 설치하는 기능을 제공합니다. UPnP는 인터넷 게이트웨이가 Simple Service Discovery Protocol (SSDP)를 통해 개인 네트워크에 존재하는 네트워크 서비스인 Internet Gateway Device Protocol (IGD)를 정의합니다. 인터넷-기반 서비스를 제공하는 응용은 그러한 게이트웨이를 발견하고 UPnP IGD 프로토콜을 게이트웨이에 포트 번호를 예약하기 위해 사용하고 게이트웨이를 패킷을 듣는 소켓으로 전달하도록 유발합니다.
Types
포트 포워딩은 다음과 같은 특정 유형: 지역, 원격, 및 동적 포트 포워딩에 의해 구별될 수 있습니다.
Local port forwarding
지역 포트 포워딩은 가장 공통적인 유형의 포트 포워딩입니다. 그것은 사용자가 지역 컴퓨터에서 또 다른 서버로 연결하도록, 즉, 보안 쉘(SSH) 클라이언트와 같은 컴퓨터에서 실행하는 또 다른 클라이언트 응용 프로그램에서 데이터를 전달하도록 허용하기 위해 사용합니다. 지역 포트 포워딩을 사용함으로써, 특정 웹 페이지를 차단하는 방화벽은 우회될 수 있습니다.
SSH 클라이언트에서 연결은, SSH 서버를 통해, 의도된 목적지 서버로 전달됩니다. SSH 서버는 보안 터널을 통해 지정된 포트 (이는 SSH 클라이언트를 실행하는 호스트에 대한 지역임)에서 일부 목적지 호스트와 포트로 보안 터널을 통해 데이터를 리다이렉션하도록 구성됩니다. 지역 포트는 SSH 클라이언트와 같은 컴퓨터에 있고, 이 포트는 "전달된 포트"입니다. 같은 컴퓨터에서, 같은 목적지 호스트와 포트에 연결을 원하는 임의의 클라이언트는 (목적지 호스트와 포트에 직접적이 아닌) 전달된 포트에 연결하도록 구성될 수 있습니다. 이 연결이 수립된 후, SSH 클라이언트는 전달된 포트에서 듣고 SSH 서버로 보안 터널을 통해 해당 포트로 응용 프로그램에 의해 전송된 모든 데이터를 해당 포트로 지시합니다. 서버는 데이터를 해독하고, 그런-다음 목적지 호스트와 포트로 리다이렉션합니다.
지역 포트 포워딩의 일부 사용:
- 지역 포트 포워딩을 메일을 받기 위해 사용합니다
- SSH 터널을 사용하여 노트북에서 웹 사이트에 연결합니다.
Remote port forwarding
이 포트 포워딩의 형태는 SSH의 클라이언트 측에 있는 서비스를 접근하기 위해 보안 쉘 (SSH) 연결의 서버 측면의 응용 프로그램을 활성화합니다. SSH 외에도, 같은 일반적인 목적을 위해 원격 포트 포워딩을 활용하는 독점 터널링 체계가 있습니다. 다시 말해, 원격 포트 포워딩은 사용자에게 터널, SSH, 또는 또 다른 것의 서버 측에서 터널의 클라이언트 측에 있는 원격 네트워크 서비스에 연결하도록 허용합니다.
원격 포트 포워딩을 사용하기 위해, 목적지 서버 (터널의 클라이언트 쪽)의 주소와 두 개의 포트 번호가 알려져 있어야 합니다. 선택된 포트 번호는 어떤 응용 프로그램이 사용될 것인지에 따라 선택됩니다.
원격 포트 포워딩은 다른 컴퓨터에게 원격 서버에서 호스팅되는 응용 프로그램에 접근하도록 허용합니다. 두 가지 예제:
- 회사 직원은 자신의 집에서 FTP 서버를 호스팅하고 직장에서 컴퓨터를 사용하는 직원에게 FTP 서비스에 접근을 제공하기를 원합니다. 이것을 하기 위해, 직원은 FTP 서버의 주소를 포함하고 FTP에 대해 올바른 포트 번호 (표준 FTP 포트는 TCP/21)를 사용함으로써 회사 내부 컴퓨터에서 SSH를 통해 원격 포트 포워딩을 설정할 수 있습니다.
- 원격 데스크탑 세션을 여는 것은 원격 포트 포워딩의 공통적인 사용입니다. SSH를 통해, 이것은 가상 네트워크 컴퓨팅 포트 (5900)를 열고 목적지 컴퓨터 주소를 포함함으로써 달성될 수 있습니다.
Reverse port forwarding
또 다른 이름 : 역방향 SSH 터널. 간단히 말해서, 노트북이 그러한 방법으로 원격 기계에 연결될 때, 해당 원격 기계의 IP로의 호출이 랩톱으로 전송되고 응답이 다시 돌아옵니다.
Dynamic port forwarding
동적 포트 포워딩 (DPF)은 방화벽 핀홀의 사용을 통해 방화벽 또는 NAT를 횡단하는 주문형 방법입니다. 목표는 클라이언트에게 하나 또는 많은 목적지 서버로 데이터를 전송/수신할 목적을 위해 중개자 역할을 하는 신뢰할 수 있는 서버에 안전하게 연결하도록 활성화하는 것입니다.
DPF는 SSH와 같은 지역 응용 프로그램을 SOCKS 프록시 서버로 설정함으로써 구현될 수 있으며, 이는 네트워크 또는 인터넷에 걸쳐 데이터 전송을 처리하기 위해 사용될 수 있습니다. 웹 브라우저와 같은 프로그램은 프록시를 통해 트래픽을 직접 지시하기 위해 개별적으로 구성되어야하며, 이는 또 다른 서버의 보안 터널 역할을 합니다. 한번 프록시가 더 이상 필요하지 않으면, 그 프로그램은 원래 설정으로 재구성되어야 합니다. DPF의 수동 요구 사항으로 인해, 그것은 종종 사용되지 않습니다.
한번 연결이 수립되면, DPF는 신뢰할 수 없는 네트워크에 연결된 사용자에 대해 추가적인 보안을 제공하기 위해 사용될 수 있습니다. 데이터는 원래 목적지로 전달되기 전에 또 다른 서버로 보안 터널을 통과해야 하므로, 사용자는 LAN에서 발생할 수 있는 패킷 스니핑으로부터 보호됩니다.
DPF는 많은 용도를 갖는 강력한 도구입니다; 예를 들어, 커피 숍, 호텔, 또는 그렇지 않으면 최소한의 보안 네트워크를 통해 인터넷에 연결된 사용자는 데이터를 보호하는 방법으로 DPF를 사용할 수 있습니다. DPF는 역시 회사 네트워크와 같은 외부 웹 사이트에 대한 접근을 제한하는 방화벽을 우회하기 위해 사용될 수 있습니다.