Linux下的科学上网
网络困境
说起上网,起码在10年前或者更早,因为查文献,查数据,装软件之类的就开始研究过科学上网了,win下就不多说了,Linux下以前也研究过,也成功使用过,但是因为没记录,换服务器换环境后等于又要浪费时间再次研究。正好有了此blog
可以随手记录起来。
时间的浪费
上次找了个Rails
框架Flix本来想学习,但是再研究的时候死活数据库的测试就是不通过,老是连接超时,因为是在Linux下进行的,花了好长好长的时间去找原因,又是找系统配置,又是找API提供方的论坛,又是Email给第三方库作者等,一套下来把自己的心气都差不多给折腾没了,于是放弃了。其实这个原因后来被我证实是因为API的提供方被和谐了,所以才会导致无法连接,可是我怎么也没想到,一个正常电影资料的数据库也能被和谐???,不过后来想想,可能某些电影资料是不事宜的,触犯了规则,所以网站才会被和谐。
可是!
我实在无法接受,好几天的时间就浪费在了本不应该浪费的一个网络问题上。
不过也只能安慰自己,就当学习技术了
movie API
1
2
3
4
require 'themoviedb-api'
Tmdb::Api.key("key")
a = Tmdb::Movie.detail(550, language: 'it')
puts a.inspect
上述网站就是TMDB,一个电影,剧集介绍类的网站,网站有api
服务,可以写程序获取相关数据。上面就是一个简单示例,获取编号550
的数据库信息。但是这个在目前的环境是无法连接的,要想连接,就得重新设置网络。
科学上网
科学上网有很多种方式,这里,主要介绍的是通过clash
的方式上网,关键性的步骤记录下
1. 下载客户端
这里下载的名字是clash-linux-amd64-v1.18.0.gz
,具体地址自行搜索
2. 解压,重命名
将上一步文件解压,并将解压后的文件重命名为clash
3. 添加权限
chmod +x clash
4. 获取配置文件
将你拥有的服务商的订阅配置文件下载下来,这里不解释这个订阅文件是什么,不懂的话自行研究
wget -O config.yml your_config_web_address
5. 下载mmdb文件
一开始大概率会出现缺少mmdb
文件,所以这里事先要下载这个文件
wget -O Country.mmdb https://github.com/Dreamacro/maxmind-geoip/releases/download/20240612/Country.mmdb
6. 设置目录
将准备好的config.yml Country.mmdb clash
三个文件和程序移动到/usr/local/bin
7. 创建service
创建文件:/etc/systemd/system/clash.service
如下
1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Clash daemon, A rule-based proxy in Go.
After=network.target
[Service]
Type=simple
Restart=always
ExecStart=/usr/local/bin/clash -d /etc/clash
[Install]
WantedBy=multi-user.target
8. 启动clash服务
通过systemctl
命令可以启动和查看clash状态
1
2
3
4
5
systemctl daemon-reload
systemctl enable clash
systemctl start clash
sudo systemctl status clash
sudo journalctl -xe
9. 设置代理
以上就已经把clash设置好了,接下来要想达到代理效果,还需要设置代理
1
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890
在终端执行上述命令就可以将网络请求都转入到本地代理
10. 测试效果
如果没有问题的话,就可以实现科学上网了。执行wget google.com
或者curl google.com
就可以立刻看见返回的html
代码了
注意,这里是不能用
ping google.com
来测试的,具体是什么原理来着忘记了,先mark一下,以后更新
11. 更换proxy的问题
其实这里没问题的话就已经达到效果了,但是其实在配置文件config.yml
里是有很多proxy
的,那么怎么去切换呢?关于这个问题,我起码研究了半天,英文资料也找了很多,很不幸的是没有找到一点有用的资料。要想更换proxy
,我能查到的就是修改config.yml
文件里的proxy
,加上enable:ture
,然后重启clash服务
1
2
proxies:
- {"name":"香港-01","type":"ss","server":"bc188e3e.bzlxzl.com","port":57001,"cipher":"chacha20-ietf-poly1305","password":"Pl9J","udp":true}
修改后
1
2
proxies:
- {"name":"香港-01","type":"ss","server":"bc188e3e.bzlxzl.com","port":57001,"cipher":"chacha20-ietf-poly1305","password":"Pl9J","udp":true, "enable":true}
目前能知道的就是只有手动操作这种方式,而用命令行的方式去切换clash节点起码目前我没查到。这真是很不爽的一个事
12. DashBoard 外部控制
除了命令行,还可以通过外部UI
的方式访问clash
配置界面,就是部署、设置好clash
后,可以通过浏览器访问到配置界面,因为基本上都在服务器操作,操作越少越好越习惯,所以我自己没去弄这种
13. 自动设置proxy
以上测试好后,可以把自动化脚本添加到.bashrc
文件,这样以后需要代理了直接clash_on
就行,不需要clash_off
关闭
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Proxy auto start
export https_proxy=http://127.0.0.1:7890
export http_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890
# Open proxy
clash_on() {
export https_proxy=http://127.0.0.1:7890
export http_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890
echo "HTTP/HTTPS Proxy on"
}
# Close proxy
clash_off() {
unset http_proxy
unset https_proxy
unset all_proxy
echo "HTTP/HTTPS Proxy off"
}
参考资料
1: https://rainchan.win/2022/05/15/Clash-tun%E6%A8%A1%E5%BC%8F%E9%85%8D%E7%BD%AE%E6%8C%87%E5%8D%97/