在国内,经常会碰到由于资源在境外导致无法访问的情况,为了解决这种问题,一种选择是镜像源,另一种选择是翻墙。本文将对后一种方式进行阐述。
一、基础 对于VPN的原理,本文不再赘述,详细可通过此文章 学习。我简单讲一下我的理解,方便后面配置。
国内由于GFW的存在,无法访问国外的服务器(如Google等)。即从218.x.x.x
到31.x.x.x
被GFW (即国内防火墙)阻拦。
图1 无VPN情况访问外网
而VPN的实现方式是让你的流量从218.x.x.x
代理到本地的127.0.0.1
(本地回环地址),再通过代理软件将流量传输至代理服务器,经由代理服务器访问目标网站,这样就可以实现绕过GFW访问外网。
图2 有VPN情况访问外网
综上,我们知道要实现翻墙需要三个部分:
其中,本地端口号是自己设置的;代理软件一般是免费开源的,如常见的ShadowsocksR ,clash 等;代理服务器一般是收费的,简单可以分为自建服务器(自己搭梯子)和购买供应商服务(机场)。其中自建服务器的优点在于相对便宜,缺点在于麻烦,并且可选择性少。机场的优点是方便,一般供应商会提供多个不同国家地区的服务器节点可供选择,但缺点是稍贵,而且担心机场跑路。
本文选择机场的方式翻墙
二、购买机场 要想通过机场的方式翻墙,首先需要购买机场服务。
这里我给出我自己使用的机场,可通过此链接 进行注册购买,我使用了2年了还算不错,每月100G流量,包年19.95美金,可允许两台设备同时在线。当然自己也可以选择信任的机场。
购买完成后,进入【首页/客户中心/我的产品与服务/产品详细】下找到【ClashX配置 】 和【GUI-Config配置】 ,这两个是我们购买的机场订阅链接,后面需要用到。
图3 服务器订阅链接
三、代理软件配置 3.1 Windows 3.1.1 基础配置 windows下推荐使用clash for windows
,可在其github 中下载最新版本。可阅读其中文官网 了解更多功能。
安装好后界面如下:
图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判断是否翻墙)
图5 Windows代理服务器配置
接下来配置代理服务器,选择Profiles,在URL框中粘贴购买的机场订阅链接(即图3中ClashX配置),点击下载。
图6 配置代理服务器
下载完成后,会在Proxies中出现很多节点,测试延迟后选择自己需要的节点,双击即可。
图7 选择需要的节点
其中有4种模式可以选择:
Global 全局代理,对所有的上网流量进行代理
Rule 按照设定好的规则进行代理
Direct 直接连接,所有上网流量不进行代理
Script 运行自定义脚本,一般不使用
配置完成后,选择Global模式,连接一个国外的服务器,打开百度搜索IP,查看当前IP情况。注意:建议使用此网站 进行验证,这个网站比较蠢,有的厉害一点的网站可以看到翻墙之前的IP属地信息,使人误以为翻墙失败
图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: - 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: - 🔰 选择节点 commands: - proxy-groups.🔰 选择节点.proxies=[]proxyNames - proxy-groups.🔰 选择节点.proxies.0+DIRECT 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 - 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: type: http behavior: domain url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt" path: ./ruleset/icloud.yaml interval: 86400 apple: type: http behavior: domain url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt" path: ./ruleset/apple.yaml interval: 86400 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: type: http behavior: domain url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt" path: ./ruleset/gfw.yaml interval: 86400 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: type: http behavior: ipcidr url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt" path: ./ruleset/telegramcidr.yaml interval: 86400 cncidr: type: http behavior: ipcidr url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt" path: ./ruleset/cncidr.yaml interval: 86400 lancidr: 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
下依次选择代理模式
->绕过大陆白名单
->选择节点
->选择自己需要的节点
图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配置
即可。
图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
图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等网站。但是用git
、apt
等指令下载时速度还是很慢,这是因为这两条指令默认不走代理端口。
注意:按照上文中的配置,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