★引子

  元旦前后,俺写了《如何隐藏你的踪迹,避免跨省追捕》系列的第6、7篇——《用虚拟机隐匿公网IP》。之后有不少网友到博客留言,询问如何让不同虚拟机的软件共享翻墙代理。
  所以,俺今天就来聊一聊”多台电脑共享翻墙通道”这个话题。今天介绍的招数,既可以在不同虚拟机之间共享翻墙通道,也可以在不同的实体机(包括PC、平板、手机)之间共享翻墙通道。

  顺便说一下:在《用虚拟机隐匿公网IP(配置图解)》一文的末尾,俺又补充了一个章节——”验证虚拟机的隔离性”。那些使用虚拟机方案隐匿公网IP的同学,为了保险起见,要记得验证一下隔离性。

★准备工作

  考虑到俺博客的读者,有很多人不是 IT 技术人员。所以,俺先通俗地扫盲若干基础知识。

◇什么是”翻墙”

  如果你对”翻墙”还不太了解,建议你先看看俺写的《如何翻墙》一文。这篇扫盲教程可以说是面面俱到,很适合翻墙方面的新手入门。

◇什么是”代理”

  ”代理”好比是一个中转站,可以中转你的上网数据流量,以此来避开 GFW 这堵墙。
  翻墙代理通常包括两部分:代理软件,代理服务器。代理软件安装在你的电脑上,代理服务器通常都位于墙外(也就是境外)。当你通过代理上网时,你的浏览器并不是直接连到目标网站。而是通过如下几个步骤:
1. 浏览器发送数据到代理软件
2. 代理软件把你的数据发送到墙外的代理服务器
3. 代理服务器发送数据到目标网站

◇什么是”监听端口”

  代理软件要正常工作,通常都需要开启一个”监听端口”。浏览器通过这个”监听端口”来跟代理软件建立连接。只有建立了连接,浏览器才能把数据发送到代理软件上。

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

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

netstat -an | find “LISTEN”

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

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

◇小心防火墙的配置

  在《用虚拟机隐匿公网IP》一文,俺就特别用红字,提醒大伙儿要小心防火墙的设置。结果还是有很多人因为防火墙的问题而中招,功亏一篑。
  俺再啰嗦一下:
要特别小心操作系统中防火墙的设置。很多人是因为防火墙没设好,导致代理无法连通。

★如何共享翻墙的代理?

◇问题

  大部分翻墙代理都会提供一个 HTTP 的代理端口(就是刚才说的”监听端口”)。问题在于:很多翻墙代理的代理端口都绑定在 127.0.0.1 上。也就是说,这个代理只能被本机的软件使用,外部电脑的软件无法连接到该端口。

◇解决方案之 “修改配置”

  最简单的解决方案,就是修改翻墙软件的配置,让代理端口绑定到 0.0.0.0 上。

自由门
到它的设置界面,点”更多设置”,然后勾选”用自由门做服务器”,可以把监听端口绑定到 0.0.0.0
GoAgent
GoAgent 的配置信息存储在 proxy.ini 文件中。打开该文件找到 [listen] 字段,然后把该字段下面的 127.0.0.1 改为 0.0.0.0 即可。

  可惜的是,很多翻墙软件都没有提供配置文件让你修改监听端口绑定的地址。所以,俺下面传授一个通用的招数,无需修改配置文件,可以搞定任何翻墙代理,让它的监听端口被外部电脑使用。

◇解决方案之 “端口转发”

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

★如何搞端口转发?

  端口转发是本文的重点,所以俺单独开一个章节详细说。
  用来搞端口转发的工具有很多,如果你去 Google 一下 “TCP proxy” 或 “TCP redirection”,应该能找到一大堆软件和解决方案。考虑到很多读者是菜鸟,俺挑选两种最简单的办法。

◇利用 Windows 自带的 netsh

准备工作
对于 Vista 以及更新版本的 Windows (比如 Win7 Win8 …)可以直接使用该方案。
对于 Vista 之前的 Windows(比如 WinXP、Win2003),需要先安装 IPv6 协议栈。具体步骤如下:
1. 以管理员身份登录,进入”控制面板”下面的”网络连接”
2. 选中本地连接,点右键,在右键菜单选”属性”
3. 弹出”属性”对话框,点”安装”按钮
4. 弹出”选择网络组件类型”对话框,选”协议”,再点”添加”
5. 在弹出的对话框中选”IPv6″,点”确定”

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

netsh interface portproxy add v4tov4 listenport=新开的监听端口