内网穿透(frp、zerotier)

一、概述

1.1 定义

  • 判别:常规一个公司或一个小区内的所有电脑都处于运行商设计的局域网内,若在百度里输入IP 产生的结果和用命令ipconfig产生的结果不一样,则处于局域网内部
  • 功能:内网穿透技术旨在使内网主机和云服务器的端口产生映射关系,例如访问http://doubi.com:9000,会映射到局域网:http://192.168.1.123:6000

1.2 常规应用

  • 后端自己维护:网站后端重要数据,如数据库等放在本地局域网服务器里
  • 后台登录:将本地的ssh端口(22)、后台端口(根据软件确定)映射到具有公网id的服务器
  • 查看当前内网ip位置
    # win10使用:也可通过此命令查看ip网络层级结构
    >>> tracert 8.8.8.8
    # centos使用:也可通过此命令查看ip网络层级结构
    >>> traceroute 8.8.8.8
    # 此处为当前PC的网关
     1  gateway (192.168.1.1)  0.291 ms * *
    # 还是内网:要是非路由器ip,则为服务提供商给套的内网ip
    # 若出家里路由器ip后第一个还是内网ip,则只能用内网穿透进行外网访问
     2  10.200.96.1 (10.200.96.1)  12.666 ms  12.724 ms  12.684 ms
    # 同上
     3  10.1.2.13 (10.1.2.13)  9.560 ms  9.519 ms  9.579 ms
     4  * * *
    # 同上
     5  10.1.1.121 (10.1.1.121)  9.396 ms  9.344 ms  9.439 ms
    # 进入Internet,此为公网ip进行的转发
     6  211.139.0.57 (211.139.0.57)  29.251 ms  4.201 ms  14.723 ms
    .......
    # 到达谷歌DNS服务器
    17  dns.google (8.8.8.8)  40.245 ms  42.933 ms  46.931 ms
    

二、FRP自有公网服务器

  • 购买了阿里云、腾讯云等服务器的
  • 如果流量小,建议用第三篇方法

2.1 下载软件

  • 下载文件:
    # 版本页面
    https://github.com/fatedier/frp/releases
    # 路由命名规则:download/版本号/frp_版本号_linux_amd64.tar.gz
    wget https://github.com/fatedier/frp/releases/download/v0.39.1/frp_0.39.1_linux_amd64.tar.gz
    
  • 文件目录frp下
    在这里插入图片描述

2.2 公网服务器设置

  • 公网服务器配置文件:frps.ini
    [common]
    # 公网服务器的通信端口(与内网PC间)
    bind_port = 7001				
    # 通信密码,最好别用常用密码
    token = 1234567890
    
  • 公网服务器服务文件:systemd文件夹下的frps.service
    [Unit]
    Description=Frp Server Service
    After=network.target
    
    [Service]
    Type=simple
    # 只改下面这一句,注意frps和frps.ini位置
    ExecStart=nohup /root/bin/frp/frps -c /root/bin/frp/frps.ini 
    
    [Install]
    WantedBy=multi-user.target
    
  • 启动
    • 前置处理:将frp文件夹拷贝到/root/bin文件夹内,将frps.service放在/lib/systemd/system文件夹内
    • 服务端常用命令
      systemctl daemon-reload			# 重新加载服务配置文件
      systemctl start frps.service	# 启动服务
      systemctl enable frps.service	# 设置开机启动
      systemctl status frps.service	# 查看服务启动情况
      systemctl stop frps.service     # 关闭服务
      

