在国内,经常会碰到由于资源在境外导致无法访问的情况,为了解决这种问题,一种选择是镜像源,另一种选择是翻墙。本文将对后一种方式进行阐述。

一、基础

对于VPN的原理,本文不再赘述,详细可通过此文章学习。我简单讲一下我的理解,方便后面配置。

国内由于GFW的存在,无法访问国外的服务器(如Google等)。即从218.x.x.x31.x.x.xGFW(即国内防火墙)阻拦。

2

图1 无VPN情况访问外网

而VPN的实现方式是让你的流量从218.x.x.x代理到本地的127.0.0.1(本地回环地址),再通过代理软件将流量传输至代理服务器,经由代理服务器访问目标网站,这样就可以实现绕过GFW访问外网。

1

图2 有VPN情况访问外网

综上,我们知道要实现翻墙需要三个部分:

  • 本地端口号
  • 代理软件
  • 代理服务器

其中,本地端口号是自己设置的;代理软件一般是免费开源的,如常见的ShadowsocksRclash等;代理服务器一般是收费的,简单可以分为自建服务器(自己搭梯子)和购买供应商服务(机场)。其中自建服务器的优点在于相对便宜,缺点在于麻烦,并且可选择性少。机场的优点是方便,一般供应商会提供多个不同国家地区的服务器节点可供选择,但缺点是稍贵,而且担心机场跑路。

本文选择机场的方式翻墙

二、购买机场

要想通过机场的方式翻墙,首先需要购买机场服务。

这里我给出我自己使用的机场,可通过此链接进行注册购买,我使用了2年了还算不错,每月100G流量,包年19.95美金,可允许两台设备同时在线。当然自己也可以选择信任的机场。

购买完成后,进入【首页/客户中心/我的产品与服务/产品详细】下找到【ClashX配置 】【GUI-Config配置】,这两个是我们购买的机场订阅链接,后面需要用到。

image-20221114224711704
图3 服务器订阅链接

三、代理软件配置

3.1 Windows

3.1.1 基础配置

windows下推荐使用clash for windows,可在其github中下载最新版本。可阅读其中文官网了解更多功能。

安装好后界面如下:

image-20221114174005613
图4 ClashX配置

其中,我们重点关注 Port, Allow LAN, System Proxy, Start with Windows 这四项。

  • Port 即为代理端口,如图4所示,此时Clash for windows将流量代理到127.0.0.1:7890,可以通过windows设置下的【网络和Internet/代理/使用代理服务器】查看代理端口是否一致。一般来说启动软件时,windows会自动打开【使用代理服务器】这个开关。注意:有时候电脑无法上网等问题,可能是由于代理软件和windows代理不一致导致

  • Allow LAN 如果需要局域网内其他设备(如虚拟机)通过网络代理的方式进行翻墙,需要打开此设置

  • System Proxy 系统代理,这个是必须要打开的

  • Start with Windows 这个建议也打开,后面完全设置完之后,可以实现无感上网(即自动根据访问ip判断是否翻墙)

image-20221114174440551

图5 Windows代理服务器配置

接下来配置代理服务器,选择Profiles,在URL框中粘贴购买的机场订阅链接(即图3中ClashX配置),点击下载。

image-20221114224801035
图6 配置代理服务器

下载完成后,会在Proxies中出现很多节点,测试延迟后选择自己需要的节点,双击即可。

image-20221114224839533
图7 选择需要的节点

其中有4种模式可以选择:

  • Global 全局代理,对所有的上网流量进行代理
  • Rule 按照设定好的规则进行代理
  • Direct 直接连接,所有上网流量不进行代理
  • Script 运行自定义脚本,一般不使用

配置完成后,选择Global模式,连接一个国外的服务器,打开百度搜索IP,查看当前IP情况。注意:建议使用此网站进行验证,这个网站比较蠢,有的厉害一点的网站可以看到翻墙之前的IP属地信息,使人误以为翻墙失败

image-20221114224910500
图8 查询IP

至此Windows成功翻墙

3.1.2 自动代理配置

上文中实现了全局代理,将所有流量代理到国外,这对我们日常访问国内网站带来了不便,为此我们需要进行自动代理配置。可参考此链接,其原理是通过IP匹配的方式,对于非大陆IP采用代理,大陆IP采用直连。其匹配规则每天更新。

打开 【Settings / Profiles / Parsers】,在其中写入以下内容,写入完成后,切换到Direct,在Profiles中更新订阅信息,并重启Clash for windows。若侧面出现Providers一栏,说明规则集加载成功。

