有关“端口转发”的问题很多,但似乎没有一个明确说明其含义和用途的问题。因此:


什么是端口转发?
它的作用是什么,为什么需要它?


评论

我认为这已经足够了:portforward.com/help/portforwarding.htm

#1 楼

基础知识
要真正解释端口转发,您首先需要对路由器的功能有更多的了解。您的互联网服务提供商为您的互联网连接分配了一个IP地址。互联网上的所有计算机都需要一个唯一的IP地址,但是您家中有多台计算机,只有一个地址。那么,这是如何工作的呢?
如果您知道它是什么,并且只想知道如何去做:http://portforward.com/上有一个如何使用屏幕截图的方法,实际上是数百个不同路由器的截图。该文档隐藏在其自动portconfig工具的广告页面后面。 (只需单击一下即可找到它。)
NAT-这是什么?我们为什么要使用它? 192.168。*范围(或10. *范围)内的所有地址均为“私有”或“保留”地址。这些地址由IANA正式分配,可在专用网络内部使用。您的路由器会为通过DHCP连接的每台计算机自动分配一个这样的地址。这些地址是网络中计算机与路由器以及彼此之间通信的方式。
您的路由器具有单独的网络接口,可将其连接到Internet。此接口有一个非常不同的地址,该地址由您的ISP分配。这是我之前提到的一个地址,您的路由器使用它与Internet上的其他计算机进行通信。网络内部的计算机具有不可路由的专用IP地址,这意味着,如果它们直接将数据包发送到Internet,则数据包将被自动丢弃(出于稳定性原因,具有私有地址的数据包不允许穿越Internet)。但是您的路由器有一个可路由的地址。顾名思义,网络地址转换可以在这两种地址之间进行转换,从而使网络中的多台计算机可以像一台具有一个地址的计算机一样显示在Internet上。

详细信息
虽然这听起来可能很复杂,但实际上路由器的操作非常简单。每次网络内部的计算机要连接到Internet上的计算机时,它都会将连接请求发送到路由器(它的默认网关参数设置为路由器的地址,因此它知道将其发送到路由器)。然后,路由器接受该连接请求(TCP / IP中的“ SYN请求”)并更改源地址(“答复”或返回地址),并将其从计算机的专用IP更改为该计算机的公用IP。路由器,以便将响应发送到路由器。然后,它会在数据库(称为NAT表)中记录该连接已启动,以便以后记住它。
当响应从远程计算机(“ SYN-ACK”)返回时,路由器在其NAT表中查找,并且发现该端口上该主机的连接先前是由网络上的私有计算机发起的,因此更改了目的地地址到计算机的专用地址,然后将其转发到您的网络中。通过这种方式,数据包可以继续在网络之间来回传输,而路由器会透明地更改地址以使其工作。当连接终止时,路由器将其从NAT表中删除。

或这样想
用一个隐喻可以更容易地看到它-假设您在美国与中国客户合作的货运代理。他们需要将包裹发送给美国的许多客户,但是由于海关/文书工作的原因,将包裹仅发送到一个地方更容易。因此,来自您的一个中国客户(在此示例中为专用网络)向您提供了一个目的地为美国某处(互联网)的包裹。您将包装盒上的地址标签更改为美国(公共)地址,并将寄信人地址更改为您自己的公共地址(因为在不给客户带来麻烦的情况下无法直接将其寄回中国),然后将其移交给邮政服务。如果客户退回产品,它就会来找您。您可以在记录中查找它,查看它来自中国的哪家公司,然后将目的地更改为该公司(其私人地址),并将寄信人地址更改为您的私人地址,以便他们可以通过您寄回替代品。 br />这很好用,但是有一个问题。如果客户需要向公司发送东西,比如说用汇票支付东西怎么办?或者,假设互联网上的计算机启动了与路由器的连接(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的传入连接,因此,像直接连接一样保护它。当然,无论何时转发端口,接收端的计算机在该特定端口上都容易受到攻击。因此,请确保您运行配置正确的最新软件。

评论


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

–布莱恩·范登堡(Brian Vandenberg)
2011年5月18日在18:52

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

–马丁内
2011年8月1日在3:56



@jcrawfordor,您好,您介意说明UPnP完全自动化吗?什么是UPnP,它如何工作?

–起搏器
16-11-26在21:37



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

–巴尔德里克
18年11月13日在15:42

答案的一部分说:“端口只是一个数字,它是计算机知道数据包是什么的一部分。”有误导性。固定应用程序的端口号是一种惯例,而不是确定数据包类型的因素。充其量来说,用于端口80的数据包可以被认为是HTTP,仅此而已,它将完全取决于(在应用程序层)监听端口80的应用程序。

–codeman48
18年11月20日在11:20