手动安装 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