大家好,我是羊刀仙(长文警告️)

公网IP对于咱们NAS用户来说是非常重要的,现在公网IPv4越来越难获取,公网IPv6虽然也是可用方案,但目前普及度并不算广而且也不是想搞就能搞得到,若你的宽带是双栈那在群里便可力压群雄,是可以装X的~

其实各家NAS厂商基本都有自己的外网方案,就拿我最常用的威联通来说,可以通过官方提供 myQNAPcloud Link 外网访问设备,但毕竟用户基数庞大,每个人能分配得到的带宽有限,并不能很好地满足所有需求。我也试过 Zerotier ,不过还是有些局限性在里面。

本篇我会介绍利用 VPS 和 Nginx Proxy Manager ,以Docker部署方式通过frp做内网穿透,完美实现通过域名访问NAS上搭建的服务。整个过程也比较简单,一步步来即可。

准备一个主域名(建议)和一个VPS服务器(必须)。关于VPS,因为443端口(国内需备案)还有Docker被墙问题,更推荐使用海外VPS轻松实现无端口号访问,海外VPS作用也不仅于此,还可拿来搭建docker镜像加速服务等,后续有时间我也会出相关教程~文末会放置服务器推荐。。

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

如果追求极致速度,不在乎端口号,则选择国内VPS;追求速度和美观,则建议国内VPS备案。

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

什么是frp


我认为有必要先提前介绍一下:

frp(fast reverse proxy),是国内大佬专注于内网穿透的高性能的反向代理应用

frp支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

frp通过go语言写的,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。

frp服务端(搭建于VPS)和客户端(搭建于内网设备) UI 页面。

通过frp可以把原来不能在互联网上访问的内网服务,以安全、便捷的方式通过具备公网 IP 的节点中转发布到公网。这样一来,就可以在外面随时访问家里设备上搭建的服务。

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

准备工作


⭕️域名解析

这里建议准备一个专用的主域解析到服务器上。这里以阿里云为例。

打开阿里云主页,找到域名解析,点击解析设置

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?解析1.png

添加两条解析记录,如下图所示,记录类型为A,主机记录为主域名和泛域名,记录值为VPS服务器的公网IP。

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

其它不用管,保存后解析工作完成。

⭕️VPS基础配置

VPS购买平台不同,一些设置项或功能名称可能有略微不同,请自行辨别。阿里云比较有代表性,就也以它为例吧~

购买完等待VPS系统初始化后,首先要设置的就是安全组(防火墙),阿里云分了出/入方向(很多服务商不做区分),我们一般情况仅需添加下图框内的两类,如果你担心安全问题,可以根据需求逐个开放TCP协议端口(我直接1~66535全部开启)。

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

接下来,要初步启用服务器有几件必须做的事情。本篇以我的 Debian 10 为例,其它系统例如Ubuntu也大差不差。

通过SSH连接进入控制台,类似于NAS,利用工具在控制台输入以下命令:

ssh root@106.45.22.34 # 不同系统账户名不同,IP为外网或公网IP,这个要注意 sudo -i # debian一般不需要,默认给root apt update # 更新软件包列表,让系统知道有哪些软件包可以更新 apt upgrade --only-upgrade # 安装所有可用的软件包更新 apt install wget curl sudo vim git -y # 安装常用软件,Debian一般来说需要这步

接下来安装Docker,接着输入命令:

wget -qO- get.docker.com | bash # 非大陆服务器安装docker docker -v # 确认是否安装成功及查看版本 systemctl enable docker # 设置开机自动启动 apt install docker-compose # 安装docker-compose docker-compose --version #查看docker-compose版本

这些工作做完,就可以直接开搞!

部署配置frp服务


⭕️部署并配置frp服务端(VPS)

还是在咱们的VPS服务器上。

大佬牛人就是多,能用docker-compose部署就非常舒服。输入以下命令:

mkdir -p /root/data/docker_data/frps # 创建安装目录 cd /root/data/docker_data/frps # 进入该目录下 vim docker-compose.yml # 创建并编辑docker-compose.yml文件

具体代码如下

version: '3' services: frps: image: stilleshan/frps container_name: frps restart: always network_mode: host volumes: - ./frpc.toml:/frp/frpc.toml

英文输入状态下,按i即可进行修改。修改完毕后,按下esc,再同时按下shift+:,英文状态输入wq并回车,即可保存。

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

接着输入以下命令,创建并配置frps.toml服务端的配置文件:

vim frps.toml

将以下代码修改,复制粘贴进去后,保存并退出,操作类似。

这里强调,所有涉及 .toml 相关的配置文件内容,务必删除所有注释内容!

bindAddr = "0.0.0.0" bindPort = 7000 quicBindPort = 7000 # 以下两项注释变量不在本文最终代码内,需要折回删除 # 如果仅需要域名http访问可去掉井号,取消注释 # 手动配置自签/常规的TLS/SSL证书也可保留 # 但需要进行额外配置,请参考下面引用部分官方手册 # vhostHTTPPort = 80 # vhostHTTPSPort = 443 webServer.addr = "0.0.0.0" webServer.port = 7500 # frps的web管理端口,公网IP:7500 webServer.user = "admin" webServer.password = "admin" webServer.pprofEnable = false auth.method = "token" auth.token = "12345678"

若按照本文来,则无需参照这个:

为本地HTTP服务启用HTTPS:https://github.com/fatedier/frp?tab=readme-ov-file#enable-https-for-a-local-https-service
关于TLS设置:https://github.com/fatedier/frp?tab=readme-ov-file#tls

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

接着输入命令搭建运行:

docker-compose up -d 没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

⭕️部署并配置frp客户端(NAS)

