自建Serveo.net類似的服務

让速不让路發表於2024-06-14

Serveo.net 的原理

Serveo.net 是一個基於 SSH 的反向代理服務,它允許使用者透過 SSH 隧道將本地伺服器暴露在網際網路上。它的工作原理大致如下:

  1. SSH 隧道建立:使用者透過 SSH 連線到 Serveo.net,並使用 -R 選項建立反向隧道。-R 選項會將使用者本地的某個埠對映到 Serveo.net 的子域名或自定義域名上。

  2. 請求轉發:Serveo.net 監聽指定的子域名或自定義域名的請求,並將這些請求透過 SSH 隧道轉發到使用者的本地伺服器。

  3. 動態 DNS 配置:Serveo.net 使用 DNS 解析和驗證來確保域名配置正確,並允許使用者使用自定義域名。使用者需要配置 CNAME 和 TXT 記錄來驗證域名所有權和 SSH 金鑰的指紋。

自建類似服務

你可以在自己的伺服器上設定類似的服務,實現類似 Serveo.net 的功能。以下是一個基本的指南,介紹如何使用 OpenSSH 和 Nginx 進行設定。

1. 準備工作

確保你有一臺能夠訪問網際網路的伺服器,並且已經安裝了 OpenSSH 和 Nginx。

2. 配置 SSH 服務

在你的伺服器上,編輯 SSH 配置檔案以允許反向隧道:

sudo nano /etc/ssh/sshd_config

新增或修改以下行:

AllowTcpForwarding yes
GatewayPorts yes

然後重啟 SSH 服務:

sudo systemctl restart ssh

3. 配置 Nginx 反向代理

安裝 Nginx(如果尚未安裝):

sudo apt update
sudo apt install nginx

編輯 Nginx 配置檔案以設定反向代理:

sudo nano /etc/nginx/sites-available/default

示例配置:

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://localhost:3000;  # 這是本地伺服器監聽的埠
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

重啟 Nginx:

sudo systemctl restart nginx

4. 使用 SSH 反向隧道

在本地機器上,使用 SSH 建立反向隧道:

ssh -R 80:localhost:3000 yourusername@yourserver.com

這個命令將本地的 3000 埠對映到伺服器的 80 埠。

5. 配置 DNS

確保你的域名指向你的伺服器 IP 地址。你可以在域名提供商的 DNS 設定頁面中新增一個 A 記錄,指向你的伺服器 IP。

進一步最佳化

  1. 使用 Docker:你可以將上述配置容器化,使用 Docker 來簡化部署和管理。

  2. TLS 加密:使用 Let's Encrypt 等工具為你的域名配置 HTTPS,以確保資料傳輸的安全性。

  3. 負載均衡:如果需要支援高併發,可以配置負載均衡器,如 HAProxy 或 Nginx 自帶的負載均衡功能。

透過以上步驟,你可以在自己的伺服器上建立類似 Serveo.net 的服務,實現將本地服務暴露到網際網路。

相關文章