使用树莓派搭建NAS-4

24 次浏览

使用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

执行官方安装脚本:

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

内容如下:

{
  "log": {
    "access": "/var/log/v2ray/access.log",  # 访问日志路径
    "error": "/var/log/v2ray/error.log",    # 错误日志路径
    "loglevel": "warning"       # 日志等级可选debug / info / warning / error / none
  },
  
  "inbounds": [
    {
      "tag": "wmess-in",        # vmess + WebSocket + TLS 入站
      "listen": "127.0.0.1",    # 只监听本地连接,由Nginx反向代理
      "port": 10000,            # 此端口必须与Nginx配置中proxy_pass的端口一致,避免直接使用443,以防冲突
      "protocol": "vmess",
      "settings": {"clients": [{"id": "替换成你的UUID", "alterId": 0}]},  # 使用命令成UUID: cat /proc/sys/kernel/random/uuid
      "streamSettings": {"network": "ws", "wsSettings": {"path": "/v2ray"}}
    },
    {
      "tag": "ssh-in"
      "listen": "0.0.0.0",
      "port": 10022,
      "protocol": "dokodemo-door",
      "settings": {"address": "127.0.0.1", "port": 22, "network": "tcp"},
    },
    {
      "tag": "smb-in",
      "listen": "127.0.0.1",
      "port": 10445,
      "protocol": "dokodemo-door",
      "settings": { "address": "127.0.0.1", "port": 445, "network": "tcp" }
    },
    {
      "tag": "webdav-in",
      "listen": "127.0.0.1",
      "port": 18080,
      "protocol": "dokodemo-door",
      "settings": { "address": "127.0.0.1", "port": 8080, "network": "tcp" }
    },
    {
      "tag": "rdp-in"
      "listen": "127.0.0.1",
      "port": 13389,
      "protocol": "dokodemo-door",
      "settings": {"address": "192.168.1.101", "port": 3389, "network": "tcp"},
    }
  ],
  
  "outbounds": [
    {
      "tag": "direct"           # 直接出站标签
      "protocol": "freedom",    # 使用freedom直接出站
      "settings": {},
    },
    {
      "tag": "proxy"            # 代理出站标签,使用其他节点代理出站。
      "protocol": "vmess",
      "settings": {"vnext": [{ "address": "代理节点地址", "port": 443, "users":[{ "id": "替换成你的UUID", "alterId": 0, "security": "auto"}] }] },
      "streamSettings": { "network": "ws", "security": "tls", "wsSettings": { "path": "/v2ray/" } }
    },
    {
      "tag": "block"            # 拦截出站标签
      "protocol": "blackhole",  # 拦截出站
      "settings": {},
    },
    {
      "tag": "local-web",       # 本地回环,用于访问本地OMV
      "protocol": "dokodemo-door",
      "settings": {"address": "127.0.0.1", "port": 80, "network": "tcp"}
    }
  ],
  
  "routing": {
    "rules": [
      {
        "type": "field",        # 访问OMV
        "inboundTag": ["vmess-in"],
        "domain": ["yourdomain.com"],
        "outboundTag": "local-web"
      },
      {
        "type": "field",        # 国外流量走代理
        "inboundTag": ["vmess-in"],
        "domain": ["geosite:geolocation-!cn"],   # 需要 geosite.dat数据
        "outboundTag": "proxy"
      },
      {
        "type": "field",        # 广告拦截
        "inboundTag": ["vmess-in"],
        "domain": ["geosite:category-ads-all"],  # 需要 geosite.dat数据
        "outboundTag": "block"
      },
      {
        "type": "field",        # 其他流量直连
        "inboundTag": ["vmess-in"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "inboundTag": ["ssh-in"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "inboundTag": ["smb-in"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "inboundTag": ["webdav-in"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "inboundTag": ["rdp-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 {
        # 如果 WebSocket 协商失败返回 404 更安全
        if ($http_upgrade != "websocket") {return 404;}
        
        proxy_redirect off;
        proxy_pass http://127.0.0.1:10000;  # 此端口需要与 V2Ray 配置中的端口一致
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    
    # 外网直接访问时返回伪装页面
    location / {
        proxy_pass https://google.com;     # 代理到google主页
    }
    
    # 用于WebDAV/Nextcloud 文件访问
    location /files {
        proxy_pass http://127.0.0.1:8080/;  # WebDAV使用的端口
        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 证书)

5、通过客户端访问

在不开启V2ray客户端的情况下使用浏览器访问

https://yourdomain.com:8443/

会进入nginx配置的伪装页面。

在客户端通过 V2Ray 建立隧道后(即代理开启状态),在浏览器访问:

https://yourdomain.com:8443

可以访问到OMV 的web管理页面。
OMV 本身不会暴露公网端口,极大提升安全性。

6、补充说明: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

添加一行:

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

每周日凌晨 3 点自动更新 geosite/geoip

发表评论

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

滚动至顶部