注意:由于网络问题,可能造成规则集下载失败无法加载,需要多尝试几次

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
parsers: # array
# - reg: ^.*$ 匹配所有订阅,或 - url: https://example.com/profile.yaml 指定订阅
- reg: ^.*$
# 删除服务商提供的策略组和规则
code: |
module.exports.parse = (raw, { yaml }) => {
const rawObj = yaml.parse(raw)
const groups = []
const rules = []
return yaml.stringify({ ...rawObj, 'proxy-groups': groups, rules })
}
# 建立自己的配置
yaml:
prepend-proxy-groups: # 建立策略组
- name: 🔯 代理模式
type: select
proxies:
- 绕过大陆丨黑名单(GFWlist) # 黑名单模式,意为「只有命中规则的网络流量,才使用代理」
- 绕过大陆丨白名单(Whitelist) # 白名单模式,意为「没有命中规则的网络流量,统统使用代理」

- name: 🔰 选择节点
type: select

- name: 🛑 广告拦截
type: select
proxies:
- DIRECT
- REJECT
- PROXY

- name: 绕过大陆丨黑名单(GFWlist)
type: url-test
url: http://www.gstatic.com/generate_204
interval: 86400
proxies:
- DIRECT

- name: 绕过大陆丨白名单(Whitelist)
type: url-test
url: http://www.gstatic.com/generate_204
interval: 86400
proxies:
- PROXY

- name: PROXY
type: url-test
url: http://www.gstatic.com/generate_204
interval: 86400
proxies:
- 🔰 选择节点

# 策略组示例
# - name: 分组名
# type: select # 手动选点
# url-test # 自动选择延迟最低的节点
# fallback # 节点故障时自动切换下一个
# laod-balance # 均衡使用分组内的节点
# url: http://www.gstatic.com/generate_204 # 测试地址 非select类型分组必要
# interval: 300 # 自动测试间隔时间,单位秒 非select类型分组必要
# tolerance: 50 # 允许的偏差,节点之间延迟差小于该值不切换 非必要
# proxies:
# - 节点名称或其他分组套娃

commands:
- proxy-groups.🔰 选择节点.proxies=[]proxyNames # 向指定策略组添加订阅中的节点名,可使用正则过滤
- proxy-groups.🔰 选择节点.proxies.0+DIRECT # 向指定分组第一个位置添加一个 DIRECT 节点名

# 一些可能用到的正则过滤节点示例,使分组更细致
# []proxyNames|a # 包含a
# []proxyNames|^(.*)(a|b)+(.*)$ # 包含a或b
# []proxyNames|^(?=.*a)(?=.*b).*$ # 包含a和b
# []proxyNames|^((?!b).)*a((?!b).)*$ # 包含a且不包含b
# []proxyNames|^((?!b|c).)*a((?!b|c).)*$ # 包含a且不包含b或c

# 添加规则
prepend-rules: # 规则由上往下遍历,如上面规则已经命中,则不再往下处理
- RULE-SET,applications,DIRECT
- DOMAIN,clash.razord.top,DIRECT
- DOMAIN,yacd.haishan.me,DIRECT
- RULE-SET,private,DIRECT
- RULE-SET,reject,🛑 广告拦截
- RULE-SET,icloud,DIRECT #
- RULE-SET,apple,DIRECT # 这三个为国内可直连地址,如果希望走代理改为PROXY
- RULE-SET,google,DIRECT #
- RULE-SET,tld-not-cn,PROXY
- RULE-SET,gfw,PROXY
- RULE-SET,greatfire,PROXY
- RULE-SET,telegramcidr,PROXY
- RULE-SET,lancidr,DIRECT
- RULE-SET,cncidr,DIRECT
- GEOIP,,DIRECT
- GEOIP,CN,DIRECT
- RULE-SET,direct,DIRECT
- RULE-SET,proxy,🔯 代理模式
- MATCH,🔯 代理模式 # 规则之外的
# 添加规则集
mix-rule-providers:
reject: # 广告域名列表
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400

icloud: # iCloud 域名列表
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt"
path: ./ruleset/icloud.yaml
interval: 86400

apple: # Apple 在中国大陆可直连的域名列表
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt"
path: ./ruleset/apple.yaml
interval: 86400

google: # Google 在中国大陆可直连的域名列表
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt"
path: ./ruleset/google.yaml
interval: 86400

proxy: # 代理域名列表
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
path: ./ruleset/proxy.yaml
interval: 86400

direct: # 直连域名列表
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400

private: # 私有网络专用域名列表
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt"
path: ./ruleset/private.yaml
interval: 86400

gfw: # GFWList 域名列表
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt"
path: ./ruleset/gfw.yaml
interval: 86400

greatfire: # GreatFire 域名列表
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/greatfire.txt"
path: ./ruleset/greatfire.yaml
interval: 86400

