来源:https://g2ex.github.io/2016/05/20/Tips-on-Chinternet/
尽管也称互联网,但在国内,如若有以下一个或多个需求,你就不得不学习一下科学上网了:
访问的网站或服务被(GFW)墙;
网络提供商(ISP)劫持了网络流量;
需要匿名(隐藏真实 IP)的情况,如渗透测试;
躲避网络监控;
其他情况。
这里分享一下我的科学上网技巧,使用到的工具软件可能有 Shadowsocks
、Lantern
、Privoxy
、Tor
。根据不同的目的选择不同的工具。
一、绕过 GFW 和 ISP 劫持
最简单和不折腾的方法是购买 VPN,次之是购买一台海外 VPS,自己安装 VPN 或 Shadowsocks 服务端。VPN 的优点是可以全局翻墙,Shadowsocks 虽然可以设置全局模式,但是对于不支持代理的本地应用是没有办法的,当然这种情况下可以试试 ProxifierPE
强制所有连接通过代理上网。
使用 Shadowsocks 可能遇到的另一个问题是,因为 Shadowsocks 使用的是 SOCKS5 类型的代理,当本地应用只支持 HTTP/HTTPS 类型代理时,就需要自己解决 HTTP 转换为 SOCKS5 的问题。当然,这个问题使用 Privoxy
就能很好地解决。
本节主要介绍如何组合使用 Shadowsocks 和 Privoxy,并假设你已经安装并配置好了 Shadowsocks(Linux 中可以安装 shadowsocks-qt5 或 命令行版本的 Shadowsocks)。
Shadowsocks 与 Privoxy 组合使用的示意图如下所示:
Shadowsocks Privoxy 组合使用示意图
假设你已经配置好了 Shadowsocks,接下来配置 Privoxy。
Windows 系统中右键点击 Privoxy 托盘图标,依次点击 Edit
– Main Configuration
打开配置文件;Linux 系统中 Privoxy 的配置文件位于/etc/privoxy/config
。
配置文件修改为:
1
2
3
4
5
6
forward-socks5 / 127.0.0.1:1080 .
listen-address 0.0.0.0:8118
启动 Shadowsocks 和 Privoxy 后,把本地应用的代理设置为 HTTP/HTTPS 类型的 127.0.0.1:8118
,就可以绕过 GFW 和 ISP 了。如果局域网中的其他 PC 或手机也希望使用该电脑上网(假设该电脑 IP 地址为 192.168.1.10
),把它们的代理设置为 19.168.1.10:8118
即可。
Tips
目前,有一个讨巧的的办法替代这两者的组合:使用 Lantern —— 一款开源 的安全上网工具。它使用的是 HTTP 类型代理,本地端口为 8787
,也就是说,把本地应用的代理设置为 127.0.0.1:8787
就可以使用 HTTP 类型的代理了。而且使用它,也无需自己购买 VPS。
Lantern 默认非全局代理,可以在设置中改为全局模式。
另一方面,Lantern 只监听本机 127.0.0.1:8787
的连接,如果局域网中的电脑或手机也想通过这台电脑翻墙(假设该电脑 IP 地址为 192.168.1.10),那么也需要配合 Privoxy 使用。这时,Privoxy 的配置应该如下:
1
2
3
forward / 127.0.0.1:8787
listen-address 127.0.0.1:8118 # 可改为 0.0.0.0:8118 允许局域网的连接
二、匿名上网
网络中保持匿名的办法是使用 Tor ,匿名的意思是隐藏你当前的 IP 地址。Internet 上有很多志愿者运行着 Tor 中继节点,Tor 能保证从出发点的流量至少经过三个不同的中继节点到达目的地址,而且这三个不同的中继不会每次都相同。
形象地说,你想把一封匿名信交给小明,在大街上随便找了一陌生人 A 让 A 帮忙转交,A 走了一段路程后随便找了一个陌生人 B 让 B 帮忙转交,B 走了一段路程后随便找了一个陌生人 C 让 C 帮忙转交,最终 C 按照信封上的地址找到了小明并把信交给了他。小明只知道是 C 转交了这封信,至于是谁写的这封信,他就无从得知了。A、B、C 分别对应着 Tor 网络的中继节点,这种投递匿名信的方式就起到了隐藏 IP 地址的效果。
如下图所示,使用 Tor 从本机经过三跳访问了 Google。
Tor Browser
Tor 浏览器
为了方便使用 Tor,Tor 开发者把 Tor 集成到了定制版的 Firefox 中,简单设置一下就能正常使用。
Tor 浏览器专为大陆等网络环境加入了流量混淆的选项。首次打开浏览器时会弹出 Tor 状态检查,点击设置
配置 Tor 网桥,勾选互联网提供商(ISP)是否对 Tor 网络连接进行了封锁或审查
中的是
,把下一步中的网桥类型选择meek-amazon
或meek-azure
。这两者在大陆没被完全封锁,因此可以用来做跳板网桥。
不过随着网络环境的恶化,Tor 提供的网桥类型都不可用时,就需要使用自己的 Shadowsocks 或 Lantern 代理了。
首次打开 Tor 浏览器,在 Tor 设置中勾选互联网提供商(ISP)是否对 Tor 网络连接进行了封锁或审查
中的否
,在下一步是否需要本地代理访问互联网?
中选择是
,下一步中设置你的代理:
使用 Shadowsocks 则设置为 SOCKS5 类型的 127.0.0.1:1080
;
使用 Lantern 则设置为 HTTP/HTTPS 类型的 127.0.0.1:8787
;
如果通过局域网中其他计算机的配置联网,把 127.0.0.1
改为那台计算机的 IP 地址。
使用了代理的 Tor 浏览器原理示意图如下(以 Tor + Shadowsocks 组合为例):
Tor 浏览器 + Shadowsocks 组合使用示意图
Tor Expert Bundle
Tor 浏览器适用于使用浏览器匿名上网的场景,如果打算让本地应用(如其他浏览器、Linux 中的 Terminal 等)也使用 Tor 隐藏 IP 地址,那么就需要自己手动配置 Tor 了。从 Tor 官网下载 操作系统对应的 Expert Bundle
,它只包含 Tor 工具,不含浏览器。
假设你已经配置好了 Shadowsocks,接下来,为 Tor 配置 Shadowsocks 代理。
Windows 系统中,打开 %AppData%/tor
目录(如果不存在则创建该目录),新建 torrc
文件,内容如下:
1
2
3
4
5
6
7
8
SOCKS5Proxy 127.0.0.1:1080
ReachableAddresses *:80,*:443
ReachableAddresses reject *:*
Linux 系统中,Tor 的配置文件位于 /etc/tor/torrc
,配置内容同上。
启动 Shadowsocks 和 Tor,因为 Tor 监听的是 SOCKS5 类型的本地 9050
端口,把需要匿名的本地应用代理设置为 SOCKS5 类型,代理地址设置为 127.0.0.1:9050
,实现匿名上网。
还是老问题,如果本地应用只支持 HTTP/HTTPS 代理类型,那么仍需要使用 Privoxy,修改其配置文件为:
1
2
forward-socks5 / 127.0.0.1:9050 .
listen-address 127.0.0.1:8118 # 可改为 0.0.0.0:8118 允许局域网的连接
这样一来,本地应用的代理设置为 HTTP/HTTPS 类型的 127.0.0.1:8118
就可以实现匿名上网了。
Privoxy + Tor + Shadowsocks 组合使用示意图如下所示:
Privoxy + Tor + Shadowsocks 组合使用示意图
One More Tip
使用 Tor 匿名访问网络除了应用于渗透测试,另一个应用场景是编写爬虫变换 IP 地址爬取站点,减小被网站屏蔽的可能性。
在 Linux Terminal 中,使用 export 命令设置代理,可以只在当前 Terminal 中生效,
1
2
export http_proxy=http://127.0.0.1:8118
export https_proxy=https://127.0.0.1:8118
三、总结
接下来简要归纳上述内容,给出每种组合的配置内容。
Privoxy + Shadowsocks 组合 —— 翻墙
配置 Privoxy,Linux 系统中位于 /etc/privoxy/config
:
1
2
forward-socks5 / 127.0.0.1:1080 .
listen-address 127.0.0.1:8118 # 可改为 0.0.0.0:8118 允许局域网的连接
本地代理需设置为 HTTP/HTTPS
类型的 127.0.0.1:8118
。
如果不使用 Privoxy,本地代理需设置为 SOCKS5
类型的 127.0.0.1:1080
。
Privoxy + Tor + Shadowsocks 组合 —— 匿名上网
配置 Privoxy,Linux 系统中位于 /etc/privoxy/config
:
1
2
forward-socks5 / 127.0.0.1:9050 .
listen-address 127.0.0.1:8118 # 可改为 0.0.0.0:8118 允许局域网的连接
配置 Tor,Windows 系统中位于 %AppData%/tor/torrc
,Linux 系统中位于 /etc/tor/torrc
:
1
2
3
SOCKS5Proxy 127.0.0.1:1080 # Shadowsocks 代理地址
ReachableAddresses *:80,*:443
ReachableAddresses reject *:*
本地代理需设置为 HTTP/HTTPS
类型的 127.0.0.1:8118
。
如果不使用 Privoxy,本地代理需设置为 SOCKS5
类型的 127.0.0.1:9050
。
Privoxy + Tor + Lantern 组合 —— 匿名上网
配置 Privoxy,Linux 系统中位于 /etc/privoxy/config
:
1
2
forward-socks5 / 127.0.0.1:9050 .
listen-address 127.0.0.1:8118 # 可改为 0.0.0.0:8118 允许局域网的连接
配置 Tor,Windows 系统中位于 %AppData%/tor/torrc
,Linux 系统中位于 /etc/tor/torrc
:
1
2
3
HTTPSProxy 127.0.0.1:8787 # Lantern 代理地址
ReachableAddresses *:80,*:443
ReachableAddresses reject *:*
本地代理需设置为 HTTP/HTTPS
类型的 127.0.0.1:8118
。
如果不使用 Privoxy,本地代理需设置为 SOCKS5
类型的 127.0.0.1:9050
。
tip:Could not bind to 127.0.0.1:9050: Address already in use. Is Tor already running
netstat
will tell you what’s listening on that port. Open a terminal (press Ctrl +Alt +T ), and run:
sudo netstat -plnt | fgrep 9050
It will tell you which program is using that port. For example, on my system, it shows:
tcp 0 0 127.0.0.1:9050 0.0.0.0:* LISTEN 1198/tor
At the end, it says that the program listening on that port is tor
.