使用Apisix打造家庭NAS网关

本文使用apisix打造家庭NAS网关,并通过cloudflare进行穿透,可免公网IP访问。首先你的NAS支持Docker,没有NAS也没有关系,只要你的电脑支持Docker同样可以参照该教程。

1 依赖资源准备

  • 准备域名:

    • 免费域名注册: https://www.freenom.com/
    • 或者在云厂商(阿里云/腾讯云/华为云等)注册一个,新用户最低1
  • cloudflare账户,注册很简单,这里我就不演示,请提前准备好
  • 依赖镜像
    • alpine:3.17
    • bitnami/etcd:latest
    • apache/apisix:latest
    • apache/apisix-dashboard:latest
    • vcyang/cloudflared:1.0.0 如果是arm芯片请选择 vcyang/cloudflared:1.0.0-arm64

2 镜像配置

2.1 设置docker官方镜像源

打开docker -> 镜像 -> 仓库 -> 设置 -> 添加
仓库名称:Docker Hub
库地址: https://hub.docker.com/

2.2 请依次下载上述依赖的镜像

3 安装镜像

3.1 NAS中新建挂载所需目录

请在nas中建立docker需要挂载的目录,目录如下:

  • 我的文件/docker/
  • 我的文件/docker/etcd/
  • 我的文件/docker/apisix/apisix/
  • 我的文件/docker/apisix/apisix/conf/
  • 我的文件/docker/apisix/apisix/logs/
  • 我的文件/docker/apisix/dashboard/

3.2 NAS中添加apisix所需的配置文件

文件目录: /我的文件/docker/apisix/apisix/conf/config.yaml

apisix:node_listen: 9080              # APISIX listening portenable_ipv6: true              # 开启ipv6支持enable_control: truecontrol:port: 9092deployment:admin:allow_admin:- 0.0.0.0/0- ::0/0admin_key:- name: "admin"key: edd1c9f034335f136f87ad84b625c8f1role: admin                 # admin: manage all configuration data- name: "viewer"key: 4054f7cf07e344346cd3f287985e76a2role: vieweretcd:host:- "http://NAS的ip地址:12379"   # etcd的地址prefix: "/apisix"               # apisix configurations prefixtimeout: 30                     # 30 seconds

3.3 NAS中添加apisix dashboard所需的配置文件

文件目录: /我的文件/docker/apisix/dashboard/conf.yaml

conf:listen:port: 9000          # `manager api` listening portallow_list:           # If we don't set any IP list, then any IP access is allowed by default.- 0.0.0.0/0- ::0/0etcd:endpoints:          # supports defining multiple etcd host addresses for an etcd cluster- "http://NAS的ip地址:12379" # etcd的地址mtls:enable: falsekey_file: ""          # Path of your self-signed client side keycert_file: ""         # Path of your self-signed client side certca_file: ""           # Path of your self-signed ca cert, the CA is used to sign callers'prefix: /apisix     # apisix config's prefix in etcd, /apisix by defaultlog:error_log:level: warn       # supports levels, lower to higher: debug, info, warn, error, panic, fatalfile_path:logs/error.log  # supports relative path, absolute path, standard output# such as: logs/error.log, /tmp/logs/error.log, /dev/stdout, /dev/stderraccess_log:file_path:logs/access.log  # supports relative path, absolute path, standard outputauthentication:secret:secret              # secret for jwt token generation.# NOTE: Highly recommended to modify this value to protect `manager api`.# if it's default value, when `manager api` start, it will generate a random string to replace it.expire_time: 3600     # jwt token expire time, in secondusers:                # yamllint enable rule:comments-indentation- username: admin   # username and password for login `manager api`password: 这里是你的登录密码  # 这里是dashboard登录的密码,请尽量设置复杂一点- username: userpassword: 这里是你的登录密码 # 这里是dashboard普通用户登录的密码,请尽量设置复杂一点plugins:                          # plugin list (sorted in alphabetical order)- api-breaker- authz-keycloak- basic-auth- batch-requests- consumer-restriction- cors# - dubbo-proxy- echo# - error-log-logger# - example-plugin- fault-injection- grpc-transcode- hmac-auth- http-logger- ip-restriction- jwt-auth- kafka-logger- key-auth- limit-conn- limit-count- limit-req# - log-rotate# - node-status- openid-connect- prometheus- proxy-cache- proxy-mirror- proxy-rewrite- redirect- referer-restriction- request-id- request-validation- response-rewrite- serverless-post-function- serverless-pre-function# - skywalking- sls-logger- syslog- tcp-logger- udp-logger- uri-blocker- wolf-rbac- zipkin- server-info- traffic-split

