什么是端口转发及其用途?


Answers:


318

基础

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

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

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

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

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

细节

尽管这听起来可能很复杂,但实际上路由器的操作非常简单。每次网络内部的计算机要连接到Internet上的计算机时,它都会将连接请求发送到路由器(由于其默认网关参数设置为路由器的地址,因此它知道将其发送到路由器)。然后,路由器接收该连接请求(TCP / IP中的“ SYN请求”)并更改源地址(“答复”或返回地址),并将其从计算机的专用IP更改为服务器的公共IP。路由器,以便将响应发送到路由器。然后,它会在数据库(称为NAT表)中记录该连接已启动,以便以后记住它。

当响应从远程计算机(“ SYN-ACK”)返回时,路由器在其NAT表中查找,并且发现该端口上该主机的连接先前是由网络上的私有计算机发起的,因此更改了目的地地址到计算机的专用地址,然后将其转发到您的网络中。这样,数据包就可以继续在网络之间来回传输,而路由器会透明地更改地址以使其工作。连接终止后,路由器将其从NAT表中删除。

还是这样想

用一个隐喻将其可视化可能会更容易一些-假设您是在美国与中国客户合作的货运代理。他们需要将包裹发送给美国的许多客户,但是由于海关/文书工作的原因,将包裹仅发送到一个地方更容易。因此,来自您的一个中国客户(在此示例中为专用网络)向您提供了一个目的地为美国某个地方(互联网)的包裹。您将包装盒上的地址标签更改为美国(公共)地址,并将回信地址更改为您自己的公共地址(因为在不给客户带来麻烦的情况下它不能直接返回中国),并将其交给邮政部门。如果客户退回产品,它就会来找您。您可以在记录中查找它,并查看它来自中国的哪家公司,

这很好用,但是有一个问题。如果客户需要向公司发送东西,比如说用汇票支付东西怎么办?或者,假设互联网上的计算机启动了与路由器的连接(SYN请求),例如,它与网络中的Web服务器建立了连接。信件/分组上只有路由器的公共地址,因此路由器实际上不知道将其发送到哪里!它可以用于专用网络上的任何计算机,也可以不用于任何计算机。当您拨打某人的住宅电话时,您可能会遇到此问题-当他们拨打您的电话时没问题,但是当您打电话给他们时,他们无法知道对方的电话,因此错误的人可能会应答。

尽管对人类来说很容易理清这个问题,但是对于计算机而言却是一件棘手的事情,因为网络上的每台计算机都不知道所有其他计算机。

最后我们进入端口转发

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

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

一个例子

让我们看一个用法示例。许多多人视频游戏(例如,Counter Strike)允许您在计算机上运行其他人可以连接以与您一起玩的游戏服务器。您的计算机并不了解所有想玩的人,因此无法与他们联系-而是他们必须从Internet向您的计算机发送新的连接请求。

如果您在路由器上未设置任何内容,它将收到这些连接请求,但不知道网络中的哪台计算机装有游戏服务器,因此它将忽略它们(或更具体地说,它将发送返回表示无法连接的数据包)。幸运的是,您知道游戏服务器的连接请求上的端口号。因此,在路由器上,将转发端口设置为游戏服务器期望的端口号(例如27015)和带有游戏服务器的计算机的IP地址(例如192.168.1.105)。
路由器将知道将传入的连接请求转发到网络内部的192.168.1.105,外部计算机将能够连接。

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

端口转发示例图

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

安全注意事项

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


2
您刚才提到了它,但是您可能想阐明DMZ样式的端口转发的重要性。我想不出一个实例,在生产环境下,将诸如sql server(或其他任何东西)之类的东西暴露给外界是个好主意。端口转发可以在不严重损害安全性的情况下获得受保护的资源。
布莱恩·范登堡

11
NAT部分中未详细说明的一个事实是,如果网络上的计算机使用DHCP获取其内部不可路由的私有IP地址,则分配给它们的地址可能会有所不同,如果发生这种情况,端口转发将搞砸了。最好通过手动设置每台计算机的网络地址来避免这种情况。portforward.com强调了这一点的重要性,并提供了描述如何在系统上设置静态IP地址的指南,但是他们没有提到还需要配置路由器的DHCP以避免这些现在保留的NAT地址。
martineau'8

2
@jcrawfordor,嗨,你不介意解释如何究竟是UPnP的全自动的吗?什么是UPnP,它如何工作?
Pacerier '16

1
@martineau保留DHCP地址是执行此操作的好方法。您可以将某些路由器移植到特定的客户端,而不是地址,这是更可取的。
Baldrickk

2
答案的一部分说:“端口只是一个数字,它是计算机知道数据包是什么的一部分。” 有误导性。固定应用程序的端口号是一种惯例,而不是确定数据包类型的因素。在最好的情况意味着一个80端口的数据包可以被猜测是HTTP,仅此而已,这将完全取决于(应用层)侦听80端口的应用程序
codeman48
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.