tld-not-cn: # 非中国大陆使用的顶级域名列表
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/tld-not-cn.txt"
path: ./ruleset/tld-not-cn.yaml
interval: 86400

telegramcidr: # Telegram 使用的 IP 地址列表
type: http
behavior: ipcidr
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt"
path: ./ruleset/telegramcidr.yaml
interval: 86400

cncidr: # 中国大陆 IP 地址列表
type: http
behavior: ipcidr
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt"
path: ./ruleset/cncidr.yaml
interval: 86400

lancidr: # 局域网 IP 及保留 IP 地址列表
type: http
behavior: ipcidr
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt"
path: ./ruleset/lancidr.yaml
interval: 86400

applications: # 需要直连的常见软件列表
type: http
behavior: classical
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/applications.txt"
path: ./ruleset/applications.yaml
interval: 86400

再次启动后,到Rule下依次选择代理模式->绕过大陆白名单->选择节点->选择自己需要的节点

image-20221114224941214
图9 以Rule模式运行

至此自动代理配置完成,可在浏览器中进行以下实验

  • 浏览器打开百度,搜索ip 查询结果为国内

  • 浏览器打开谷歌,搜索ip 查询结果为国外

3.2 Linux

在Linux下,我个人使用体验最好的的代理软件是Trajan-Qt5,但是由于某些原因,作者删除了其github仓库,目前可以通过此链接下载之前的版本。

目前我在 Debian 10.09,Ubuntu 18.04, Ubuntu 20.04系统上使用时没有遇到问题。

在Linux下,有两种不同的翻墙方式,一种方式是在Linux下安装翻墙软件,直接进行翻墙。另一种方式是通过局域网代理的方式,将linux流量代理到windows系统下,在windows下实现翻墙。其中第一种方式更便捷。

3.2.1 直接方式

在linux中下载好Trajan-Qt5,并下载图3中的GUI-Config配置。在Linux中解压安装包并赋予执行权限。

1
2
3
4
5
sudo apt-get install p7zip-full					# 下载7z
# 双击压缩包解压
cd Trojan-Qt5-Linux.1.1.6/
sudo chmod 777 Trojan-Qt5-Linux.AppImage # 赋予可执行权限
./Trojan-Qt5-Linux.AppImage # 打开Trojan

之后导入下载好的GUI-Config配置即可。

image-20221114225029244
图10 导入配置文件

此时,在界面下方显示网络被代理到127.0.0.1:58591,通过可通过linux系统的【Setting /Network /Network Proxy】进行查看。

同时,可将Trojan-Qt5-Linux.AppImage移动到/usr/bin目录下,即可直接通过输入Trojan-Qt5-Linux.AppImage启动软件。

3.2.2 间接方式

在使用Linux虚拟机时,可以通过间接方式,将Linux虚拟机中流量代理到windows主机中,由windows主机完成翻墙。

首先查询windows主机IP地址

1
2
3
# win + R
# cmd
ipconfig
image-20221114225054343
图11 查询主机IP地址

虚拟机打开【Setting /Network /Network Proxy】,选择 Manual,将 HTTP Proxy 与 HTTPS Proxy 设置为主机IPv4地址,端口为7890(原因见图4),同时在 clash for windows 中打开 Allow LAN,即可实现代理。

注意:这种方法不成功的原因可能有1.主机与虚拟机无法ping通 2.主机虚拟机不在同一网段 3.主机防火墙 4.代理端口等

3.3 Android

Android下推荐使用clash for Android,可在其github中下载最新版本。其配置方式与 clash for windows大同小异,在此不做赘述。

四、Apt Git配置

当我们完成上文的操作后,已可以正常访问 Github、Youtube等网站。但是用gitapt等指令下载时速度还是很慢,这是因为这两条指令默认不走代理端口。

注意:按照上文中的配置,windows下代理端口为7890,Linux下代理端口为58591,如果自行更改端口,请对应修改指令

4.1 Apt配置代理

可参考此链接,在 /etc/apt/apt.conf.d 文件夹下新建了一个apt-proxy.conf文件,在文件中写入以下语句:

1
2
Acquire::http::Proxy "http://127.0.0.1:58591/";
Acquire::https::Proxy "http://127.0.0.1:58591/";

其原理是apt指令每次执行都会读取apt.conf.d文件夹下所有配置,但在执行apt指令前需要打开代理软件。

4.2 Git配置代理

可参考此链接,直接在终端输入以下指令即可

1
2
3
4
5
6
7
git config --global https.proxy http://127.0.0.1:58591

git config --global https.proxy https://127.0.0.1:58591

git config --global --unset http.proxy

git config --global --unset https.proxy