3.4 新建alpine容器

a. 挂载目录: 我的文件/docker/

b. 设置启动命令:

sleep inf

c. 容器创建成功后,连接ssh进去执行

# 给etcd挂载的目录读写权限
chmod -R 777 /data/etcd# 然后退出
exit

3.5 创建etcd容器

a. 设置挂载目录
挂载目录: 我的文件/docker/etcd/
容器内目录: /bitnami/etcd

如图:

b. 设置端口
本地端口

  • 12379
  • 12380

如图:

c. 设置环境变量

ALLOW_NONE_AUTHENTICATION: "yes"
ETCD_ADVERTISE_CLIENT_URLS: "http://NAS的ip地址:12379"

如图:

d. 看进程,看到如图说明etcd容器安装成:

c. 在浏览器访问: http://NAS的ip地址:12379/version
返回如下信息说明正常访问:

{"etcdserver":"3.5.6","etcdcluster":"3.5.0"}

3.6 创建apisix容器

a. 挂载目录
挂载文件: 我的文件/docker/apisix/apisix/conf/config.yaml
容器内目录: /usr/local/apisix/conf/config.yaml

挂载日志目录: 我的文件/docker/apisix/apisix/logs/
容器内目录: /usr/local/apisix/logs

如图:

b. 开放端口

  • 19080
  • 19443
  • 19180

如图:

c. 查看进程,如图说明启动成功

d. 验证服务
浏览器中访问:http://NAS的IP地址:19180/apisix/admin/services/
返回如下信息说明服务正常:

{"error_msg":"failed to check token"}

3.7 创建apisix-dashboard

a. 设置挂载目录
挂载配置文件: /我的文件/docker/apisix/dashboard/conf.yaml
容器内目录文件: /usr/local/apisix-dashboard/conf/conf.yaml

如图:

b. 设置端口

  • 19000

如图:

c. 查看进程,如图说明运行正常:

d. 验证服务
浏览器中访问:http://NAS的IP地址:19000/
显示如下说明服务正常:

然后使用配置中的账户和密码登录。

4 设置域名

4.1登录cloudflare

地址:https://dash.cloudflare.com/login

4.2 添加你的域名站点

4.3 设置你的域名DNS服务器为cloudflare的DNS服务

a. 复制红框的地址,然后修改你的域名的DNS

b. 这里以阿里云域名举例:

然后确定提交

5 通过cloudflare穿透

5.1 创建穿透服务容器,新建容器vcyang/cloudflared

不用做任何设置,直接应用

5.2 容器启动后连接ssh进入容器

5.3 配置cloudflared

ssh中执行

cloudflared tunnel login

复制红框中的地址到浏览器中访问,登录cloudflare账号进行域名授权,然后选择如下图中域名进行授权

然后关闭页面

5.4 创建隧道名

a. ssh中执行

cloudflared tunnel create 隧道名,请使用字母或者拼音

b. 绑定域名,并执行:

cloudflared tunnel route dns 隧道名 你的域名
cloudflared tunnel run --url http://你nas的IP地址:19080 隧道名 &

d. 浏览中输入https://你的域名 ,显示如下说明网关穿透成功

6 配置网关

6.1 登录;apisix dashboard访问路由

地址: http://你nas地址:19000
账户和密码参考上面dashboard的配置文件

6.2 配置上游服务器

配置内容按图中填写,然后下一步,然后提交

6.2 创建服务

6.2 创建路由

按照图中填写,其他默认,下一步,提交

6.3 访问NAS 地址: http://你的域名/home/

7 结束语

喜欢的小伙伴欢迎收藏+关注,我会不定时的分享一些干货,你们的支持就是我最大的动力。

