第二个VPS科学球 - 改

新VPS科学球是racknerd一年9.89$捡的,算是美帝良心?

后记:racknerd丢包率和延迟真的没法忍,趁人民币强势斥巨资(三百人民币)换了某瓦工的最贫穷CN2线路,果然一分价钱一分货……

看了几个帖子又咨询了chatgpt,简单的说CN2 GIA是CN2的升级版,贵了两三倍,如果只是上上网CN2就够用了。

仅限技术交流!

搭建新VPS科学球环境

Centos7实在太老了就重装了Ubuntu 22.04,首次登录改密码(为了方便,应该把zshgitoh-my-zshvimtmux装上。):

1
2
3
4
5
6
7
8
9
# VPS上改密码
passwd
# 电脑上上传秘钥进行ssh免密登录,也可以直接在云控制台里一次录入多个公钥
ssh-copy-id root@1*.*.*.*

sudo apt update && sudo apt dist-upgrade -y
sudo apt install zsh git vim tmux ufw
chsh -s $(which zsh)
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

将ssh设置为无法用密码登录(只接受key pair认证),顺便调整ssh超时时间:

1
2
3
4
5
6
7
8
9
# /etc/ssh/sshd_config 中:
# 禁止密码认证
PasswordAuthentication no
# 调整ssh会话一次存活60秒,自动重连60次
ClientAliveInterval 60
ClientAliveCountMax 60

# 重启sshd服务:
service sshd restart

开防火墙策略:

1
2
3
4
sudo ufw allow 22/tcp comment ssh
sudo ufw allow 443/tcp comment https
sudo ufw allow 80/tcp comment http
sudo ufw enable

搭建VPS科学球

继续向一键安装脚本(原来的一键安装脚本已失效)低头,真香……这个脚本推荐的是trojan+TCP+TLS,我客户端也按照这个配的,其他的配置貌似连不上,我也没仔细研究。

1
wget -P /root -N --no-check-certificate "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh" && chmod 700 /root/install.sh && /root/install.sh

配置aria2c远程下载服务,本地使用AriaNg搭配风味更佳:

1
2
3
4
mkdir -p ~/.config/aria2
touch ~/.config/aria2/aria2.conf #aria2的配置文件
touch ~/.config/aria2/aria2.session #aria2保存会话的文件
vim ~/.config/aria2/aria2.conf #修改配置文件

配置如下:

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
## '#'开头为注释内容, 选项都有相应的注释说明, 根据需要修改 ##
## 被注释的选项填写的是默认值, 建议在需要修改时再取消注释 ##

## 文件保存相关 ##

# 文件的保存路径(可使用绝对路径或相对路径), 默认: 当前启动位置
dir=/webroot/downloads
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
#disk-cache=32M
# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
#file-allocation=none
# 断点续传
continue=true

## 下载连接相关 ##

# 最大同时下载任务数, 运行时可修改, 默认:5
#max-concurrent-downloads=5
# 同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=16
# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=4M
# 单个任务最大线程数, 添加时可指定, 默认:5
split=16
# 整体下载速度限制, 运行时可修改, 默认:0
max-overall-download-limit=3000000
# 单个任务下载速度限制, 默认:0
#max-download-limit=0
# 整体上传速度限制, 运行时可修改, 默认:0
max-overall-upload-limit=50000
# 单个任务上传速度限制, 默认:0
#max-upload-limit=0
# 禁用IPv6, 默认:false
disable-ipv6=true
# 连接超时时间, 默认:60
#timeout=60
# 最大重试次数, 设置为0表示不限制重试次数, 默认:5
#max-tries=5
# 设置重试等待的秒数, 默认:0
#retry-wait=0

## 进度保存相关 ##

# 从会话文件中读取下载任务
input-file=/root/.config/aria2/aria2.session
# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件
save-session=/root/.config/aria2/aria2.session
# 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
save-session-interval=60

## RPC相关设置 ##

