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


    使用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 port
      enable_ipv6: true              # 开启ipv6支持
    
      enable_control: true
      control:
        port: 9092
    
    deployment:
      admin:
        allow_admin:
          - 0.0.0.0/0
          - ::0/0
    
        admin_key:
          - name: "admin"
            key: edd1c9f034335f136f87ad84b625c8f1
            role: admin                 # admin: manage all configuration data
    
          - name: "viewer"
            key: 4054f7cf07e344346cd3f287985e76a2
            role: viewer
    
      etcd:
        host:
          - "http://NAS的ip地址:12379"   # etcd的地址
        prefix: "/apisix"               # apisix configurations prefix
        timeout: 30                     # 30 seconds
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

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

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

    conf:
      listen:
        port: 9000          # `manager api` listening port
      allow_list:           # If we don't set any IP list, then any IP access is allowed by default.
        - 0.0.0.0/0
        - ::0/0
      etcd:
        endpoints:          # supports defining multiple etcd host addresses for an etcd cluster
          - "http://NAS的ip地址:12379" # etcd的地址
        mtls:
          enable: false
          key_file: ""          # Path of your self-signed client side key
          cert_file: ""         # Path of your self-signed client side cert
          ca_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 default
      log:
        error_log:
          level: warn       # supports levels, lower to higher: debug, info, warn, error, panic, fatal
          file_path:
            logs/error.log  # supports relative path, absolute path, standard output
                            # such as: logs/error.log, /tmp/logs/error.log, /dev/stdout, /dev/stderr
        access_log:
          file_path:
            logs/access.log  # supports relative path, absolute path, standard output
    
    authentication:
      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 second
      users:                # yamllint enable rule:comments-indentation
        - username: admin   # username and password for login `manager api`
          password: 这里是你的登录密码  # 这里是dashboard登录的密码,请尽量设置复杂一点
        - username: user
          password: 这里是你的登录密码 # 这里是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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83

    3.4 新建alpine容器

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

    在这里插入图片描述

    b. 设置启动命令:

    sleep inf
    
    • 1

    在这里插入图片描述

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

    # 给etcd挂载的目录读写权限
    chmod -R 777 /data/etcd
    
    # 然后退出
    exit
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.5 创建etcd容器

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

    如图:
    在这里插入图片描述

    b. 设置端口
    本地端口

    • 12379
    • 12380

    如图:

    在这里插入图片描述

    c. 设置环境变量

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

    如图:
    在这里插入图片描述

    d. 看进程,看到如图说明etcd容器安装成:
    在这里插入图片描述

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

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

    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"}
    
    • 1

    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
    
    • 1

    在这里插入图片描述

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

    在这里插入图片描述

    然后关闭页面

    5.4 创建隧道名

    a. ssh中执行

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

    在这里插入图片描述

    b. 绑定域名,并执行:

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

    在这里插入图片描述

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

    在这里插入图片描述

    6 配置网关

    6.1 登录;apisix dashboard访问路由

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

    6.2 配置上游服务器

    在这里插入图片描述

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

    在这里插入图片描述

    6.2 创建服务

    在这里插入图片描述

    在这里插入图片描述

    6.2 创建路由

    在这里插入图片描述

    按照图中填写,其他默认,下一步,提交
    在这里插入图片描述

    在这里插入图片描述

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

    在这里插入图片描述

    7 结束语

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

  • 相关阅读:
    【深度学习】模型过拟合的原因以及解决办法
    既能够用ffmpeg命令做RTSP流转RTMP流,又可以像调用avcodec/avfilter库一样逻辑编程
    centos7.9脚本,怎么排除特定的访问记录
    Kubernetes Service对象
    HotSpot 为什么要分为新生代和老年代?
    队列(上取整应用)
    Linux 命令大全
    「接口测试入门课」打卡学习 day09:微服务接口:怎么用Mock解决混乱的调用关系
    3.ICMP
    Linux 常用操作
  • 原文地址:https://blog.csdn.net/ywch520/article/details/128167187