侧边栏壁纸
博主头像
是羊刀仙啊博主等级

闲不下来!

  • 累计撰写 70 篇文章
  • 累计创建 30 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

没有公网IP又如何?手把手内网穿透教学,不但域名访问速度还杠杠滴。

羊刀仙
2024-07-18 / 0 评论 / 0 点赞 / 77 阅读 / 8975 字
温馨提示:
本文最后更新于 2024-09-02,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

大家好,我是羊刀仙。

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

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

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

准备一个主域名(建议)和一个VPS服务器(必须)。关于VPS,因为443端口(国内需备案)还有Docker被墙问题,更推荐使用国外VPS轻松实现无端口号访问。个人不太喜欢花精力撸免费VPS,也不太放心~文末会放置服务器推荐。本期成本:8+139≈150RMB

备案展示-kisd.png

什么是frp

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

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

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

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

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

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

原理图.png

准备工作

域名解析

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

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

解析1.png

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

解析2.png

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

VPS基础配置

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

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

防火墙设置.png

接下来,要初步启用服务器有几件必须做的事情。本篇以我的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代码.png

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

vim frps.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

frps配置代码.png
接着输入命令搭建运行:

docker-compose up -d

部署frps命令顺序.png

部署并配置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目录下,各位也可自定保存位置。

另存为.png

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

创建frpc.png

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

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配置,使用80端口(vhostHTTPPort = 80),一切都对。

跑起来了.png

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

ohhhh.png

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

端口面板.png

此时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

登陆npm.png

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

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

npm操作1.png

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

npm操作3.png

npm操作2.png

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

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

npm操作5.png

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

npm操作6.png

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

结束咯.png

最后

一般来说公网ipv4是最优选,用公网ipv6也完全足够,本文主要是为实在没辙的朋友提供解决办法。VPS作用也不仅于此,还可拿来搭建docker镜像加速服务等,后续有时间我也会出相关教程~

推荐几个性价比还不错的国内云服务商:
Ucloud,笔者自用,(2核2G 60GB 峰值带宽30Mbps 流量包600GB/月 139RMB/年 续费同价)
莱卡云,笔者博客站是这家的,(2核2G 30GB 峰值带宽10~20Mbps 流量包300GB/月 16~20RMB/月 续费同价)

0

评论区