在Vultr VPS上搭建V2Ray+Nginx代理

Page content

本文假设读者已经具备以下条件:

  • 一台境外的vps,如Vultr VPS; 优惠购买Vultr VPS
  • 一个域名,无备案要求。先设置dns将域名解析到vps的ip,例如www.lockshell.com解析到xxx.xxx.xx.xx。
  • 为域名申请一个证书,可以从Let’s Encrypt获取免费证书;本文用到caddy能自动申请。
  • 有基本linux技巧,能使用vim/nano等编辑器。

本文用到系统环境及软件版本如下:

  • Nginx: nginx/1.18.0 (Ubuntu)
  • V2ray: 4.x
  • Vultr VPS
  • 系统: Ubuntu 20.04
lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.1 LTS
Release:	20.04
Codename:	focal

V2ay服务端

安装

curl -O https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh
sudo bash install-release.sh
sudo systemctl enable v2ray
sudo systemctl start v2ray

修改配置文件

位于/usr/local/etc/v2ray/config.json

{
    "inbound": {
        "port": 8888, # 服务器监听端口
        "listen": "127.0.0.1", # 只监听 127.0.0.1,避免除本机外的机器探测到开放了8888端口 
        "protocol": "vmess",
        "settings": {
            "clients": [
                {
                    "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
                    "alterId": 64
                }
            ]
        },
        "streamSettings": {
            "network": "ws", # WebSocket 方式
            "wsSettings": {
                "path": "/ray"
            }
        }
    },
    "outbound": {
        "protocol": "freedom", # 主传出协议 这里是直接转发所以流量
        "settings": {}
    }
}

重启V2Ray

sudo systemctl restart v2ray

检查V2Ray是否成功启动

vpn@sg-vpn:~/v2ray$ ps aux | grep v2ray
nobody     22527  3.2  2.2 4913616 22312 ?       Ssl  05:45   0:00 /usr/local/bin/v2ray -config /usr/local/etc/v2ray/config.json
vpn        22545  0.0  0.0   9540   740 pts/1    S+   05:45   0:00 grep --color=auto v2ray

停止

sudo systemctl disable v2ray.service --now

Nginx安装和配置

安装Nginx

sudo apt-get update
sudo apt-get install nginx

sudo nginx -V
nginx version: nginx/1.18.0 (Ubuntu)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled

安装certbot

关于域名SSL证书,使用certbot自动签一个let’s encrypt证书就行了。 很简单,参考链接: https://certbot.eff.org/

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update

sudo apt-get install certbot
sudo apt-get install python3-certbot-nginx

sudo certbot -nginx # 生成证书

成功后, 在crontab 中添加一条任务计划每三个月执行一次,因为let’s encrypt证书三个月过期:

0 0 15 */3 * /root/certbot/certbot-auto renew  # 在3,6,9,12月份的15号零点零分执行更新

配置Nginx

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  
  ssl_certificate       /etc/v2ray/v2ray.crt;
  ssl_certificate_key   /etc/v2ray/v2ray.key;
  ssl_session_timeout 1d;
  ssl_session_cache shared:MozSSL:10m;
  ssl_session_tickets off;
  
  ssl_protocols         TLSv1.2 TLSv1.3;
  ssl_ciphers           ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  ssl_prefer_server_ciphers off;
  
  server_name           mydomain.me;
  location /ray { # 与 V2Ray 配置中的 path 保持一致
    if ($http_upgrade != "websocket") { # WebSocket协商失败时返回404
        return 404;
    }
    proxy_redirect off;
    proxy_pass http://127.0.0.1:8888; # 假设WebSocket监听在环回地址的8888端口上
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    # Show real IP in v2ray access.log
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

检查并重新加载Nginx配置

sudo nginx -t
sudo nginx -s reload

V2Ray客户端

服务端部署完成后,可参照下面的教程安装配置不同平台的V2Ray客户端:

客户端配置示例

{
  "inbounds": [
    {
      "port": 1080, # 监听端口
      "protocol": "socks", # 入口协议为 SOCKS 5
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls"
        ]
      },
      "settings": {
        "auth": "noauth" #socks的认证设置,noauth 代表不认证,由于 socks 通常在客户端使用,所以这里不认证
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "vmess", # 出口协议
      "settings": {
        "vnext": [
          {
            "address": "yourdomain.com", # 服务器地址,请修改为你自己的服务器域名
            "port": 443, # 服务器端口 443是https使用的端口
            "users": [
              {
                "id": "b831381d-6324-4d53-ad4f-8cda48b30811", # 用户 ID,必须与服务器端配置相同
                "alterId": 64 # 此处的值也应当与服务器相同
              }
            ]
          }
        ],
        "streamSettings": {
          "network": "ws",
          "security": "tls", # 客户端的 security 要设置为 tls
          "wsSettings": {
            "path": "/ray" # 注意:对于 V2Ray,/ray 和 /ray/ 是不一样的
          }
        }
      }
    }
  ]
}
本文由 络壳 原创或整理,转载请注明出处