vps交流

[美国VPS] 实现Tailscale与自建网站共存(共用443端口)


机器:日本大陆优化
系统:Ubuntu 22.04
架构:KVM
所需软件:Docker Nginx(注意含有stream模块) Certbot
安装官方Nginx(非Ubuntu源)(https://nginx.org/en/linux_packages.html#Ubuntu
依次执行以下命令安装Nginx

“`
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring

curl https://nginx.org/keys/nginx_signing.key | gpg –dearmor
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

gpg –dry-run –quiet –no-keyring –import –import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg]
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx"
    | sudo tee /etc/apt/sources.list.d/nginx.list

echo -e "Package: *nPin: origin nginx.orgnPin: release o=nginxnPin-Priority: 900n"
    | sudo tee /etc/apt/preferences.d/99nginx

sudo apt update
sudo apt install nginx

“`
再安装Certbot

“`
apt install certbot
“`
使用DNS模式申请证书

“`
sudo certbot certonly –manual –preferred-challenges dns
“`
在对应的网站上根据提示添加好DNS记录,然后在/etc/letsencrypt/archive/(你的网站)中复制你的证书
将fullchain1.pem privkey1.pem 分别重命名为 (你的网站).crt (你的网站).key
例如你的域名是derp.example.com,则文件名应为derp.example.com.crt和derp.example.com.key

接下来选择一个目录存放你的证书,我选择放在/data/derper/certs
然后执行以下命令拉取docker镜像(https://hub.docker.com/r/fredliang/derper

“`
docker pull fredliang/derper
“`
再执行以下命令(有需要修改的字段)

“`
docker run -d
–name derper
–restart=always
-p 0.0.0.0:3478:3478/udp #此UDP端口不建议修改
-p 0.0.0.0:3443:443     #此处3443端口可修改,对应后面的stream,这里的443不建议修改,对应下面DERP_ADDR
-v /data/derper/certs/derp.example.com.crt:/app/certs/derp.example.com.crt #自备证书(fullchain)
-v /data/derper/certs/derp.example.com.key:/app/certs/derp.example.com.key #自备证书(privkey)
-e DERP_DOMAIN=derp.example.com #自备域名
-e DERP_ADDR=:443 #derper端口,443不建议修改
-e DERP_CERT_MODE=manual
fredliang/derper:latest
“`
上面为命令解析,下面是给你复制的

“`
docker run -d
–name derper
–restart=always
-p 0.0.0.0:3478:3478/udp
-p 0.0.0.0:3443:443
-v /data/derper/certs/derp.example.com.crt:/app/certs/derp.example.com.crt
-v /data/derper/certs/derp.example.com.key:/app/certs/derp.example.com.key
-e DERP_DOMAIN=derp.example.com
-e DERP_ADDR=:443
-e DERP_CERT_MODE=manual
fredliang/derper:latest
“`
执行完后docker这里就不需要管了
然后修改位于/etc/nginx/的nginx.conf
接下来的教程参考来源:https://always200.com/tailscale- … 0%E8%A6%81%EF%BC%89
将stream字段添加到http上面

“`
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

stream {
    # 这里就是 SNI 识别,将域名映射成一个配置名
    map $ssl_preread_server_name $backend_name {
    # 把derp.example.com的流量转到derper的upstream
    derp.example.com derper;
    # 域名都不匹配情况下的默认值
        default https_web;
    }
    # 监听 443 并开启 ssl_preread
    server {
        listen 443;
        listen [::]:443;
        proxy_pass  $backend_name;
        ssl_preread on;
    }
    upstream derper {
      server 127.0.0.1:3443; #此处端口对应上面docker配置的3443
    }
    upstream https_web {
      server 127.0.0.1:12443; #如果需要配置其他网站,将有关443端口全部改为12443
    }
}

http {
xxxxxxxxxxxxxxxxxxx
}
“`
这样访问[https://derp.example.com] 就能直接显示This is a DERP Server了
添加其他网站例如www.example.com 则需要在位于/etc/nginx/sites-enabled/www.example.com.conf 中
将最前面的443改为12443(对应上面stream的https_web的端口)

“`
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
后面省略
“`
改后则为

“`
server {
    listen 12443 ssl http2;
    listen [::]:12443 ssl http2;
后面省略
“`
然后为了重载nginx.conf,需要重启Nginx服务,使用以下命令重启

“`
systemctl restart nginx
“`
如果配置无误,就会马上重启好
如果出现报错(443 is xxxx),那大概率是因为你现有网站的端口没改,导致端口占用,需要修改后再重启
最后再去Tailscale上修改ACL,增加derpmap即可

“`
  "derpMap": {
    "OmitDefaultRegions": false
    ,
    "Regions": {
      "900": {
      "RegionID": 900,
      "RegionCode": "lian",
      "RegionName": "LIAN",
      "Nodes": [{
          "Name": "tx",
          "RegionID": 900,
          "HostName": "derper.linshenkx.cn",
          "DERPPort": 443
      }
     ]
    }
    }
“`
测试Derp是否可用时,将"OmitDefaultRegions"设置为true
然后在命令行使用
tailscale status
tailscale netcheck
tailscale ping [你的其他设备的Tailscale IP]
如果出现延迟 并ping通内网设备,则证明运行正常

此文毕

赞(0)
版权声明:本贴采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
帖子名称:《[美国VPS] 实现Tailscale与自建网站共存(共用443端口)》
帖子链接:https://bbs.toot.su/178409.html

相关推荐