forked from haoel/haoel.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
264 lines (175 loc) · 14.7 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="description" content="科学上网 : 左耳朵">
<link rel="stylesheet" type="text/css" media="screen" href="stylesheets/stylesheet.css">
<title>科学上网</title>
</head>
<body>
<!-- HEADER -->
<div id="header_wrap" class="outer">
<header class="inner">
<a id="forkme_banner" href="https://github.com/haoel">View on GitHub</a>
<h1 id="project_title">科学上网</h1>
<h2 id="project_tagline">左耳朵</h2>
</header>
</div>
<!-- MAIN CONTENT -->
<div id="main_content_wrap" class="outer">
<section id="main_content" class="inner">
<h1>
<a id="vpn-科学上网" class="anchor" href="#vpn-%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>VPN 科学上网</h1>
<p>作者:左耳朵 <a href="http://coolshell.cn">http://coolshell.cn</a>
更新时间:2016-08-10</p>
<p>这篇文章及其脚本可以写的更好,欢迎到 <a href="https://github.com/haoel/haoel.github.io">https://github.com/haoel/haoel.github.io</a> 更新</p>
<h2>
<a id="准备" class="anchor" href="#%E5%87%86%E5%A4%87" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>准备</h2>
<h3>
<a id="首先你应该对英文读写没什么问题" class="anchor" href="#%E9%A6%96%E5%85%88%E4%BD%A0%E5%BA%94%E8%AF%A5%E5%AF%B9%E8%8B%B1%E6%96%87%E8%AF%BB%E5%86%99%E6%B2%A1%E4%BB%80%E4%B9%88%E9%97%AE%E9%A2%98" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>首先,你应该对英文读写没什么问题</h3>
<p>为什么这么说?<strong>逻辑是这样的,如果你上了Google还是在用中文关键词,那么你科学上网有什么意义呢?</strong> 换言之,科学上网的目的是为了进入广阔的世界范围与全世界的人交流,所以,英文是必备的,如果你英文有问题,VPN过去也的用处也不大。</p>
<p>所以,我把这个前提条件放在第一的位置,就是说—— <strong>真正的墙不是GFW,而是人的大脑</strong></p>
<h3>
<a id="然后你需要一个vpn" class="anchor" href="#%E7%84%B6%E5%90%8E%E4%BD%A0%E9%9C%80%E8%A6%81%E4%B8%80%E4%B8%AAvpn" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>然后,你需要一个VPN</h3>
<p>这里我用的是PPTP,可以上AWS日本申请个免费试用一年的EC2 VPS,或是Linode买个一月USD10刀的VPS,然后自建一个PPTP的VPN。</p>
<p>我在北京,感觉日本的VPS是比较快,其本上ping值可以在100ms以内,linode的似乎可以在50ms左右。Anyway,<strong>现在你买一台VPS也不贵了,也就是一个月10美金左右(60-70元),千万别告诉我,一个月你花60-70元钱对你是件很奢侈的事</strong>。</p>
<p>关于PPTP服务器的设置,请参看 《<a href="https://www.digitalocean.com/community/tutorials/how-to-setup-your-own-vpn-with-pptp">How To Setup Your Own VPN With PPTP</a>》</p>
<p>当然,你可以使用 <code>docker</code> 来非常简单的设置翻墙服务器。</p>
<h4>
<a id="设置pptp服务" class="anchor" href="#%E8%AE%BE%E7%BD%AEpptp%E6%9C%8D%E5%8A%A1" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>设置PPTP服务</h4>
<pre><code>sudo docker run -d --privileged --net=host
-v {/path_to_file/chap-secrets}:/etc/ppp/chap-secrets \
mobtitude/vpn-pptp
</code></pre>
<p>PPTP 使用 <code>/etc/ppp/chap-secrets</code> 文件设置用户名和密码,所以你需要给docker容器提供这个文件,下面是这个文件的示例:</p>
<pre><code># Secrets for authentication using PAP
# client server secret acceptable local IP addresses
fuckgfw * whosyourdaddy *
</code></pre>
<h4>
<a id="设置l2tpipsec服务" class="anchor" href="#%E8%AE%BE%E7%BD%AEl2tpipsec%E6%9C%8D%E5%8A%A1" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>设置L2TP/IPSec服务</h4>
<p>下面命令行中被 <code>{</code> 和 <code>}</code> 引用的地方,需要替换一下:</p>
<pre><code>sudo docker run -d -p 500:500/udp -p 4500:4500/udp -p 1701:1701/tcp \
-e PSK={共享密码} -e USERNAME={用户名}-e PASSWORD={密码}\
siomiz/softethervpn
</code></pre>
<h4>
<a id="设置shadowsocks服务" class="anchor" href="#%E8%AE%BE%E7%BD%AEshadowsocks%E6%9C%8D%E5%8A%A1" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>设置Shadowsocks服务</h4>
<p>下面命令行中被 <code>{</code> 和 <code>}</code> 引用的地方,需要替换一下:</p>
<pre><code>sudo docker run -d -p 1984:1984 -s 0.0.0.0 -p 1984 \
-k {密码} -m aes-256-cfb \
oddrationale/docker-shadowsocks
</code></pre>
<h3>
<a id="最后你需要一台asus的路由器" class="anchor" href="#%E6%9C%80%E5%90%8E%E4%BD%A0%E9%9C%80%E8%A6%81%E4%B8%80%E5%8F%B0asus%E7%9A%84%E8%B7%AF%E7%94%B1%E5%99%A8" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>最后,你需要一台ASUS的路由器</h3>
<p>用这台路由器的目的是为了用路由器科学上网,这样全家或全公司就科学上网了。</p>
<p>朋友安利我的是 <strong>华硕(ASUS) RT-AC68U 1900M AC 双频智能无线路由路</strong>,可能这个路由器对你来说有点贵,你也可以看看别的,比如:RT-AC66U,大约600元。</p>
<p>当然,不用这样的路由器也没有什么问题,在所有的客户端设备上设置VPN也没有问题。</p>
<h2>
<a id="用-asus-merlin-路由器-vpn-科学上网" class="anchor" href="#%E7%94%A8-asus-merlin-%E8%B7%AF%E7%94%B1%E5%99%A8-vpn-%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>用 ASUS Merlin 路由器 VPN 科学上网</h2>
<h3>
<a id="给路由器刷-merlin-固件" class="anchor" href="#%E7%BB%99%E8%B7%AF%E7%94%B1%E5%99%A8%E5%88%B7-merlin-%E5%9B%BA%E4%BB%B6" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>给路由器刷 merlin 固件</h3>
<p>首先Asuswrt是华硕公司为他的路由器所开发的固件。Asuswrt-merlin是一个对Asuswrt固件二次开发进行各种改进和修正的项目。源代码在这里:<a href="https://github.com/RMerl/asuswrt-merlin">https://github.com/RMerl/asuswrt-merlin</a></p>
<p>Merlin固件拥有更多的功能,由于第三方不断维护代码,各种新功能也在不断增加。Merlin固件的升级并不需要反复的操作过程,方法与官方固件的升级相同,有很好的硬件软件兼容性。继承了Asuswrt官方固件优秀的交互界面。</p>
<p>另外,不必担心把路由器刷废了,华硕的路由器可以让你一键重置回来</p>
<p><strong>1)下载固件</strong>。先到 <a href="https://asuswrt.lostrealm.ca/download">https://asuswrt.lostrealm.ca/download</a> 下载相应的固件,并解压。(我下载的是 <code>RT-AC68U_380.61_0.zip</code> )</p>
<p><strong>2)升级固件</strong>。登录到你的路由器后台 <code>http://192.168.1.1/</code> ,在 <code>系统管理</code> -> <code>固件升级</code> 中上传固件文件(我上传的是:<code>RT-AC68U_380.61_0.trx</code>)</p>
<p><strong>3)打开 JFFS 分区</strong>。<code>系统管理</code> -> <code>系统设置</code> -> <code>Persistent JFFS2 partition</code></p>
<ul>
<li>
<code>Format JFFS partition at next boot</code> - <code>否</code>
</li>
<li>
<code>Enable JFFS custom scripts and configs</code> - <code>是</code>
</li>
</ul>
<p><strong>4)打开 ssh 登录</strong>。 <code>系统管理</code> -> <code>系统设置</code> -> <code>SSH Daemon</code> </p>
<ul>
<li>
<code>Allow SSH password login</code> - <code>是</code>
</li>
</ul>
<h3>
<a id="连接-vpn" class="anchor" href="#%E8%BF%9E%E6%8E%A5-vpn" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>连接 VPN</h3>
<p><strong>1)到 <code>VPN</code> -> <code>PPTP/L2TP Client</code> 中 添加设置文件。</strong></p>
<p>注:最好使用PPTP,设置起来比较简单。L2TP不支持PEK的共享密码。</p>
<p><strong>2)保存配置后,点 <code>Active</code>, 如果一切正确,可以看到连接成功。</strong></p>
<h3>
<a id="设置路由" class="anchor" href="#%E8%AE%BE%E7%BD%AE%E8%B7%AF%E7%94%B1" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>设置路由</h3>
<p>此时,你的路由器就VPN了,但是,包括访问中国的网站也被代理了。所以,还要设置一下路由表。</p>
<pre><code>ssh [email protected]
</code></pre>
<p>输入你设置的路由器后台的登录口令,你就可以进入路由器的操作系统了。</p>
<h4>
<a id="下载路由表" class="anchor" href="#%E4%B8%8B%E8%BD%BD%E8%B7%AF%E7%94%B1%E8%A1%A8" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>下载路由表</h4>
<p><strong>为什么要设置路由表?</strong></p>
<p>路由器VPN后,你所有的网络访问都得多国外绕一圈了。所以,需要把国内的IP给过滤出来,所以,需要设置静态路由表。</p>
<pre><code>cd /jffs/scripts
wget https://haoel.github.io/downloads/route.sh
echo -e "#!/bin/sh\n\n/jffs/scripts/route.sh delete\n/jffs/scripts/route.sh add" > /jffs/scripts/wan-start
chmod a+rx /jffs/scripts/*
</code></pre>
<p><strong>wan-start 是什么?</strong></p>
<p>注:<code>wan-start</code> 是一个事件脚本,在wan口连上后会运行,这里的运行指令是,先删除路由,再加入(因为WAN口的IP可能会换了)</p>
<p><strong>route.sh 怎么来的?</strong></p>
<ul>
<li>这个脚本的路由表是由来高春辉的这个项目。 <a href="https://github.com/17mon/china_ip_list">https://github.com/17mon/china_ip_list</a> (之前的<a href="https://github.com/fivesheep/chnroutes">https://github.com/fivesheep/chnroutes</a> 已经没有人维护)</li>
<li>这个脚本包含5000多条路由规则,几乎包括了中国的网段。</li>
<li>我使用这个配置生成了 <code>route.sh</code> (生成脚本 <a href="https://github.com/haoel/haoel.github.io/tree/master/scripts">https://github.com/haoel/haoel.github.io/tree/master/scripts</a> )</li>
<li>你可以使用 <code>route.sh add</code> 来生效路由表,用 <code>./route.sh delete</code> 来删除路由表。</li>
</ul>
<h4>
<a id="下载动态dns配置" class="anchor" href="#%E4%B8%8B%E8%BD%BD%E5%8A%A8%E6%80%81dns%E9%85%8D%E7%BD%AE" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>下载动态DNS配置</h4>
<p><strong>为什么要设置动态DNS?</strong></p>
<p>因为很多网站都会使用CDN,使用CDN的通常都会用DNS的CNAME做解析,所以,你的路由器VPN后,你的DNS服务器也会变了,我们这里默认使用的是Google的8.8.8.8,当然,这台服务器在国外,所以,用这台服务器解析域名的时候,就会解析到国外。所以,我们还需要一个动态的DNS配置,对于国内的站点,使用国内的DNS,对于国外的站点,使用8.8.8.8</p>
<pre><code>cd /jffs/configs
wget https://haoel.github.io/downloads/dnsmasq.conf.add
</code></pre>
<p><strong>dnsmasq.conf.add怎么来的?</strong></p>
<ul>
<li>这个配置来自 <a href="https://github.com/felixonmars/dnsmasq-china-list">https://github.com/felixonmars/dnsmasq-china-list</a>
</li>
<li>因为似乎他没有加上 itunes.apple.com ,所以,我就简单的把 <code>server=itunes.apple.com/114.114.114.114</code> 加到了 <code>accelerated-domains.china.conf</code> ,然后直接改名为 dnsmasq.conf.add</li>
<li>另外,<code>linkedin.com</code> 使用到的 <code>static.licdn.com</code> 也在这个文件中,建议去掉,不然linkedin.com打开会因为找不到相应的资源文件而异常。</li>
<li>生成脚本 <a href="https://github.com/haoel/haoel.github.io/tree/master/scripts">https://github.com/haoel/haoel.github.io/tree/master/scripts</a> </li>
</ul>
<p><em>注:文件里用到的是 <code>114.114.114.114</code> 作为国内的DNS解析服务。经网友指出这个不靠谱 <a href="http://bobao.360.cn/news/detail/1793.html">http://bobao.360.cn/news/detail/1793.html</a></em></p>
<p>你可以在路由器上通过 <code>nvram get wan0_dns</code> 查看你自己的DNS,然后替换掉,如:</p>
<pre><code>sed -i "s/114.114.114.114/$(nvram get wan0_dns|awk '{print $1}')/" dnsmasq.conf.add
</code></pre>
<h4>
<a id="运行命令生效" class="anchor" href="#%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4%E7%94%9F%E6%95%88" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>运行命令生效</h4>
<pre><code>/jffs/scripts/route.sh add
service restart_dnsmasq
</code></pre>
<p>接下来,你需要让你的设备重新连接一下WiFi路由器。</p>
<h4>
<a id="检查" class="anchor" href="#%E6%A3%80%E6%9F%A5" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>检查</h4>
<p>你可以使用一些命令在检查,相应的域名是否被CNAME到了正确的地方。</p>
<p>如:</p>
<pre><code>nslookup itunes.apple.com
</code></pre>
<pre><code>ping www.google.com
</code></pre>
<pre><code>traceroute weibo.com
</code></pre>
<p>然后查一查相关的IP是的位置在哪个国家。</p>
<h2>
<a id="已知问题" class="anchor" href="#%E5%B7%B2%E7%9F%A5%E9%97%AE%E9%A2%98" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>已知问题</h2>
<h3>
<a id="quic-的问题" class="anchor" href="#quic-%E7%9A%84%E9%97%AE%E9%A2%98" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>QUIC 的问题</h3>
<p>使用上述配置,在使用Chrome访问Googlet系统的网站时,比如:www.google.com、www.youtube.com 会出现打不开页面的问题。我做了一些调查,发现,这个问题是和Google的 <a href="https://en.wikipedia.org/wiki/QUIC">QUIC</a> 协议相关,因为Safari和FireFox是没有这个问题的,因为Safari和Firefox用的是HTTPS而不是QUIC。</p>
<p>Workaround的方式是 Disable Chrome的试验型的QUIC协议,在Chrome里访问 <code>chrome://flags/#enable-quic</code> 可以关闭QUIC。</p>
<p>目前,我在ASUS Merlin的官方论坛发了个贴:<a href="http://www.snbforums.com/threads/quic-issue.34105/">http://www.snbforums.com/threads/quic-issue.34105/</a></p>
<p>(全文完)</p>
</section>
</div>
<!-- FOOTER -->
<div id="footer_wrap" class="outer">
<footer class="inner">
<p>Published with <a href="https://pages.github.com">GitHub Pages</a></p>
</footer>
</div>
</body>
</html>