2.3 内网PC设置

  • 内网PC配置文件:frpc.ini
    [common]
    # 公网IP地址
    server_addr = 12.23.45.67
    # 公网端口,需与frps.ini对应
    server_port = 7001
    # 通信时携带的口令
    token = 1234567890
    
    # ssh通信设置:常用于在外网以公网服务器为跳板ssh到内网服务器
    # 功能:公网6010端口接收到的请求会转发到内网PC的22端口
    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 22
    # 公网服务器端口:后台(如宝塔)和服务商(如阿里云和腾讯云都有线上防火墙阻挡端口)
    remote_port = 6010
    
    # 后台api端口:本地http(80端口)服务和公网服务器6020端口做映射
    [api]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 80
    # 公网服务器端口:后台(如宝塔)和服务商(如阿里云和腾讯云都有线上防火墙阻挡端口)
    remote_port = 6020
    
    # 宝塔面板端口映射
    [bt_pannel]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 8888
    # 公网服务器端口:后台(如宝塔)和服务商(如阿里云和腾讯云都有线上防火墙阻挡端口)
    remote_port = 10004
    
  • 内网PC服务文件:systemd文件夹下的frpc.service
    [Unit]
    Description=Frp Client Service
    After=network.target
    
    [Service]
    Type=simple
    # 只改下面这一句,关注frpc和frpc.ini位置
    ExecStart=nohup /root/bin/frp/frpc -c /root/bin/frp/frpc.ini
    
    [Install]
    WantedBy=multi-user.target
    
  • 启动
    • 前置处理:将frp文件夹拷贝到/root/bin文件夹内,将frpc.service放在/lib/systemd/system文件夹内
    • 客户端常用命令
      systemctl daemon-reload			# 重新加载服务配置文件
      systemctl start frpc.service	# 启动服务
      systemctl enable frpc.service	# 设置开机启动
      systemctl status frpc.service	# 查看服务启动情况
      systemctl stop frpc.service     # 关闭服务,每次有新增端口都要重新启动下服务
      

2.4 成果

至此,如果公网ip为12.34.56.78,内网ip为192.168.1.123,公网ip对应的域名为http://doubi.com
则:

  • ssh访问:http://doubi.com:6010映射为http://192.168.1.123:22
  • 网站接口访问:http://doubi.com:6020映射为http://192.168.1.123:80
  • 网站宝塔后台访问:http://doubi.com:10004映射为http://192.168.1.123:8888

端口开放:三个访问对应端口防火墙必须放行,腾讯云、阿里云服务器均存在线上防火墙,宝塔面板也有防火墙

三、FRP第三方免费服务器

  • 使用第三方提供的公网ip服务器线路
  • 此处以sakura为例(签到拿流量,最大到128G)

3.1 下载

  • 命令:uname -m,CentOs系统

  • 列表
    在这里插入图片描述
    在这里插入图片描述

  • 内网centos服务器输入命令

    # 切换到bin目录
    cd /usr/local/bin
    # 下载软件:这里有时候内网不能下,我用云端服务器可以直接下载,
    # 然后可以拷贝到其他服务器上用
    wget -O frpc <下载地址>
    # 设置权限
    chmod 755 frpc
    # 检测版本
    frpc -v
    

3.2 创建隧道

  • 根据需要选22、80、443端口
    在这里插入图片描述

3.3 切换到帮助

  • 首页位置
    在这里插入图片描述
  • 帮助目录区域
    在这里插入图片描述
  • <unit名称>及访问
    位置:首页–》穿透–》隧道列表
    在这里插入图片描述

3.4 网站设置

3.4.1 无自有域名

  • 若3.2节为端口80
    直接访问server_addr:端口号(端口号详3.3节<unit名称>及访问),即访问本地服务器的http://ip效果

3.4.2 自有域名

  • 以下以腾讯云为范例
    在这里插入图片描述
  • 此时访问http://自有域名:端口号(端口号详3.3节<unit名称>及访问),即会跳转到内网服务器的http://ip

四、zerotier自有(要买)服务器

4.1 概述

  • 概述:ZeroTier是一个国外的服务商所提供的基于P2P的组网方案,它可以通过软件的形式实现将我们需要组网的设备加入到一个虚拟的局域网中,从而实现数据的交换
  • 组网策略:
    1.组网设备接入Zerotier,并通过ID加入指定的虚拟网络。
    2.当设备之间发生数据交换时,网络调度设备间尝试P2P直连。
    3.失败时,从网络中寻找moon服务器作为中转

4.2 根服务器设定

4.2.1 端口开放

  • 腾讯控制台:开启4000/tcp、9993/tcp、9993/udp
    在这里插入图片描述

4.2.2 安装

  • 安装docker
    # 安装docker
    yum install docker -y
    # 启动|关闭|重启docker服务
    systemctl start|stop|restart docker
    # 开机启动docker
    systemctl  enable docker
    # 查看docker当前状态
    systemctl status docker
    # 测试docker是否正确安装及功能完备
    docker run hello-world
    
  • 启动zerotier容器
    docker run --restart=on-failure:3 -d --name ztncui -e HTTP_PORT=4000 -e HTTP_ALL_INTERFACES=yes -e ZTNCUI_PASSWD=mrdoc.fun -p 4000:4000 keynetworks/ztncui
    
  • 启动中转moon服务器
     docker run --name zerotier-moon -d --restart always -p 9993:9993/udp jonnyan404/zerotier-moon -4 [公网服务器ip]
     # 查看启动情况:注意【moon id】,后面客户端要用
     docker logs zerotier-moon
    

