Post

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/

2: https://blog.myxuechao.com/post/36

3: https://kevinello.ltd/2023/03/05/clash-on-linux%E9%85%8D%E7%BD%AE/#%E9%85%8D%E7%BD%AE%E5%AE%9A%E6%97%B6%E6%9B%B4%E6%96%B0%E8%AE%A2%E9%98%85

This post is licensed under CC BY 4.0 by the author.