什么是端口转发,它的用途是什么?

Jam*_*rtz 233 router port port-forwarding community-faq

关于'port forwarding'有很多问题,但似乎没有一个明确说明它是什么以及它的用途。所以:

  1. 什么是端口转发?

  2. 它有什么用途,我为什么需要它?

jcr*_*dor 343

基础知识

要真正解释端口转发,您首先需要更多地了解路由器的作用。您的互联网服务提供商会为您的互联网连接分配一个IP 地址。互联网上的所有计算机都需要一个唯一的 IP 地址,但是您家中有多台计算机并且只有一个地址。那么这是如何工作的呢?

如果您知道它是什么并且只想知道如何去做 http : //portforward.com/有一个操作指南,其中包含数百种不同路由器的屏幕截图。该文档隐藏在其自动 portconfig 工具的广告页面后面。(只需单击一下,您就会找到它。)

NAT - 这是什么?我们为什么用它?

您的家用路由器内置了一个称为网络地址转换或 NAT 的功能。在您的网络中,计算机的地址类似于 192.168.1.100。192.168.* 范围(或 10.*)范围内的所有地址都是私有保留地址。这些地址由 IANA 正式分配以在专用网络内使用。您的路由器会自动为每台通过DHCP连接的计算机分配这样的地址。这些地址是您网络中的计算机与路由器以及彼此通信的方式。

您的路由器有一个单独的网络接口,可将其连接到互联网。该接口有一个非常不同的地址,由您的 ISP 分配。这是我之前提到的一个地址,您的路由器使用它与互联网上的其他计算机进行通信。您网络中的计算机具有不可路由的私有 IP 地址,这意味着如果它们将数据包直接发送到互联网,数据包将自动被丢弃(出于稳定性原因,不允许使用私有地址的数据包穿越互联网)。但是你的路由器有一个可路由的地址。网络地址转换,顾名思义,就是翻译 在这两种地址之间,允许您网络中的多台计算机在 Internet 上表现为一台具有一个地址的计算机。

细节

虽然这听起来可能很复杂,但实际上您的路由器如何做到这一点非常简单。每次网络中的计算机想要连接到 Internet 上的计算机时,它都会向路由器发送连接请求(它知道将其发送到路由器,因为它的默认网关参数设置为路由器的地址)。然后路由器接受该连接请求(TCP/IP 中的“SYN 请求”)并更改源地址(“回复”或返回地址)并将其从计算机的私有 IP 更改为计算机的公共 IP。路由器,以便将响应发送到路由器。然后它会在数据库(称为NAT 表)中记录连接已启动,以便稍后记住它。

当响应从远程计算机返回时(“SYN-ACK”),路由器查看其 NAT 表,发现该端口上与该主机的连接先前是由您网络上的一台私人计算机发起的,更改目的地地址到计算机的私有地址,并将其转发到您的网络中。通过这种方式,数据包可以继续在网络之间来回传输,路由器透明地更改地址以使其正常工作。当连接终止时,路由器只是将其从 NAT 表中删除。

或者这样想

这可能更容易用比喻来形象化——假设您是美国的一名货运代理,与中国客户合作。他们需要向美国的许多客户发送包裹,但由于海关/文书工作的原因,只将包裹发送到一个地方更容易。因此,一个包裹来自您在中国的一个客户(在本例中为专用网络),实际目的地在美国(互联网)。你把盒子上的地址标签改成美国(公共)地址,你把回邮地址改成你自己的公共地址(因为不能直接退回中国而不会给客户带来不便),然后交给邮局. 如果客户退回产品,它会来找你。你查一下你的记录,看看它来自中国的哪家公司,

这很好用,但有一点问题。如果客户需要向公司发送某些东西,比如一张汇票来支付某些东西怎么办?或者,假设 Internet 上的计算机发起与路由器的连接(SYN 请求),比如网络中的 Web 服务器。信件/数据包上只有路由器的公共地址,因此路由器实际上不知道将它发送到哪里!它可以指定给专用网络上的任何计算机,也可以不指定任何计算机。当您拨打某人的家庭电话时,您可能会遇到此问题 - 当他们给您打电话时,这没有问题,但是当您给他们打电话时,他们无法知道是谁打来的,因此可能接错了人。

虽然人类很容易解决这个问题,但对计算机来说却很棘手,因为并非网络上的每台计算机都知道所有其他计算机。

最后我们到达端口转发

