手动安装 overtls 的方法
本文内容测试环境为 Ubuntu 24.04
前文 简单、高速、稳定的科学上网软件 overtls 安装、使用教程 讲了自动安装 overtls 服务端的方法,这是软件作者提供的安装方法,存在很大问题,比如:
它会不经用户同意就擅自删除 /etc/nginx/sites-available/
目录下的文件,如果你不知道这点,就会发现你的网站忽然全部变成 404 ,你还有可能百思不得其解
既然使用 overtls 的前提是用户有自己的 https 网站,就不需要它为我们申请 https 证书
下面介绍手动安装 overtls server 的方法
用官方脚本安装 overtls,再修改设置
用官方脚本安装 overtls server
wget https://raw.githubusercontent.com/shadowsocksr-live/overtls/master/install/overtls-install-musl.sh
chmod +x overtls-install-musl.sh
sudo ./overtls-install-musl.sh
删除 overtls 安装的不需要的文件
#删除 overtls 创建的网站配置文件
sudo rm /etc/nginx/conf.d/overtls.conf
# 删除 overtls 创建的网站目录和证书文件
sudo rm -rf /fakesite*
#删除 overtls 的 https 证书自动续期:
sudo crontab -e
# 删除类似下面行:
0 0 10 * * /fakesite_cert/renew_cert.sh >/dev/null 2>&1
重新创建网站配置文件的软链接,解决网站 404 的问题
cd /etc/sites-enabled
sudo ln -s /etc/sites-available/mlkji.com
修改网站的 Nginx 配置文件,增加供 overtls 用的 location
你的网站的默认配置可能是这样:
server {
server_name mlkji.com www.mlkji.com;
listen [::]:443 default_server ssl http2;
listen 443 default_server ssl http2;
ssl_certificate /etc/letsencrypt/live/mlkji.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mlkji.com/privkey.pem; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
ssl_session_cache shared:SSL:10m;
location / {
root /home/zyx/public;
index index.html;
try_files $uri/ $uri =404;
}
}
增加类似下面内容:
location /eeeee-ddddd-ccccc-bbbbb-aaaaa/ {
proxy_redirect off;
proxy_pass http://127.0.0.1:11100;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
完整的网站 Nginx 配置文件:
server {
server_name mlkji.com www.mlkji.com;
listen [::]:443 default_server ssl http2;
listen 443 default_server ssl http2;
ssl_certificate /etc/letsencrypt/live/mlkji.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mlkji.com/privkey.pem; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
ssl_session_cache shared:SSL:10m;
location / {
root /home/zyx/public;
index index.html;
try_files $uri/ $uri =404;
}
location /eeeee-ddddd-ccccc-bbbbb-aaaaa/ {
proxy_redirect off;
proxy_pass http://127.0.0.1:11100;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}
解释:
当 Nginx 从 443 端口接收到 /eeeee-ddddd-ccccc-bbbbb-aaaaa/
的 uri 请求时,直接把请求转发到 overtls server 监听端口 11100
修改 overtls 服务端配置文件 config.json
修改 /etc/overtls/config.json
改成类似下面内容:
{
"remarks": "zyx-2024-12-21",
"tunnel_path": "/eeeee-ddddd-ccccc-bbbbb-aaaaa/",
"test_timeout_secs": 5,
"server_settings": {
"forward_addr": "http://127.0.0.1:80",
"listen_host": "127.0.0.1",
"listen_port": 11100
},
"client_settings": {
"server_host": "32.31.30.29",
"server_port": 443,
"server_domain": "mlkji.com",
"listen_host": "127.0.0.1",
"listen_port": 2211
}
}
这个 config.json 是 overtls 服务端和客户端通用的,服务端主要用到 server_settings
,客户端主要用到 client_settings
解释:
{
"remarks": "zyx-2024-12-21",
"tunnel_path": "/eeeee-ddddd-ccccc-bbbbb-aaaaa/", // 自定义 uri 字符串
"test_timeout_secs": 5,
"server_settings": {
"forward_addr": "http://127.0.0.1:80",
"listen_host": "127.0.0.1",
"listen_port": 11100 // 服务端监听端口
},
"client_settings": {
"server_host": "32.31.30.29", // VPS IP 地址
"server_port": 443,
"server_domain": "mlkji.com", // 网站 Nginx 配置文件中,增加了 overtls 相关设置的域名
"listen_host": "127.0.0.1",
"listen_port": 2211 // overtls 客户端监听的端口
}
}
最后,不要忘记重启 overtls 使修改生效
sudo systemctl restart overtls
# or
sudo service overtls restart
上述方法是不是比较繁琐?下面讲一种更加简单的 overtls 手动安装方法
不用 overtls 官方安装脚本,直接安装相关文件
假设你已经在一台 VPS 上安装了 overtls,想要在另一台使用同样操作系统的 VPS 上再次安装,这时,我们可以用 sudocp 传送相关的文件
sudocp from to /etc/init.d/overtls /usr/local/bin/overtls-bin /usr/lib/systemd/system/overtls.service /etc/overtls/config.json
再按照前面讲的方法修改网站 Nginx 配置文件和 /etc/overtls/config.json
然后执行下面命令:
# ${service_stub_path}
sudo chmod +x /etc/init.d/overtls
# ${service_desc_file_path}
chmod 754 /usr/lib/systemd/system/overtls.service
/usr/lib/systemd/systemd-sysv-install enable overtls
#ln -s /usr/lib/systemd/system/overtls.service /etc/systemd/system/multi-user.target.wants/overtls.service
# 可选的自动重启 overtls 计划任务
#(crontab -l; echo "${random_minute} ${random_hour} * * * systemctl restart overtls") | crontab -
(crontab -l; echo "43 2 * * * systemctl restart overtls") | crontab -
目前我还未测试过这个方法
2024-12-21