# 启用RPC, 默认:false
enable-rpc=true
# 允许所有来源, 默认:false
rpc-allow-origin-all=true
# 允许非外部访问, 默认:false
rpc-listen-all=true
# 事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
#event-poll=select
# RPC监听端口, 端口被占用时可以修改, 默认:6800
rpc-listen-port=6800
# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
rpc-secret=<your-rpc-secret>
# 设置的RPC访问用户名, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-user=<USER>
# 设置的RPC访问密码, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-passwd=<PASSWD>
# 是否启用 RPC 服务的 SSL/TLS 加密,
# 启用加密后 RPC 服务需要使用 https 或者 wss 协议连接
#rpc-secure=true
# 在 RPC 服务中启用 SSL/TLS 加密时的证书文件,
# 使用 PEM 格式时,您必须通过 --rpc-private-key 指定私钥
#rpc-certificate=/path/to/certificate.pem
# 在 RPC 服务中启用 SSL/TLS 加密时的私钥文件
#rpc-private-key=/path/to/certificate.key

## BT/PT下载相关 ##

# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
follow-torrent=true
# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51414
# 单个种子最大连接数, 默认:55
#bt-max-peers=55
# 打开DHT功能, PT需要禁用, 默认:true
enable-dht=true
# 打开IPv6 DHT功能, PT需要禁用
#enable-dht6=false
# DHT网络监听端口, 默认:6881-6999
dht-listen-port=6881-6999
# 本地节点查找, PT需要禁用, 默认:false
bt-enable-lpd=true
# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=true
# 每个种子限速, 对少种的PT很有用, 默认:50K
bt-request-peer-speed-limit=3M
# 客户端伪装, PT需要
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
peer-agent=Transmission/2.77
# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=1.0
seed-time=0
# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false
# BT校验相关, 默认:true
#bt-hash-check-seed=true
# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
bt-save-metadata=false
# dht-file
dht-file-path=/root/.config/aria2/dht.dat
# 删除未选择的文件
bt-remove-unselected-file=true
# 无速度时自动停止时间
#bt-stop-timeout=1800

启动aria2c:

1
aria2c --conf-path=$HOME/.config/aria2/aria2.conf -D

如果端口有监听,防火墙也设了策略,但是仍然不通,可能是selinux策略的问题,可以在selinux中选择添加新端口:

1
2
sudo semanage port -l | grep http_port_t
sudo semanage port -a -t http_port_t -p tcp 8888

如果nginx报403错误,有可能是selinux的问题,看看ll文件夹权限最后有没有一个.+,如果有可以尝试关闭selinux重新创建文件夹,去掉那个.

如果觉得selinux麻烦,可以选择关闭selinux:

1
2
3
4
5
6
7
8
# 验证selinux状态:
getenforce
# 或
/usr/sbin/sestatus -v

# 关闭selinux:
vim /etc/selinux/config
SELINUX=disabled

另外,我的tmux配置用的是Oh my tmux,安装也很简单,只要tmux >= 2.4即可(centos7默认是1.8)。

1
2
3
4
cd
git clone https://github.com/gpakosz/.tmux.git
ln -s -f .tmux/.tmux.conf
cp .tmux/.tmux.conf.local .

OpenWRT和客户端设置

我的macOS上用的是v2rayU,不过这个客户端貌似只有trojan配置可以用,其他不通,我也没仔细研究。

树莓派上依然是刷了最新版的OpenWrt-Rpi,这个版本跟一两年前的区别是,刷固件的时候会先覆盖内存卡做初始化,避免了上次那种配置了WiFi后即使重刷固件依然无法修改WiFi配置,必须低格才能删掉配置的尴尬。

在OpenWRT上要记得先设置静态IP(比如我用192.168.1.150),网关指向家里最前端的路由,再配置自定义DNS(如陕西移动的DNS是211.137.130.19),此时树莓派网络就正常了。

接下来记得设置OpenWRT的DHCP,以使连上来的终端的网关和DNS强制指向这个树莓派,在 网络->LAN->高级设置 中勾选强制;设置IPv4子网掩码(比如我用255.255.255.0);设置DHCP选项,比如我用3,192.168.1.1506,192.168.1.1503指设置DHCP客户端的网关,6指设置DHCP客户端的DNS,详见维基DHCP选项)。


最开始没设置DHCP选项,导致客户端接受的是前端路由器的DHCP设置,搜到这篇排错后,用service dnsmasq restart后查看日志logread -e dnsmasq,发现报错:

1
Mon Oct 31 22:27:24 2022 user.notice dnsmasq: found already running DHCP-server on interface 'br-lan' refusing to start, use 'option force 1' to override

这里要用强制选项DHCP才能设上,不过,如果网里同时有两个DHCP,通常相应快的那个会抢占设置客户端,所以最好还是关掉一个。

安装nps内网穿透服务端

