菜单

Jason
发布于 2023-08-27 / 68 阅读 / 0 评论 / 0 点赞

使用v2ray实现nas内网穿透

使用背景

由于家里的NAS没有公网的IP,所以在在外面(不使用家里的局域网)是没有办法直接访问这台NAS的,需要一台具有公网IP的VPS,通过VPS反向代理来访问家用NAS。

原理说明

假定有A、B、C三个设备,A为不具备公网IP的家用NAS,B为具有公网IP的服务器(如VPS),C为外网需要访问NAS的设备。为了能够实现反向代理,需要做如下操作:

1、A需要知道B的IP,并主动和B建立连接,B开放一个端口的监听。

2、当C需要访问A的时候,会先通过B的监听端口和B建立连接,将数据发送给B。

3、然后由B通过 A 向 B 建立的连接将数据转发给 A。

实际的效果就相当于 C 向 A 发起请求,达到了访问 A 的目的。

使用v2ray实现如下图所示:

服务端v2ray安装

参见https://www.jayyang.cn/archives/v2rayfu-wu-duan-an-zhuang

NAS客户端v2ray安装

1、进入Container Station,创建应用程序,如下所示

yaml文件内容如下:

version: '3'
services:
  app:
    image: 'v2fly/v2fly-core'
    restart: unless-stopped
    command: run -config /etc/v2ray/config.json 

2、点击创建运行容器

3、进入容器修改配置文件后重新启动容器,配置文件内容见”客户端反向代理配置“章节

服务端反向代理配置
{
    "log": {
        "access": "/var/log/v2ray/access.log",
        "error": "/var/log/v2ray/error.log",
        "loglevel": "error"
    },
    "reverse": { // 反向代理
        "portals": [
            {
                "tag": "ssl_portal",
                "domain": "private.myssl.jason.com" // 这里为bridge与portal通信的域名,可以自己取,不用实际存在,客户端和服务端需要保持一致
            }
        ]
    },
    "inbounds": [
        {
            "tag": "extern_ssl",
            "port": 443,
            "protocol": "dokodemo-door",
            "settings": {
                "address": "127.0.0.1", // 需要访问的内网服务的IP地址
                "port": 443,            // 需要访问的内网服务的端口
                "network": "tcp,udp"
            }
        },
        {
            "tag": "tunnel",
            "port": 12345,
            "protocol": "vmess",
            "settings": {
                "clients": [
                    {
                        "id": "c9915fcd-2dff-f1fc-28ea-5542507f24db",
                        "alterId": 64
                    }
                ]
            }
        }
    ],
    "routing": {
        "domainStrategy": "AsIs",
        "rules": [
            {
                "type": "field",
                "inboundTag": [
                    "extern_ssl"
                ],
                "outboundTag": "ssl_portal"
            },
            {
                "type": "field",
                "inboundTag": [
                    "tunnel"
                ],
                "domain": [
                    "full:private.myssl.jason.com"
                ],
                "outboundTag": "ssl_portal"
            }   
        ]
    }
}

客户端反向代理配置
{
    "log": {
        "access": "/var/log/v2ray/access.log",
        "error": "/var/log/v2ray/error.log",
        "loglevel": "error"
    },
    "reverse": {
        "bridges": [
            {
                "tag": "ssl_bridge",
                "domain": "private.myssl.jason.com"
            }
        ]
    },
    "outbounds": [
        {
            "tag": "tunnel",
            "protocol": "vmess",
            "settings": {
                "vnext": [
                    {
                        "address": "server", // 服务端的IP
                        "port": 12345, // 服务端地址
                        "users": [
                            {
                                "id": "c9915fcd-2dff-f1fc-28ea-5542507f24db",
                                "alterId": 64
                            }
                        ]
                    }
                ]
            }
        },
        {
            "tag": "backend",
            "protocol": "freedom",
            "settings": {}
        }
    ],
    "routing": {
        "settings": {
            "domainStrategy": "AsIs",
            "rules": [
                {
                    "type": "field",
                    "inboundTag": [
                        "ssl_bridge"
                    ],
                    "outboundTag": "tunnel",
                    "domain": [
                        "full:private.myssl.jason.com"
                    ]
                },
                {
                    "type": "field",
                    "inboundTag": [
                        "ssl_bridge"
                    ],
                    "outboundTag": "backend"
                }
            ]
        }
    }
}
附件:

v2ray配置反向代理.pptx


评论