没公网ip?手把手内网穿透教程。域名、无端口、HTTPS,速度还挺不错?
大家好,我是羊刀仙(长文警告⚠️)
公网IP对于咱们NAS用户来说是非常重要的,现在公网IPv4越来越难获取,公网IPv6虽然也是可用方案,但目前普及度并不算广而且也不是想搞就能搞得到,若你的宽带是双栈那在群里便可力压群雄,是可以装X的~
其实各家NAS厂商基本都有自己的外网方案,就拿我最常用的威联通来说,可以通过官方提供 myQNAPcloud Link 外网访问设备,但毕竟用户基数庞大,每个人能分配得到的带宽有限,并不能很好地满足所有需求。我也试过 Zerotier ,不过还是有些局限性在里面。
本篇我会介绍利用 VPS 和 Nginx Proxy Manager ,以Docker部署方式通过frp做内网穿透,完美实现通过域名访问NAS上搭建的服务。整个过程也比较简单,一步步来即可。
准备一个主域名(建议)和一个VPS服务器(必须)。关于VPS,因为443端口(国内需备案)还有Docker被墙问题,更推荐使用海外VPS轻松实现无端口号访问,海外VPS作用也不仅于此,还可拿来搭建docker镜像加速服务等,后续有时间我也会出相关教程~文末会放置服务器推荐。。

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

什么是frp
我认为有必要先提前介绍一下:
frp(fast reverse proxy),是国内大佬专注于内网穿透的高性能的反向代理应用
frp支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
frp通过go语言写的,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。
frp服务端(搭建于VPS)和客户端(搭建于内网设备) UI 页面。
通过frp可以把原来不能在互联网上访问的内网服务,以安全、便捷的方式通过具备公网 IP 的节点中转发布到公网。这样一来,就可以在外面随时访问家里设备上搭建的服务。

准备工作
⭕️域名解析
这里建议准备一个专用的主域解析到服务器上。这里以阿里云为例。
打开阿里云主页,找到域名解析,点击解析设置。
解析1.png添加两条解析记录,如下图所示,记录类型为A,主机记录为主域名和泛域名,记录值为VPS服务器的公网IP。

其它不用管,保存后解析工作完成。
⭕️VPS基础配置
VPS购买平台不同,一些设置项或功能名称可能有略微不同,请自行辨别。阿里云比较有代表性,就也以它为例吧~
购买完等待VPS系统初始化后,首先要设置的就是安全组(防火墙),阿里云分了出/入方向(很多服务商不做区分),我们一般情况仅需添加下图框内的两类,如果你担心安全问题,可以根据需求逐个开放TCP协议端口(我直接1~66535全部开启)。

接下来,要初步启用服务器有几件必须做的事情。本篇以我的 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并回车,即可保存。

接着输入以下命令,创建并配置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

接着输入命令搭建运行:
⭕️部署并配置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目录下,各位也可自定保存位置。

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

代码如下,注意文件映射路径:
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端口,一切都对。

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

回归标题,实现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客户端即可。

此时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 的管理界面。
初始账号密码如下:
进去会先弹出界面,填写你自己的邮箱及更换密码,设置一个好记忆的,以后继续出VPS玩法教程,咱们还会频繁用它。
按照下图箭头所指进行操作。

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


需要注意的是,如果你的 Nginx Proxy Manager 部署于其它服务器,IP这里就要填写 frps 所在的服务器公网IP!
接着换到SSL一栏,如下图进行勾选,最后点击Save进行保存:

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

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

后续也可以把 Nginx Proxy Manager 自己也反代上,端口号就填81,反正基本啥服务都能代代~
最后
一般来说公网ipv4是最优选,用公网ipv6也完全足够,本文主要是为实在没辙的朋友提供解决办法。
如果大伙儿觉得本篇内容还不错,别忘了三连支持下,能点点关注就更好了!后续我还会持续分享各类教程以及有趣好玩的项目。
个人不太喜欢花精力撸免费VPS,也不太放心~本期成本:8+139≈150RMB/年
⭕️性价比还不错的国内云服务商:
Ucloud-笔者自用(目前建议:2核2G 60GB 峰值带宽30Mbps 流量包600GB/月 139RMB/年 续费同价)。



Mkiing
校验提示文案
huiy1982
校验提示文案
大石碎胸口666
校验提示文案
值友9169998401
校验提示文案
给我来一车
校验提示文案
Dr21Pirlo
校验提示文案
卡卡的奇妙世界
校验提示文案
UITOKO
校验提示文案
骨感面条
校验提示文案
来自火星的懒牛
校验提示文案
GerryFu
校验提示文案
Pluto213
校验提示文案
买什么买a
校验提示文案
骑蜗牛上高速1688
校验提示文案
斗鸡眼熊猫
校验提示文案
超大猪蹄子
校验提示文案
皇甫珂旼
校验提示文案
segafans
校验提示文案
皇甫珂旼
校验提示文案
超大猪蹄子
校验提示文案
值友9169998401
校验提示文案
买什么买a
校验提示文案
Pluto213
校验提示文案
Mkiing
校验提示文案
斗鸡眼熊猫
校验提示文案
GerryFu
校验提示文案
来自火星的懒牛
校验提示文案
segafans
校验提示文案
骨感面条
校验提示文案
UITOKO
校验提示文案
卡卡的奇妙世界
校验提示文案
huiy1982
校验提示文案
Dr21Pirlo
校验提示文案
大石碎胸口666
校验提示文案
给我来一车
校验提示文案
骑蜗牛上高速1688
校验提示文案