如何实现端口转发

2013-02-06 11:11:44 +0800


所谓的”端口转发”,通俗地说就是让 A 端口监听到的数据转发到 B 监听端口。

举例应用

A 监听端口是翻墙软件开启的端口
B 监听端口是新开的,而且绑定地址是0.0.0.0
如此一来,外部电脑就可以用 B 端口作为代理的端口,数据都发给 B 端口,然后利用”端口转发”功能,把数据转向 A 端口(也就是翻墙工具自身的端口)

如何看本机开启的监听端口

对于 Windows 系统,在命令行窗口(先运行 cmd 就会出现命令行窗口)运行如下命令,可以看到本机开启的所有监听端口。

netstat -an | find "LISTEN"

刚才有读者在留言中提问,俺再补充一下。用netstato选项可以看到每个监听端口分别是哪个进程开启的。命令如下

netstat -ano | find "LISTEN"

什么是监听端口的”绑定地址”

以俺手头的虚拟机为例,执行刚才那个命令后,会显示如下

TCP  127.0.0.1:8118  0.0.0.0:0  LISTENING

其中的127.0.0.1表示这个监听端口绑定的网卡地址,而8118表示监听的端口号。所谓的”绑定地址”,意思就是说,这个监听端口只接受来自该网卡的连接。
因为127.0.0.1表示本机网卡地址;所以,绑定在127.0.0.1表示该监听端口只接受来自本机的连接。
如果要让某个监听端口接受任意连接(包括外部电脑的连接),可以把绑定地址设置为0.0.0.0

如何搞端口转发?

用来搞端口转发的工具有很多,如果你去Google一下TCP proxyTCP redirection,应该能找到一大堆软件和解决方案。考虑到很多读者是菜鸟,俺挑选两种最简单的办法。

利用 Windows 自带的 netsh

准备工作

对于 Vista 以及更新版本的 Windows (比如 Win7 Win8 …)可以直接使用该方案。
对于 Vista 之前的 Windows(比如 WinXP、Win2003),需要先安装 IPv6 协议栈。具体步骤如下:

  1. 以管理员身份登录,进入”控制面板”下面的”网络连接”
  2. 选中本地连接,点右键,在右键菜单选”属性”
  3. 弹出”属性”对话框,点”安装”按钮
  4. 弹出”选择网络组件类型”对话框,选”协议”,再点”添加”
  5. 在弹出的对话框中选”IPv6”,点”确定”

命令详解

(以下命令需要管理员身份才能执行)
添加端口转发的命令

netsh interface portproxy add v4tov4 listenport=新开的监听端口 listenaddress=新开端口的绑定地址connectaddress=要转发的地址 connectport=要转发的端口 protocol=tcp

删除端口转发的命令

netsh interface portproxy delete v4tov4 listenport=新开的监听端口 listenaddress=新开端口的绑定地址

命令举例

比方说,俺本地已经运行了 TOR,端口是8118,绑定在127.0.0.1
如果俺希望建立一个新的端口,端口号是12345(这个端口号是俺随手编的,你也可以用其它端口号),绑定在0.0.0.0
那么就执行如下命令。然后,发往12345端口的数据流就会被转发到8118端口。

netsh interface portproxy add v4tov4 listenport=12345 listenaddress=0.0.0.0connectaddress=127.0.0.1 connectport=8118 protocol=tcp

为了保险起见,再用前面介绍的netstat命令,看一下本机开启的端口。如果正常的话,你就可以看到如下一行

TCP  0.0.0.0:12345  0.0.0.0:0  LISTENING

如果要删除该端口转发,就执行如下命令

netsh interface portproxy delete v4tov4 listenport=12345 listenaddress=0.0.0.0

删除之后,再用netstat命令查一下,这个12345的监听端口就看不到了

优点

  • 无需安装任何第三方软件
  • 一旦设置好就会持续有效——即使系统重新启动也没关系。

缺点

  • 需要以管理员身份登录,才能执行上述命令。
  • 该方法只能用于 Windows 系统。

利用 rinetd

获取软件

rinetd 是一个很小巧的、跨平台的、开源的工具,它能提供 TCP 端口转发的功能。它的官网在(这里)[http://www.boutell.com/rinetd/],上面提供了 Linux 平台和 Windows 平台的软件包。考虑到大多数同学用的是 Windows,俺针对 Windows 的使用介绍一下。
把那个rinetd.zip下载到本地,解压出来,里面有好几个文件(包括源代码)。你只需取出其中的rinetd.exe其它文件不需要。

编写配置文件

rinetd 的配置文件很简单,就是一个普通的文本文件,每一行对应一条转发规则。每一条转发规则包含4个字段,分别如下,字段之间用空格分开。

绑定地址 监听端口 转发的地址 转发的端口

配置文件举例

比方说,俺本地已经运行了TOR,端口是8118,绑定在127.0.0.1
如果俺希望通过rinetd建立一个新的端口,端口号是12345(这个端口号是俺随手编的,你也可以用其它端口号),绑定在0.0.0.0
那么,转发规则就这么写

0.0.0.0 12345 127.0.0.1 8118

运行

把刚才写好的配置文件保存成config.txt(俺只是举例,你也可以用其它文件名),把该文件跟rinetd.exe放到同一个目录。
运行cmd进入 Windows 的命令行窗口,然后进入rinetd.exe所在的目录,执行如下命令

rinetd.exe -c config.txt

为了保险起见,再用前面介绍的netstat命令,看一下本机开启的端口。如果正常的话,你就可以看到如下一行

TCP  0.0.0.0:12345  0.0.0.0:0  LISTENING

优点

  • 该软件很小巧(整个下载包才 100 多 KB),而且是绿色软件。几乎不占用啥系统资源
  • 无需管理员即可运行
  • 跨平台

缺点

  • 每次你关机或用户注销,rinetd 就退出了,下次要重新运行(为了方便,你可以把 rinetd 的启动命令加入 Windows 的启动项)

原文:http://feedproxy.google.com/~r/chinagfwblog/~3/tzwu0cwOTyI/blog-post.html


上一篇:DD-WRT QoS过滤器定义

下一篇:在dd-wrt路由器上设置多个无线网络并相互隔离