端口转发
在电脑网络中,端口转发或端口映射(英语:Port forwarding)是网络地址转换(NAT)的一种应用,当网络数据包穿越网关时,例如路由器或防火墙时,将带有 IP地址和通讯端口的连线请求转发到指定的 IP 地址及其端口口上,换句话说,就是将一台主机的网络端口转发到另外一台主机并由另一台主机提供转发的网络服务。此技术最常用于将位于受保护网络或局域网(LAN)内主机上的服务提供给广域网(WAN)上的主机[1][2]。
目的
编辑端口转发,此技术被提出的目的是为了让远程主机(例如互联网上的主机)能与局域网内的特定主机或服务之间建立连线[3]。
在一般的家用网络中,每一节点(电脑或是智慧电冰箱等)皆连线到路由器或具有网络 IP 地址转换(NAT/NAPT)功能的 ATU-R 或缆线调制解调器来相互连线或连线到互联网。而除了透过实体线路连线至路由器,也可以连接到网络交换器或透过 Wi-Fi 连线至无线局域网在连线到路由器等装置。NAT 装置的 WAN 孔通常具有有公开 IP 地址。换句话说,除了路由器本身,其他的装置对互联网上的其他主机来说是不可见的、被隐藏的,因为它们相互仅透过私有 IP 地址进行资料交换或是仅透过路由器等装置获取位于互联网的资料。
在部署端口转发时,网络管理员通常会在网关上开放一个端口口,专门用于与位于局域网内特定主机连线。外部主机必须知道此网关的公共 IP 地址和其被对应的端口口,才能与处在局域网内的我们所指定的装置建立连线。通常,若被部属的服务为常见服务,在局域网内依旧会的依照标准来选择服务所在的端口口位置,例如用于网页服务(HTTP)的 80端口。
其他常见的应用还有以下:
- 在局域网内部署需被公开的网页伺服器
- 允许从网际网域对局域网上的主机进行 Secure Shell 连线
- 允许从网际网域对局域网上的主机进行 FTP 连线
- 在局域网内部署需被公开的游戏伺服器(如 Minecraft 等等)
网络管理员通常在网关的操作系统中配置相关的端口转发规则。举例来说,在 Linux 系统中,会透过 iptables 或 netfilter 的数据包过滤规则实现端口转发。BSD 和 macOS 则是在使用 Yosemite(OS 10.10.X)之前透过 Ipfirewall(ipfw)来实现端口转发,而在其开始之后则是透过 PF防火墙(pf)来实现端口转发。
当在网关上建立规则时,端口转发可以透过一条规则来实现,以将本机的端口口对应至目标主机的 IP 地址和端口口(在 Linux 系统中,会透过 DNAT 规则来实现)。在这种情况下,数据包将原封不动地被转发出去,数据包上的来源 IP 地址(Source IP)和端口口将保持不变。但若是在不是该局域网的默认网关上部属时,则必须将来源 IP 地址更改为实际网关的主机 IP 地址,否则数据包将被防火墙拦截并最终导致连线失败。
当端口转发并非是由操作系统来实现,而是透过一些软件来实现时(例如:部署在应用层上的防火墙软件、基于 SOCKS 的防火墙或通过 TCP 数据包代理等等方式),虽然不会更动数据包内容,但这通常会导致来源 IP 地址被更改为该台具有端口转发功能主机的 IP 地址。
通常一个端口口只能被对应到唯一的一台主机上,但我们也可以通过在网关上区分来源主机的 IP 地址来将连线分别导向至局域网内不同的主机上。
有时也会在类Unix系统上使用端口转发来让程序可以以用户身份来执行,避免因小于 1024 的端口口只能以超级用户执行的程序监听等原因,而直接以超级用户执行程序,进而造成可能的安全漏洞,具体来说,会将低号端口口转发至另一个高号端口口。
UPnP 提供了一项功能,可在一局域网的网关中自动完成端口转发。UPnP 定义了互联网网关装置协议(IGD),具体来说,具有 UPnP 功能的网关透过简单服务发现协议(SSDP)在局域网内广播其存在。若在此局域网内还有其他具有 UPnP 功能的主机,就能自动与此网关建立端口转发规则并使用 UPnP 的 IGD 协议在网关上注册一个端口,同时使网关将数据包转发到其Unix域套接字。
类型
编辑端口转发具体有三大类型:本地、远程和动态端口转发[4]。
本地端口转发
编辑本地端口转发是最常见的端口转发类型。它常用于一主机透过路由器等装置连线到另一主机,换句话说,用户所执行的程序所产生的数据包可以透过本地端口转发至指定的主机上。透过使用本地端口转发,可以绕过限制来源 IP 连线的防火墙[5]。
我们也可让具有 SSH 功能的主机透过 SSH 连线至同样具有 SSH 协议的伺服器,让伺服器以 SSH 连线并转发我们的数据包到指定的目标伺服器。就像其他的本地端口转发一样,将伺服器上的某一端口口对应到目标伺服器上,而该端口口被称为“转发端口”。任何想要连接到该目标主机的主机都可以透过 SSH 连线到伺服器上那被配置为转发端口,间接地连线至目标主机,而不是直接连接到目标主机。连接被建立后,SSH 伺服器会持续在转发端口上监听,并将所有该端口口收到的数据包经过解密之后全部转发到目标主机及其端口口。[6]
本地端口转发的一些其他用途:
- 使用本地端口转发来接收邮件[7]
- 使用 SSH 从手提电脑连线到第三方网站。
远程端口转发
编辑远程端口转发让服务端的程序能够透过 SSH 连线反过来对客户端进行连线[8]。当然除 SSH 之外,也可以利用其他协议来达到相同的目的[9]。换句话说,远程端口转发允许用户从服务端(无论是 SSH 还是其他协议)反向连线到客户端。
要使用远程端口转发,必须在网关上设置目标主机(客户端)的公开 IP 地址以及两个端口口(网关和目标主机的端口口)。至于要选择哪一端口口则取决于要部属的服务。
远程端口转发允许其他主机透过网关访问远程主机上所部署的服务,例如:
- 一家公司的一名员工在自己家中部署了一台 FTP 伺服器,同时希望允许使用特定 IP 的主机能使用该 FTP 服务。为此,该名员工可以在公司的内部主机上设置远程端口转发,将数据包转发至该名员工的 FTP 伺服器的 IP 地址以及正确的端口口(FTP 的默认端口口是 TCP/21)[10]。
- 从互联网连线至远程桌面是远程端口转发的一个常见用途。透过 SSH 连线至目标主机上的 VNC(默认为 5900端口口)之类的服务[6]。
反向端口转发
编辑简而言之,当您的主机以此方式连线到远程主机时,对该远程主机的 IP 的连线请求或是数据包将被转发到您的主机(一般是将您的主机的连线转发至远程伺服器)且由您的手提电脑做出响应(一般是由远程伺服器做出响应)[11]。
动态端口转发(DPF)
编辑动态端口转发(DPF)是一种透过使用 FoD(全称:Firewall on Demand)[12]来穿透防火墙或 NAT 的方法。其目的是使客户端能够安全地连线到受信任的中介伺服器,以便向一个或多个目标伺服器发送和接收数据[13]。
DPF 可以通过部属本地应用程式(如 SSH)作为 SOCKS 代理伺服器来实现,该代理伺服器可透过网络或互联网来传递数据包。可以透过如网页浏览器等程序,来透过代理伺服器去转发数据包,达到将本地机器隐藏起来的目的,可是一旦不再需要继续转发数据包,就必须手动删除规则。由于 DPF 的手动要求,网络管理员通常会优先使用其他的代理方式[6]。
一旦连线被建立,DPF 可为连线到不受信任网络的用户提供额外的安全性。由于数据包必须在与代理伺服器建立安全连线并且加密后才会由代理伺服器转提交至其原始目的地,进而避免用户的数据包在局域网上被截获[14]。
DPF 是一个功能强大的工具,具有许多用途;例如,透过咖啡店、酒店或其他安全性较低等地方的网络连接到互联网的用户,就有可能希望使用 DPF 作为保护隐私的一种方式。;了以上情境,例如在企业网络中, DPF 也可用于绕过限制访问外部网站的防火墙。
查看更多
编辑参考文献
编辑- ^ Definition of: port forwarding. PC Magazine. [2008-10-11]. (原始内容存档于2012-06-03).
- ^ Rory Krause. Using ssh Port Forwarding to Print at Remote Locations. Linux Journal. [2008-10-11].
- ^ Jeff "Crash" Goldin. How to set up a home web server. Red Hat. [2008-10-11]. (原始内容存档于2008-10-04).
- ^ OpenSSH 端口转发
- ^ Local and Remote Port Forwarding and the Reflection for Secure IT Client 7.1 or Higher - Tech Note 2433. Support.attachmate.com. 2012-11-09 [2014-01-30].
- ^ 6.0 6.1 6.2 SSH/OpenSSH/PortForwarding - 社區 Ubuntu 文檔. Help.ubuntu.com. 2013-12-13 [2014-01-30].
- ^ Example — Using Local Port Forwarding to Receive Mail (System Administration Guide: Security Services). Docs.oracle.com. [2014-01-30].
- ^ Tunneling with Secure Shell - Appendix A: Remote Port Forwarding. Vandyke.com. 2005-06-12 [2014-01-30].
- ^ Local versus Remote Port Forwarding. NetworkActiv. [2014-06-08]. (原始内容存档于2016-11-04).
- ^ TCP Port Number 21 and How It Works With FTP. Compnetworking.about.com. 2013-12-19 [2014-01-30]. (原始内容存档于2014-02-03).
- ^ Reverse SSH Tunneling - From Start to End. JFrog. 2021-08-15 [2024-10-15] (美国英语).
- ^ Firewall on Demand (FoD). geant. 2024-08-07 [2024-09-19] (美国英语).
- ^ DPF 機制. Pages.cs.wisc.edu. [2014-01-30].
- ^ SSH Dynamic Port Forwarding (Hacking Illustrated Series InfoSec Tutorial Videos). Irongeek.com. [2014-01-30].
外部链接
编辑- Alan Stafford. Warp Speed Web Access: Sharing the Bandwidth. PC World. [2008-10-11]. (原始内容存档于2008-03-18).
- Using UPnP for Programmatic Port Forwardings and NAT Traversal – Free software which uses UPnP and the Internet Gateway Device Protocol (IGD) to automate port forwarding
- TCP forwarding source code in C# – Source code in C# explaining/PoC TCP forwarding.
- Open.NAT – Lightweight and easy-to-use .NET class library to allow port forwarding in NAT devices that support UPNP and PMP.
- Port Checker Port Forwarding Testing Tool