如何优雅地使用NAS(四)代理服务器

259 次浏览

NAS服务在有公网IP的环境中(如家庭宽带,需使用DDNS)使用Nginx反向代理并通过V2ray加密隧道实现安全的外网访问。

1、关闭OMV的公网暴露

OMV 默认监听 80(或 443)。
确保它只监听本机访问:

sudo nano /etc/nginx/sites-enabled/openmediavault-webgui

找到 listen 语句,改为:

listen 127.0.0.1:80 default_server;

保存后重启 Nginx:

sudo systemctl restart nginx

这样 OMV 只接受来自本机的访问(外部访问不到)。

2、安装并配置V2Ray

V2Ray作为服务端,外网设作为客户端进行访问。
执行官方安装脚本:

bash <(curl -L -s https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

启动并检查V2ray运行状态:

sudo systemctl start v2ray   # 启动
sudo systemctl enable v2ray  # 设置开机自启
sudo systemctl status v2ray  # 检查服务状态

配置V2ray服务端:

sudo nano /usr/local/etc/v2ray/config.json

内容如下:

{
  "inbounds": [
    {
      "tag": "vmess-in",        // vmess + WebSocket + TLS 入站
      "listen": "127.0.0.1",    // 只监听本地连接,由 Nginx 反向代理
      "port": 10000,            // 此端口必须与 Nginx 配置中 proxy_pass 的端口一致,避免直接使用443,以防冲突
      "protocol": "vmess",
      "settings": {
        "clients": [{
          "id": "输入UUID",     // 使用命令成 UUID cat /proc/sys/kernel/random/uuid
          "alterId": 0
        }]
      },
      "streamSettings": {
        "network": "ws",        // 使用 WebSocket 传输
        "wsSettings": {
          "path": "/v2ray"      // 自定义路径,增加隐蔽性, 此路径必须与 Nginx 配置中的 location 路径一致
        }
      }
    }
  ],

  "outbounds": [
    {
      "tag": "direct",          // 直接出站标签
      "protocol": "freedom",    // 使用freedom直接出站
      "settings": {}
    },
    {
      "tag": "block",           // 拦截出站标签
      "protocol": "blackhole",  // 拦截出站
      "settings": {}
    },
    {
      "tag": "proxy",           // 代理出站标签,使用其他节点代理出站。
      "protocol": "vmess",
      "settings": {
        "vnext": [{
          "address": "输入代理节点地址或域名",
          "port": 443,
          "users":[{ "id": "输入UUID", "alterId": 0, "security": "auto"}]
        }]
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls",
        "tlsSettings": {
          "serverName": "输入代理节点域名",
          "allowInsecure": false
        },
        "wsSettings": {
          "path": "/v2ray"
        }
      }
    }
  ],

  "routing": {
    "rules": [
      {
        "type": "field",        // 广告拦截
        "inboundTag": ["vmess-in"],
        "domain": ["geosite:category-ads-all"],  // 需要 geosite.dat数据
        "outboundTag": "block"
      },
      {
        "type": "field",        // 国外流量走代理
        "inboundTag": ["vmess-in"],
        "domain": ["geosite:geolocation-!cn"],   // 需要 geosite.dat数据
        "outboundTag": "proxy"
      },
      {
        "type": "field",        // 其他流量直连
        "inboundTag": ["vmess-in"],
        "outboundTag": "direct"
      }
    ]
  }
}

3、配置Nginx反向代理

新建配置文件,避免修改OMV的相关配置

sudo nano /etc/nginx/conf.d/v2ray.conf

内容如下:

server {
    listen 8443 ssl http2;         # 启用 HTTP/2 可以提供更好的性能家庭宽带屏蔽443端口
    listen [::]:8443 ssl http2;    # 启用 IPv6 支持
    server_name your-domain.com;   # 使用域名匹配

    # SSL 证书路径使用Let's Encrypt生成
    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
    
    # 如果没有证书可先用自签
    # openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    #   -keyout /etc/ssl/private/ssl-cert-snakeoil.key \
    #   -out /etc/ssl/certs/ssl-cert-snakeoil.pem

    # 用于 V2Ray WebSocket
    location /v2ray {              # 此路径与 V2Ray 配置和客户端保持一致
        if ($http_upgrade != "websocket") {return 404;}  # 不通过ws访问时返回404
        proxy_pass http://127.0.0.1:10000;  # 此端口需要与 V2Ray 配置中的端口一致
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_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;
        # WebSocket 超时设置
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }
    
    # 外网直接访问时返回伪装页面
    location / {
        proxy_pass https://google.com;      # 代理到google主页
        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;
    }
}

# 只监听局域网内访问可通过V2Ray加密隧道访问
server {
    listen 192.268.1.100:80;                # 服务器的局域网地址
    server_name _;

    location / {
        proxy_pass http://127.0.0.1:80;     # 指向本地OMV服务
        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和V2Ray

sudo nginx -t
sudo systemctl restart nginx
sudo systemctl restart v2ray

4、客户端配置

地址 你的域名或公网 IP
端口 8443
UUID 与服务器相同
协议 VMess
传输 WebSocket
路径 /V2Ray
TLS 开启(如果你用了 SSL 证书)

在客户端上不开启V2Ray时,浏览器输入以下地址打开伪装页面。

https://<域名或服务器公网IP>

在客户端上不开启V2Ray时,浏览器输入以下地址打开OMV管理页面。

http://<服务器局域网IP>

5、补充说明:geosite/geoip数据获取

使用官方自动更新脚本:

bash <(curl -L -s https://github.com/v2fly/fhs-install-v2ray/raw/master/install-dat-release.sh)

运行后会自动下载最新数据:

/usr/local/share/v2ray/geoip.dat
/usr/local/share/v2ray/geosite.dat

常见的分组:
geosite:cn(中国大陆网站)
geosite:geolocation-!cn(非中国网站)
geosite:google
geosite:youtube
geosite:facebook
geosite:telegram
geosite:netflix

自动更新:

sudo crontab -e

手动添加一个cron任务,用于自动更新geosite/geoip:

0 3 * * 0 bash <(curl -L -s https://github.com/v2fly/fhs-install-v2ray/raw/master/install-dat-release.sh) >/dev/null 2>&1

命令说明:
0 3 * * 0 表示每周日凌晨3点执行任务

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部