打开你需要外网访问的内网设备,我的这台为威联通NAS。

同样的,要创建并配置frpc.toml文件。通过威联通的 Text Editor文本编辑器 ,创建一个文本文件,将以下代码粘贴进去。

serverAddr = "xxx.xxx.xxx.xxx" serverPort = 7000 auth.method = "token" auth.token = "12345678" [[proxies]] name = "web_nas" type = "http" localIP = "192.168.200.110" localPort = 5000 customDomains = ["nas.xxx.com"] # 这是上面解析好的域名,本文最终会换成端口号,请往下看

这个配置有规律可循,类似的,如果有其它应用往上累加就行。

填写完毕后,另存新档命名为frpc.toml,保存在/share/Container/frpc目录下,各位也可自定保存位置。

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

接着打开威联通官方的 Container Station容器管理工具 即可。创建新的应用程序。

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

代码如下,注意文件映射路径:

version: '3' services: frpc: image: snowdreamtech/frpc container_name: frpc restart: always network_mode: host volumes: - /share/Container/frp/frpc.toml:/etc/frp/frpc.toml

查看docker日志,跑起来了,没啥问题。登陆frpc服务器端面板(公网IP:7500),可以看到已经有内容,因为配置的是http域名访问,根据之前frpc配置(vhostHTTPPort = 80),使用80端口,一切都对。

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

我之所以做frp穿透,原因就是公司有专属内网嘛,屏蔽了太多东西访问很不方便(IT震怒哈哈哈),这下直接可以通过域名访问喽,但是http显示不安全。

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

回归标题,实现HTTPS域名无端口访问


⭕️更改配置,改变访问方式

在frpc客户端的配置文件做改动,如果全部按照官方文档来,我认为比较麻烦。

仅需对客户端(NAS)的配置文件frpc.toml改动。结果如下:

serverAddr = "xxx.xxx.xxx.xxx" serverPort = 7000 auth.method = "token" auth.token = "12345678" [[proxies]] name = "web_nas" type = "tcp" # http改成tcp localIP = "192.168.200.110" localPort = 5000 remotePort = 9898 # 把二级域名换掉

也就是说,原本web输入nas.xxx.com访问NAS,更改配置后就变成了输入公网IP:9898

修改配置文件后,我们将其保存,NAS端重新部署一下frpc客户端即可。

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

此时web端再输入 公网IP:9898 ,成功访问,依然http显示不安全。

⭕️部署Nginx Proxy Manager

过去在威联通NAS部署的攻略:https://blog.ydxian.xyz/archives/npm

但这次我们要部署在VPS上。

SSH连接,接着上面的步骤,输入以下命令:

mkdir -p /root/data/docker_data/npm # 创建安装目录 cd /root/data/docker_data/npm # 进入该目录下 vim docker-compose.yml # 创建并编辑docker-compose.yml文件

将下面代码粘贴进去:

version: '3' services: nginx-proxy-manager: container_name: nginx-proxy-manager image: jc21/nginx-proxy-manager:latest ports: - '80:80' # 作为反代工具,三个端口皆不建议修改。 - '81:81' # 国内VPS 酌情修改,下同 - '443:443' volumes: - "./data:/data" # 冒号左边可改路径,./表示当前路径下 - "./letsencrypt:/etc/letsencrypt" # 同理 restart: unless-stopped

英文输入状态下,按i即可进行修改。修改完毕后,按下esc,再同时按下shift+:,英文状态输入wq并回车,即可保存。

接着我们输入以下命令开始部署。

docker-compose up -d

部署完毕后,web输入VPS服务器公网IP:81并回车即可访问 Nginx Proxy Manager 的管理界面。

初始账号密码如下:

admin@example.com changeme 没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

进去会先弹出界面,填写你自己的邮箱及更换密码,设置一个好记忆的,以后继续出VPS玩法教程,咱们还会频繁用它。

按照下图箭头所指进行操作。

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

填写相关信息,域名不必多说,nas.xxx.com/qb.xxx.com/jellyfin.xxx.com, 在主域名前加前缀,好记为主;关于IP,默认都是172.17.0.1,不放心的可以SSH输入ip addr show docker0查询;端口号就是VPS对应服务的监听端口号,参考下图

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?
没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

需要注意的是,如果你的 Nginx Proxy Manager 部署于其它服务器,IP这里就要填写 frps 所在的服务器公网IP!

接着换到SSL一栏,如下图进行勾选,最后点击Save进行保存:

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

等待自动配置,可能要稍微等会儿,配置填对问题都不大,结果如下。

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

web再次输入域名尝试访问威联通NAS,可以看到:域名、无端口、HTTPS,最终目的达成。

没有公网IP又如何,手把手内网穿透教学。域名、无端口、HTTPS,速度还挺不错?

后续也可以把 Nginx Proxy Manager 自己也反代上,端口号就填81,反正基本啥服务都能代代~

最后


一般来说公网ipv4是最优选,用公网ipv6也完全足够,本文主要是为实在没辙的朋友提供解决办法。

如果大伙儿觉得本篇内容还不错,别忘了三连支持下,能点点关注就更好了!后续我还会持续分享各类教程以及有趣好玩的项目。

个人不太喜欢花精力撸免费VPS,也不太放心~本期成本:8+139≈150RMB/年

⭕️性价比还不错的国内云服务商:
Ucloud-笔者自用(目前建议:2核2G 60GB 峰值带宽30Mbps 流量包600GB/月 139RMB/年 续费同价)。

该内容正在参与「夏日挑战赛」征稿活动,分享你的夏日日常,看看谁最会过夏天,赢大额现金,2万金币!查看详情→

,

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。