4.2.3 配置

  • 访问 http://公网ip:4000,初始用户名:admin,初始密码:mrdoc.fun

    密码:改密码后一定记住密码,暂时不知道咋能重设密码,若忘记了只能删除根服务器的docker容器重做一个

  • 登录设置根服务器

    • 设置虚拟局域网名
      在这里插入图片描述
    • 设置虚拟局域网ip分配机制
      在这里插入图片描述
      在这里插入图片描述

4.3 客户端设置

4.3.1 win10\mac客户端设置

  • 下载客户端:传送门
    在这里插入图片描述
  • 安装好后对话框最底部填
    在这里插入图片描述
  • 根服务器授权
    在这里插入图片描述

    静态IP:单击IP可设置IP

  • 连接moon服务器
    cd C:\ProgramData\ZeroTier\One
    # 连接moon服务器: 根服务器上运行docker logs zerotier-moon 获取moon_ID
    # 注意mac需要管理员权限 sudo
    zerotier-cli orbit [moon_ID] [moon_ID]
    

4.3.2 NAS客户端设置

  • 针对DSM7.X版本:在套件中心里安装docker
  • 开启SSH:控制面板==》终端机和SNMP==》启动SSH功能(应用)
  • 使用Finalshell或其他工具SSH连接nas:账号、密码是登录nas的账号密码
    # 获取管理员权限
    sudo -i
    # 再输一遍管理员密码
    > Password:
    
  • 创建虚拟网络设备TUN
    # 脚本:创建虚拟网络设备TUN,并设为开机启动
    echo -e '#!/bin/sh -e \ninsmod /lib/modules/tun.ko' > /usr/local/etc/rc.d/tun.sh
    # 给tun.sh脚本以执行权限
    chmod a+x /usr/local/etc/rc.d/tun.sh
    # 运行脚本创建tun设备
    /usr/local/etc/rc.d/tun.sh
    # 查看tun设备是否创建成功
    ls /dev/net/tun
    # 创建存放配置文件的目录
    mkdir /var/lib/zerotier-one
    # 启动docker容器:网络是host模式,有挂载-v,重装后数据不会丢失
    docker run -d           \
      --name zt             \
      --restart=always      \
      --device=/dev/net/tun \
      --net=host            \
      --cap-add=NET_ADMIN   \
      --cap-add=SYS_ADMIN   \
      -v /var/lib/zerotier-one:/var/lib/zerotier-one zerotier/zerotier-synology:latest
    # 连接moon服务器: 根服务器上运行docker logs zerotier-moon 获取moon_ID
    docker exec zt zerotier-cli orbit [moon_ID] [moon_ID]
    
  • 日常使用
    # 进入容器查看节点状态
    docker exec -it zt zerotier-cli status
    
    # 进入容器加入虚拟局域网
    docker exec -it zt zerotier-cli join 虚拟局域网id
    
    # 升级容器:前提为停止并删除容器,拉取最新镜像,重新创建容器
    docker pull zerotier/zerotier-synology:latest
    
  • 根服务器授权
    在这里插入图片描述
  • 使用示例:在offPC网页输入
    在这里插入图片描述

    设备互访:任何加入此虚拟局域网中的主机,均可直接通过根服务器的ip列表,直接访问注册的机器

4.3.3 CentOS客户端设置

  • 测试为centos7
    # 下载并运行官方脚本
    curl -s https://install.zerotier.com | sudo bash
    
    # 设置服务开机启动
    sudo systemctl enable zerotier-one.service
    
    # 查看服务状态
    zerotier-cli status
    
    # 加入网络:注意去根服务器授权
    sudo zerotier-cli join 虚拟网络id
    
    # 连接moon服务器: 根服务器 docker logs zerotier-moon获取moon_ID
    zerotier-cli orbit [moon_ID] [moon_ID]
    
    # 离开网络
    zerotier-cli leave 虚拟网络id
    
    # 查看所有的网络
    zerotier-cli listnetworks
    

    命令缺失:如果是精简版centos7的docker镜像,需要安装命令,详见传送门
    docker安装centos7默认IP:172.17.0.*

  • 根服务器授权
    在这里插入图片描述
  • 测试:在offPC
    在这里插入图片描述

4.3.4 安卓客户端设置

  • 安装软件
    在这里插入图片描述
  • 加入网络
    在这里插入图片描述
  • 在根服务器上授权(略)
  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值