端口转发是我们解决此问题的方法:它是一种告诉您的路由器网络传入连接应定向到哪台计算机的方法。我们有三种不同的方法可以做到这一点:

  • Faux-DMZ:很多路由器都有一个称为 DMZ 的功能。这代表非军事区,这是一种网络安全配置。家用路由器上的 DMZ 通常被称为假 DMZ,因为它缺乏实际 DMZ 的功能。它所做的是一种最简单的传入连接处理:所有传入连接请求都将发送到您网络中指定的一个。这非常简单——你在路由器的配置中输入一个 IP 地址,所有传入的连接都去那里。但是,这并不总是有效,因为您可能有多台计算机需要接受传入连接。为此,我们有...
  • 端口转发:所有网络连接请求都包含一个“端口”。端口只是一个数字,它是计算机如何知道数据包是什么的一部分。IANA 已指定端口 80 用于 HTTP。这意味着输入端口号为 80 的数据包必须是针对 Web 服务器的请求。路由器上的端口转发允许您输入端口号(或者可能是数字范围或数字组合,具体取决于路由器)和 IP 地址。具有匹配端口号的所有传入连接都将转发到具有该地址的内部计算机。
  • UPnP 端口转发:UPnP 转发的工作方式与端口转发完全相同,但不是您进行设置,而是网络内计算机上的软件自动设置路由器以将给定端口上的流量转发给它。

一个例子

让我们看一个使用示例。许多多人视频游戏(例如,反恐精英)允许您在您的计算机上运行一个游戏服务器,其他人可以连接到与您一起玩。您的计算机不知道所有想玩的人,因此无法连接到他们 - 相反,他们必须从 Internet 向您的计算机发送新的连接请求。

如果你没有在路由器上设置任何东西,它会收到这些连接请求,但它不知道网络中的哪台电脑有游戏服务器,所以它会忽略它们(或者,更具体地说,它会发送返回一个表明它无法连接的数据包)。幸运的是,您知道将用于游戏服务器连接请求的端口号。因此,在路由器上,您使用游戏服务器期望的端口号(例如,27015)和游戏服务器的计算机的 IP 地址(例如,192.168.1.105)设置一个端口转发。
路由器将知道将传入的连接请求转发到网络内部的 192.168.1.105,外部计算机将能够连接。

另一个例子是一个有两台机器的本地网络,其中第二台 IP 为 192.168.1.10 的机器使用 Apache 托管一个网站。因此路由器应该将传入的 80 端口请求转发到这台机器。使用端口转发,两台机器可以同时运行在同一个网络中。

端口转发示例图

视频游戏可能是日常用户最常遇到端口转发的地方,尽管大多数现代游戏都使用 UPnP,因此您不必手动执行此操作(而是全自动的)。每当您希望能够直接连接到网络中的某些内容时(而不是通过 Internet 上的某些中介),您都需要执行此操作。这可能包括运行您自己的 Web 服务器或通过远程桌面协议连接到您的一台计算机。

安全注意事项

NAT 的优点之一是它提供了一些轻松的内置安全性。许多人在互联网上徘徊寻找易受攻击的机器......他们通过尝试打开与各种端口的连接来做到这一点。这些是传入连接,因此,如上所述,路由器将丢弃它们。这意味着在 NAT 配置中,只有路由器本身容易受到涉及传入连接的攻击。这是一件好事,因为路由器比运行具有大量软件的完整操作系统的计算机简单得多(因此不太可能受到攻击)。然后,您应该记住,通过对网络中的计算机进行 DMZing(将其设置为 DMZ 目标),您将失去该计算机的安全层:它现在完全对来自 Internet 的传入连接开放,所以你需要像直接连接一样保护它。当然,任何时候转发端口时,接收端的计算机都会在该特定端口上变得脆弱。因此,请确保运行配置良好的最新软件。

  • NAT 部分没有详细说明的一个细节是,如果您网络上的计算机使用 DHCP 来获取其内部不可路由的私有 IP 地址,则分配给它们的 IP 地址可能会有所不同,如果发生这种情况,端口转发将搞砸了。最好通过手动设置每台计算机的网络地址来避免这种情况。portforward.com 强调了这一点的重要性,并有一个指南描述了如何在系统上设置静态 IP 地址,但是他们没有提到还需要配置路由器的 DHCP 以避免这些现在保留的 NAT 地址。 (11认同)
  • 您简要地提到了它,但您可能想阐述 DMZ 式使用端口转发的重要性。我想不出在生产环境下向外界公开诸如 sql server(或其他任何东西)之类的东西是个好主意的单个实例。端口转发可以在不严重损害安全性的情况下获取受保护的资源。 (3认同)
  • @jcrawfordor,嗨,你介意解释一下*如何* UPnP 是全自动的吗?什么是 UPnP,它是如何工作的? (2认同)
  • 答案的一部分说,“端口只是一个数字,它是计算机如何知道数据包是什么的一部分。” 是误导。固定应用程序的端口号是一种惯例,它不是确定数据包类型的因素。充其量一个用于端口 80 的数据包可以*猜测*为 HTTP,仅此而已,它完全取决于(在应用程序层)侦听端口 80 的应用程序。 (2认同)