2011-05-16 04:00:37 +0000 2011-05-16 04:00:37 +0000
219
219

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

关于‘端口转发’的问题有很多,但似乎没有一个明确说明它是什么,是用来做什么的。所以:

1.什么是端口转发?什么是端口转发?

  1. 它是用来做什么的,为什么我需要它?

答案 (1)

324
324
324
2011-05-16 04:35:44 +0000

要真正解释端口转发,你首先需要了解一下你的路由器的作用。你的互联网服务提供商会给你的互联网连接分配一个****的IP地址。互联网上的所有电脑都需要一个唯一的IP地址,但你家里有多台电脑,却只有一个地址。那么这个是怎么操作的呢?

如果你知道是什么,只想知道怎么做http://portforward.com/ 有一个关于几百个不同路由器的截图。文档隐藏在他们的自动 portconfig 工具的广告页面后面。(只要点击一下就能找到。)

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

你的家庭路由器有一个叫网络地址转换的功能,也就是NAT,内置了一个功能。在你的网络内部,计算机有192.168.1.100这样的地址。所有在192.168.范围内(或在10.范围内)的地址都是[私有](http://en.wikipedia.org/wiki/PrivateIPaddresses#PrivateIPv4addressspaces)“保留”_地址。这些地址是由IANA正式分配给私有网络内部使用的地址。你的路由器会自动分配这样的地址给每台通过DHCP连接的计算机。这些地址是你的网络中的计算机如何与路由器以及相互之间的通信。

你的路由器有一个独立的网络接口,将其与互联网连接起来。这个接口有一个非常不同的地址,它是由你的ISP分配的。这就是我前面提到的那个地址,你的路由器就是用这个地址与互联网上的其他计算机进行通信。你的网络内的计算机都有不可路由私有IP地址,也就是说,如果它们直接向互联网发送数据包,数据包会自动被丢弃(出于稳定性的考虑,有私有地址的数据包是不允许在互联网上穿越的)。但你的路由器有一个可路由地址。网络地址转换,顾名思义,就是在这两种地址之间进行翻译,让你的网络内的多台电脑以一个地址的形式出现在互联网上。每当你的网络中的计算机想要连接到互联网上的计算机时,它就会将连接请求发送到路由器上(它知道要把它发送到路由器上,因为它的Default Gateway参数被设置为路由器的地址)。然后,路由器接收到这个连接请求(TCP/IP中的 “SYN请求"),并改变源地址(即 "reply-to "或返回地址),将其从计算机的私有IP改成路由器的公共IP,这样,响应就会发送到路由器。然后,它在数据库(称为NAT表_)中记下这个连接被发起,以便以后记住它。

当远程计算机返回响应(一个 "SYN-ACK")时,路由器在它的NAT表中查看,看到该端口上的那个主机的连接是由你的网络中的私有计算机之前发起的,将目的地址改为该计算机的私有地址,然后在你的网络中转发。这样一来,数据包就可以继续在网络之间来回转发,路由器透明地改变地址,这样就可以正常工作了。当连接被终止时,路由器只需将其从NAT表中删除即可。

或者这样想

或者用一个比喻来理解可能会更直观一些–假设你是美国的一家货运代理公司,与中国客户合作。他们需要向美国的许多客户发送包裹,但由于海关/纸品的原因,只向一个地方发送包裹比较容易。所以,一个包裹从您的中国客户(在这个例子中,是专线网络)寄到您这里,而实际目的地在美国的某个地方(互联网)。你把盒子上的地址标签改成美国的(公共)地址,然后把退货地址改成自己的公共地址(因为不方便客户直接退回中国,不能直接退回),然后交给邮政部门。如果客户退货了,那就来找你了。你在你的记录里查一下,看看它是从中国的哪个公司寄来的,然后把目的地改成那个公司(它的私人地址),把退货地址改成你的私人地址,这样他们就可以通过你寄回一个替代品。

这样做效果很好,但是有一个问题。如果客户需要给公司寄点东西,比方说是汇票付款的东西,怎么办?或者说,假设互联网上的电脑发起了一个与路由器的连接(SYN请求),比如说是向网络中的网络服务器发送信/包。信件/数据包上只有路由器的公共地址,所以路由器实际上不知道要把它发到哪里去!它可能会被发送到任何一台电脑上的私人服务器上。网络,或对他们中的任何一个人来说都不是。当你拨打别人家的电话时,你可能遇到过这样的问题–当他们给你打电话时没有问题,但当你给他们打电话时,他们没有办法知道是谁的电话,所以可能接错了。虽然对人类来说,解决这个问题很容易,但对电脑来说就比较麻烦了,因为不是每台电脑都知道你的网络中的其他电脑。我们有三种不同的方法可以做到这一点:

  • **Faux-DMZ*:很多路由器都有一个叫DMZ的功能。这代表着非军事区的意思,是一种网络安全配置。家庭路由器上的DMZ通常被称为faux-DMZ,因为它缺乏实际DMZ的功能。它所做的是最简单的传入连接处理:所有传入的连接请求将被发送到你的网络内部指定的一个。这很简单 - 你在路由器的配置中输入一个IP地址,所有传入的连接就会被发送到那里。但这并不总是有效的,因为你可能有多台电脑需要接受传入的连接。为此,我们有…..
  • **端口转发*。所有的网络连接请求都包括一个 "端口"。端口只是一个数字,它是计算机知道数据包是什么的一部分。IANA规定HTTP使用的是端口80。这意味着,一个写着端口号为80的传入数据包必须是针对Web服务器的请求。你的路由器上的端口转发允许你输入一个端口号(或可能是一个范围或数字的组合,取决于路由器)和一个IP地址。所有输入端口号匹配的连接都会被转发到该地址的内部计算机上。UPnP转发的工作原理与端口转发完全相同,但不是由你来设置,而是由网络内的计算机上的软件自动设置路由器将特定端口上的流量转发到它。很多多人视频游戏(例如,Counter Strike)允许你在电脑上运行一个游戏服务器,其他人可以连接到你的电脑上和你一起玩。你的电脑不知道所有想玩的人,所以它不能连接到他们 - 相反,他们必须从互联网上向你的电脑发送新的连接请求。幸运的是,你知道游戏服务器的连接请求的端口号。所以,在路由器上,你设置一个端口转发的端口号是游戏服务器所期望的端口号(例如27015)和游戏服务器的电脑IP地址(例如192.168.1.105)。

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

视频游戏可能是日常用户最常遇到的端口转发的地方,尽管大多数现代游戏使用UPnP,所以你不需要手动操作(相反,它是完全自动的)。当你想直接连接到你的网络中的东西时,你就需要这样做(而不是通过互联网上的一些中间人)。这可能包括运行你自己的网络服务器或通过远程桌面协议连接到你的电脑。很多人在互联网上游荡,寻找容易被攻击的机器…… 他们通过尝试打开不同端口的连接来做到这一点。这些都是传入的连接,所以,如上文所述,路由器会把它们丢掉。这意味着,在NAT配置中,只有路由器本身容易受到涉及传入连接的攻击。这是件好事,因为路由器比运行了大量软件的计算机要简单得多(因此更不容易受到攻击)。那么,你应该记住,通过在网络中设置DMZ(设置为DMZ目的地),你就失去了这台电脑的安全层:它现在对来自互联网的传入连接完全开放,所以你需要像直接连接一样保护它的安全。当然,当你转发一个端口时,接收端的计算机就会在该端口上变得脆弱。因此,请确保你运行最新的软件,并且配置良好。