使用Apisix打造家庭NAS网关,免公网IP访问相关推荐

  1. 如何访问部署在家里的服务器(家庭宽带能够申请公网IP)

    使用场景: 家庭影音库 个人电子图书馆 私人网盘 个人博客.网站 家用NAS 代码仓库 1.动态域名解析DDNS.动态公网IP地址概念 公网IP是有限的网络资源,宽带运营商一般只给用户分配动态的内网I ...

  2. 内网、网关、公网IP的关系

    https://blog.csdn.net/u010020099/article/details/82148798 内网.网关.公网IP 1. 内网        内网:自己的单位或者家庭.小区内部有 ...

  3. 服务器ip直接访问php怎么写,php - 如何实现用公网ip访问到服务器上的网页?

    服务器系统是Windows Server 2012 R2,已经部署了IIS.PHP和MySQL,能够在云服务器上通过localhost打开php网页,(放在服务器wwwroot上的index.php) ...

  4. 关于腾讯云服务器不能用公网ip访问的解决方案

    关于腾讯云服务器不能用公网ip访问的解决方案 参考文章: (1)关于腾讯云服务器不能用公网ip访问的解决方案 (2)https://www.cnblogs.com/cxsabc/p/10627645. ...

  5. 阿里云服务器的公网ip访问不到的问题

    原因分析 今天搭载了一台阿里云服务器,迅速搭载了一套LAMP,但是使用给定的公网ip并不能直接访问到自己的服务器页面,四处检查确认配置没有问题,且ICAM在本机可以ping通服务器,最终找到了原因 进 ...

  6. 内网用户通过域名或公网IP访问内部服务器的解决办法

    内网用户通过域名或公网IP访问内部服务器的解决办法 原因-路由回流 组网图 解决方案 内部NAT方案 内网用户与服务器不同网段 E0/0和E0/2都需要做nat server 内网用户与服务器相同网段 ...

  7. 【计网】DNS解析 DDNS解决动态公网IP访问

    DNS服务与DDNS 前言 一.DNS服务 二.DNS域名解析 1.解析过程 2.DNS污染 三.DDNS解决动态公网IP访问 总结 前言 本篇主要记录一下DNS域名解析在我们平时上网时的使用,与DN ...

  8. flask部署阿里云服务器,公网ip访问不了(一些问题及解答)

    flask部署阿里云服务器,公网ip访问不了(新手踩坑之路) 好朋友,你是不是一个后端初学者?相信到目前为止,你已经拥有一定的后端基础,在发现单机本地的后端开发已经无法满足你,于是你刚买一个云服务器. ...

  9. 内外网通过公网IP访问DMZ主机

    需求: 公司DMZ区域Web服务器对内外提供Web服务,要求必须内外网使用公网IP访问,这样做到内外网透明: 准备: 防火墙外网接口IP 2.2.2.2/29,内网接口IP 10.2.255.253/ ...

最新文章

  1. angular_ui-router ——依赖注入
  2. rpm -e --nodeps_微课 | rpm的思维导图
  3. parrot linux 安装grub,parrotsec 和 kali安装系统的时候出现“executing grub-install dummy”的解决方案...
  4. OC语言中的便利初始化函数和便利构造器
  5. Aveva Marine 新建项目001
  6. 计算机辅助园林设计常用软件,计算机辅助园林设计应用探讨.doc
  7. CSS基础汇总——点击标题跳转详细博客【学习笔记】
  8. 论文查重算法 python_论文查重降重绝密方法
  9. [转]2015年数学建模C题–基于无线通信基站的室内三维定位问题
  10. m 文件 dll matlab 中调用_《淫巧系列二》MATLAB中直接调用Python
  11. 如何利用SPSS进行秩和检验
  12. python返回类型为anytype_python - Zeep的SOAP请求(Python) - 堆栈内存溢出
  13. crontab布置定时任务
  14. c#物联网_毕业季我与你招聘信息中移物联网
  15. hive卡在最后一个reduce过不去_数据倾斜
  16. 分赛区决赛见!2021eBay全国跨境电商创新创业大赛分赛区决赛晋级名单
  17. polybezier
  18. 西工大计算机考研最全的报名和各方向解析,含导师介绍
  19. 库 家庭组 计算机 网络,Windows 8家庭组网络连接功能详解
  20. Deep Learning(1)

热门文章

  1. 行而不辍,未来可期|云扩科技入选上海市专精特新企业
  2. 心路历程:爬虫实战——从数据到产品
  3. 烟气脱硫技术及工艺流程超全剖析
  4. php token放到head,我觉得把 Token 放在 Header 里更好一些
  5. Linux聊天室项目知识整理(一)
  6. vb.net将excel表格数据填加到Listbox控件中并去重复选项
  7. 互联网再升级,蓝汛CEO谈IPv6发展历程
  8. 手机APP连接华为OceanConnect平台下发指令控制硬件(附Android Studio 代码工程和APK)
  9. 其他公司应用Ceph的具体方案
  10. docker cuda的devel和runtime包