Skip to main content

反代教程之内网服务拥有自己的专属域名

6 min read

我将详细讲解如何使用 Docker 和 Nginx Proxy Manager,配合 Cloudflare 的 DDNS 服务,来实现访问内网服务。

准备事项

  1. Docker环境 (不管你是什么nas软路由都有这玩意吧 咱们需要的工具很简单 直接docker命令安装)
  2. CloudFlare账号 (我们是要开ssl的!必须用这个 毕竟泛域名15年免续签 你域名过期了 证书都不会过期 阿里云用户把dns解析转到cf谢谢 ) (暂时可以了解一下 源证书目前不适用本教程 因为CloudFlare的自签证书不开小云朵不给用)

注册CloudFlare账号

https://dash.cloudflare.com/sign-up

  1. 公网V4或开启IPV6 (V6用户需要另一端也开启V6地址才能访问 手机流量已经普及 你公司网络可不一定哦~)
  2. 安装DDNS-Go (不要用爱快自带的 不要问我为什么 必须用这个!!!!)
  3. 安装NginxProxyManager (简称NPM 咱们就靠这个来反代 这工具简单还稳定 nginx也行 但我觉得对新人来说没这么方便)

安装DDNS-GO

  1. Linux一键安装命令

Linux系统默认安装到opt目录 直接复制粘贴到你Linux的终端里运行即可

docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
  1. 群晖一键安装命令 本文全程按照群晖Nas示范 所以你需要把安装命令里的路径给替换掉 /opt/ddns-go 更换成 /volume1/docker/ddnsgo image.png 如果你跟我一样的习惯 可以直接调用以下命令
docker run -d --name ddns-go --restart=always --net=host -v /volume1/docker/ddnsgo:/root jeessy/ddns-go
  1. 群晖Nas安装教程

imaged604d5e88153d0a5.png

image15bc361ca7a2a77f.png

image6816b4633c6c9c7e.png

image7b4b503058cbebbc.png

image1479e357422d3850.png ps:

  • 我不确定群晖是否会自动给你创建文件夹(已确定会自动创建文件夹) 为了一次性成功不报错 请先去docker文件夹下创建ddnsgo的文件夹
  • 计划任务运行后不要急着删除 其实可以一直留着 方便以后再次命令安装docker或执行其他需要用到root的命令 就算他重启后自动再次运行一遍 只要你没有删除那个容器 不会有任何问题 一样正常使用的 不放心再删掉

CloudFlare获取API

API获取好了复制发微信或记事本里存着 以后长期都需要用到。

image2fcffcb9d5a1b038.png

image378717908dc3caaa.png

image2a04407bfa54a710.png

image654fa55cf6b155ce.png

imageaad192c874f41966.png

imagec00ced5fe90533df.png

image712d1de70881464e.png

image3e67136a7adfd9eb.png

安装NginxProxyManager

按照上面安装ddnsgo的方法 再次安装npm 所以那个创建好的计划任务别急着删!!!这里复制好粘贴进去

这个我就不提供Linux默认安装的命令 我来解释每一行的参数代表什么意思 Linux用户只需要根据我对各个参数的解释 你自己想怎么改就怎么改就行了

Nas用户必须给我理解下面啥意思 我会逐条解释 我就不信你懂不了!

docker run -d \
--name nginxmanager \
-p 8080:80 \
-p 81:81 \
-p 888:443 \
-v /volume1/docker/npm:/data \
-v /volume1/docker/npm:/etc/letsencrypt \
--restart=always \
jc21/nginx-proxy-manager

当您运行上述的Docker命令时,每一行的含义如下:

  1. docker run -d: 运行一个新的容器。
  2. --name nginxmanager: 指定容器的名称为 "nginxmanager"。
  3. -p 8080:80: 将主机上的端口8080映射到容器内的80端口。这样,您可以通过 http://localhost:8080 访问NginxProxyManager的HTTP端口。
  4. -p 81:81: 将主机上的端口81映射到容器内的81端口。这样,您可以通过 http://localhost:81 访问NginxProxyManager的后台管理界面。
  5. -p 888:443: 将主机上的端口888映射到容器内的443端口。这样,您可以通过 https://localhost:888 访问NginxProxyManager的HTTPS端口。
  6. -v /volume1/docker/npm:/data: 将主机上的目录 /volume1/docker/npm 映射到容器内的 /data 目录。这样,您可以在主机上持久化存储NginxProxyManager的数据。
  7. -v /volume1/docker/npm:/etc/letsencrypt: 将主机上的目录 /volume1/docker/npm 映射到容器内的 /etc/letsencrypt 目录。这样,您可以在主机上持久化存储NginxProxyManager的证书。
  8. --restart=always: 设置容器在启动时自动重启。
  9. jc21/nginx-proxy-manager: 使用镜像 jc21/nginx-proxy-manager 来创建容器。

重点就是映射路径需要改到你群晖对应的存储空间 我是拿默认的存储空间1(/volume1)放置docker 大部分人其实照抄就完事了 有的人docker的共享文件夹不在存储空间1上 你就直接改数字就完事了 后面的保持不动就完事了

然后就是我把http的端口改到了8080 https端口改到了888 来应对80跟443端口都被封掉了情况 这样我们直接把nas的ip的8080 888端口对应的转发到公网就完事了 还不懂我要杀人了!!!

配置NginxProxyManager

装好后点开面板即可查看这个容器创建好并自动运行了 打开你Nas的ip+81端口即可访问面板后台 默认账号admin@example.com,密码:changeme image3b4056d8e156096e.png 登陆上去了会强制改邮箱跟密码 按照提示改就好

image742fe97b744e451f.png

  • 教程都快写完了发现CloudFlare的15年自签证书翻车了 那证书不开小云朵不给你用的 emby nas这种套了cf的cdn还能用啊 卡得一批 被我紧急取消了 那个大家可以了解性的学习下 我暂时不提供更高级别的教程 影响不好 想学可以去别处 我们还是根据网上的传统教程申请

  • 申请 Let's Encrypt 三个月的证书

image.png

image79f0b322a141793f.png

  • 接下来我们就可以开始反代内网服务到公网了

imagebe8925d382633e54.png

举例我的qb地址为:http://192.168.31.1:8080

image96e87f75fc70a23d.png

  • 截图IP打错了不要在意这些细节

image8572058c05de2eba.png

imagef1121d60e5c782a1.png

  • 到这就结束了 其他反代内容根据这一举例 自行添加。

路由器端口转发

到了最后一步了 不管你是硬路由还是软路由 端口转发不需要我多教吧?

  • 把Nas的ip的http的端口 8080转到8080
  • https的端口888 转发到888

到了这一步 都知道443 80的内网端口也是可以转成任意端口的 但还是那句话 为了严谨长期保持稳定 避免未知服务抢占80 443端口 群晖的webstation就是会这样干的。。。所以不要来质疑我为啥这样教大家 咱们开启域名访问的好处也不止是方便访问 而是开启ssl!https没有烦人的警告了也更安全。

imagef2ea23fdc219f9a1.png

最后测试

  • 以上都做完了 默认cf不需要再改动什么操作了 域名加端口即可直接访问服务页面

image5ca8c286431b455d.png

image82907471077a8ace.png

至此 教程结束 感谢观看。

Loading Comments...