小可怜服务器没多少空间舍不得安装golang,直接从release列表中下载相应的二进制运行:

1
2
3
4
wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz
tar -zxvf linux_amd64_server.tar.gz
sudo ./nps install
sudo nps start

查看日志cat /var/log/nps.log,此时应该会有报错,因为我的443早就被占了:

1
2
...
2022/11/06 12:21:24.577 [E] [http.go:82] listen tcp 0.0.0.0:443: listen: address already in use

修改配置文件/etc/nps/conf/nps.conf的用户名和密码,以及默认的httphttps监听:

1
2
3
4
5
6
7
# ...
web_username=xxx
web_password=xxx
# ...
http_proxy_port=8880
https_proxy_port=8443
# ...

重启nps restart再次查看日志,已正常启动:

1
2
3
4
5
6
7
...
2022/11/06 12:22:51.420 [I] [nps.go:202] the version of server is 0.26.10 ,allow client core version to be 0.26.0
2022/11/06 12:22:52.927 [I] [connection.go:36] server start, the bridge type is tcp, the bridge port is 8024
2022/11/06 12:22:52.931 [I] [server.go:200] tunnel task start mode:httpHostServer port 0
2022/11/06 12:22:52.931 [I] [connection.go:71] web management start, access port is 8080
2022/11/06 12:22:52.946 [I] [connection.go:62] start https listener, port is 8443
2022/11/06 12:22:52.946 [I] [connection.go:53] start http listener, port is 8880

开启防火墙,其中:

  • 8024是默认桥接口,用于将内网客户端注册上来;
  • 8080是管理口,用于网页访问修改配置;
  • 10022是我要用的ssh映射端口口,即访问4x.x.x.x:10022->内网192.168.x.x:22
  • 其他端口,如8443->4438880->80,是用于作域名映射的,我不用就不开策略了。
1
2
3
4
5
6
7
8
sudo firewall-cmd --zone=public --permanent --add-port=8024/tcp # nps 桥接端口
sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp # nps 管理端口
sudo firewall-cmd --zone=public --permanent --add-port=10022/tcp # nps 映射到内网22的端口
# 不使用域名代理,防火墙可以不开
#sudo firewall-cmd --zone=public --permanent --add-port=8443/tcp # nps http 代理端口
#sudo firewall-cmd --zone=public --permanent --add-port=8880/tcp # nps https 代理端口
firewall-cmd --list-all
firewall-cmd --reload

然后,在内网的树莓派3B+上下载客户端:

1
wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_arm_v7_client.tar.gz

按照说明添加一个客户端,并在树莓派上尝试连接nps服务器:

1
./npc -server=4x.x.x.x:8024 -vkey=*******

此时刷新nps管理页面,客户端已显示线了。在管理页面的TCP隧道中加一条端口映射,就可以从电脑上连接ssh -p 10022 pi@4x.x.x.x了。

新树莓派环境里youtube-dl下载带有key的hls时,使用--hls-prefer-native标识如果不生效,总是回到用ffmpeg下载,有可能是因为树莓派的python环境里缺少解密包,安装即可:

1
2
pip install pycrypto
# 如果是python3.10,用pycryptodome,参考:https://stackoverflow.com/questions/70705404/systemerror-py-ssize-t-clean-macro-must-be-defined-for-formats

树莓派需要下载这些东西,如果要使用OpenWRT,可以临时改一下路由,将0.0.0.0/0的默认路由指向OpenWRT即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 添加前
ip route list
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.119 metric 202
192.168.1.0/24 dev eth0 proto dhcp scope link src 192.168.1.119 metric 202
# 添加默认路由
sudo ip route add 0.0.0.0/0 via 192.168.1.150 dev eth0 proto static
# 查看结果
ip route list
0.0.0.0/0 via 192.168.1.150 dev eth0 proto static # 此时会多一条默认路由
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.119 metric 202
192.168.1.0/24 dev eth0 proto dhcp scope link src 192.168.1.119 metric 202
# 删除默认路由
sudo ip route del 0.0.0.0/0
# 查看结果
ip route list
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.119 metric 202
192.168.1.0/24 dev eth0 proto dhcp scope link src 192.168.1.119 metric 202
# 如果不小心删了默认路由,加回去就行了
sudo ip route add default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.119 metric 202

另外,

最后注意,此时树莓派的22口相当于暴露在公网上了,所以最好把ssh的密码登录关掉,只允许密钥登陆。

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×