N1盒子玩法-内网穿透公网访问

🤬什么是内网穿透

在开始之前先了解什么是内网穿透吧!
内网穿透就是将内网(可以看作是家庭网络)通过nat建立一条与公网之间的隧道、将内网的流量通过这条隧道发布到公网

参考一下内部文章:NAT网络与内网穿透原理

🛠 内网穿透工具

个人尝试过的工具:

cpolar 此工具只需要安装客户端即可且有免费的域名可用、但是免费的域名24小时就会更新、收费的不会
frp 此工具需要有一台公网的服务器、需要安装服务端和客户端、灵活度高、可自定义域名
HP-PRO 此工具只需安装客户端且只需在web端配置即可、有免费的域名、但是这是一个公用的所以很多端口已经被占用了

frp工具的使用

服务端

  1. 先下载服务端和客户端(https://github.com/fatedier/frp/releases/tag/v0.59.0)
  2. 解压后:
    xiaoxin-1
  3. 服务端只需要留下frps,frps.toml两个文件即可
  • frps.toml配置:
    • bindPort = 7000 #指服务端与客户端连接的端口
    • vhostHTTPPort = 8080 #可不配、这里我用了域名访问就需要配置这个
  • 启动:
    • ./frps -c frps.toml #前台启动
    • nohup ./frps -c frps.toml & #后台启动 (推荐)

客户端(内网本地)

  1. 先下载服务端和客户端(https://github.com/fatedier/frp/releases/tag/v0.59.0)
  2. 解压后:保留frpc,frpc.toml
  3. 配置frpc.toml文件:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    serverAddr = "x.x.x.x"  #公网ip,服务端的ip
    serverPort = 7000 #连接服务端的端口

    [[proxies]] #代理配置
    name = "ssh" #代理名,随意
    type = "tcp" #代理类型有:tcp、udp、http等
    localIP = "127.0.0.1" #客户端本机ip
    localPort = 22 #代理本机的哪个端口
    remotePort = 6000 #将本机端口映射到服务器的哪个端口、当访问服务端的6000端口时相当于访问本机的22端口

    [[ proxies ]]
    #如果有多个可以写多个、但是name必须不同
    .....
    ==注意:可以将每个配置分开写、可以一个服务写一个文件、如nginx.toml、mysql.toml等==
    ==如多个配置文件时、启动:==

    ./frpc -c nginx.toml
    ./frpc -c mysql.toml
    每个都起一个服务即可

这里再扩展一下自定义域名的配置:

如果使用域名访问需要在服务端的配置文件中加:vhostHTTPPort = 8080 此8080端口是统一使用域名访问的端口
这里方便我就将两个服务写在一个配置文件中了(你可以分开):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
serverAddr = "47.120.22.246"
serverPort = 7000

[[proxies]]
name = "N1-web"
type = "http"
localPort = 80
customDomains = ["nginx.xiaoxintops.top"] #使用nginx.xiaoxintops.top:8080 访问即可访问内网的80带你看的nginx

[[proxies]]
name = "N1-web"
type = "http"
localPort = 3306
customDomains = ["mysql.xiaoxintops.top"] #使用mysql.xiaoxintops.top:8080 访问即可访问内网的3306带你看的mysql

xiaoxin-2

我这里由于域名没有备案、服务器又是阿里的,所以域名访问一次后就不可用了:
xiaoxin-3

==注意:上面所有映射的端口都需要在公网的服务器中放开这个端口的访问权限==

更多的配置如下:
frp官网

HP PRO 使用

参考官网文档

  • 先登录web官网网页注册一下拿到配置的设备ID:https://hpproxy.cn/#/home/login

    注册登陆后:点击
    映射服务(选择相应的服务器使用) -> 到映射设备(添加设备-刷新有个设备ID) -> 记下这个设备ID下面安装的时候使用

  • 这里我是使用docker安装的:

    1
    2
    3
    4
    5
    6
    # 通过 docker run 运行容器 ARM
    docker run --restart=always -d -e deviceId=配置的设备ID registry.cn-shenzhen.aliyuncs.com/hserver/hp-pro:latest-arm64


    # 通过 docker run 运行容器 - x86或amd
    docker run --restart=always -d -e deviceId=配置的设备ID registry.cn-shenzhen.aliyuncs.com/hserver/hp-pro:latest
  • 配置穿透

  1. 安装完后到web登录界面的映射设备查看客户端是否正常在线
    xiaoxin-4

  2. 配置端口映射

    先配置映射的端口 - 就是服务端的端口(在公网访问的端口-不是本机内网服务的端口)
    再域名配置、这里配置的时候可不需要填写自定义域名、直接使用他提供的二级域名(测试过自定义域名:配置了CNAME:back1.hpnu.cn 也没生效)
    最后再配置:配置映射 - 如下图二
    xiaoxin-5
    图二:配置映射
    xiaoxin-6

==提醒:如果在域名配置这里配置错了删掉后、同一个域名可能无法立马使用、得等解析被释放后才行==

🔗 扩展:使用ipv6

  • 前提是光猫开启ipv6
  • 且需要访问的客户端也需要支持ipv6才行
  1. 获取本机的ipv6地址、如:2408:xxx:684:fc7e:aedd:97ff:xx47:xxx
  2. cloudflare做DNS解析绑定域名
    xiaoxin-7
  3. 接下来就需要做代理、使用nginx做代理:如nginx-proxy-manage
  • 安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    docker run -d \
    --name=npm-nginx \
    -p 8880:80 \
    -p 81:81 \
    -p 18443:443 \
    -v /mnt/mydisk/nginx-proxy-manage/data:/data \
    -v /mnt/mydisk/nginx-proxy-manage/letsencrypt:/etc/letsencrypt \
    --restart=always \
    chishin/nginx-proxy-manager-zh:latest

    #英文镜像 – jc21/nginx-proxy-manager
    #中文镜像 – chishin/nginx-proxy-manager-zh
    #80是nginx的http端口
    #81是web界面端口
    #443是https端口
    #/data 是一些nginx的配置文件、如日志、上传的证书、数据库(默认使用sqlite)、等
    #/etc/letsencrypt 是let's Encrypt证书、等一些配置文件

    访问:ip:81
    登录用户名:admin@example.com
    登录密码:changeme

  • 配置代理:
    xiaoxin-8
    xiaoxin-9

    证书内容可更换为:
    提交后等待提交即可(会有点久)

    1
    2
    3
    # Cloudflare API credentials used by Certbot
    dns_cloudflare_email = cloudflare@example.com #cloudflare的登录邮箱
    dns_cloudflare_api_key = 0123456789abcdef0123456789abcdef01234

    xiaoxin-10
    xiaoxin-11

xiaoxin-12

  • 这里还要结合DDNS-GO 动态ip绑定域名(因为ipv6是会变化的)