目录
一、概述
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 Linux客户端设置
- 测试为ubuntu
# 下载并运行官方脚本 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 安卓客户端设置
- 安装软件
- 加入网络
- 在根服务器上授权(略)