去中心化内网穿透工具Easytier

本渣自从开始玩NAS以来,就一直关注怎样用便宜和快速的解决内网穿透的问题。

  • 公网IPv6,不一定会有
  • 公网IPv4,更加不敢奢求
  • 各种收费内网工具cpolar、passnat、樱花frp感觉有点贵,免费的又不够用
  • frp必须要有个中转,便宜的有公网IP的云服务器不是小水管就是限流量
  • zerotier、tailscale的服务器都在国外,连上PVN的P2P的成功率越来越低,也难用。
  • 今天测试的听说是国人开源的Easytier,好像是基于WireGuard改进而来。主要是更加简单,作者在国内也假设了免费的服务器,还有一些大佬无偿贡献了免费中转服务器。

前言

工作原理
图片

  1. 电脑、服务器、手机作为客户端,首次连入Easytier是需要一个服务端(中转服务器)来做认证、接通P2P的VPN。【红色虚线】
  2. 如果P2P的VPN一直接不通,流量就只能通过服务端(中转服务器)来中转了。【红色虚线】
  3. 如果P2P的VPN接通了,就直接走两台客户端之间的流量。【蓝色实线】

问题

开发Easytier的大神自建的服务端(中转服务器)肯定满足不了日常使用,因为链接的人越多,肯定越慢。
这样就需要搭建自己的服务端(中转服务器),或者使用其他大佬无偿提供的服务端(中转服务器)。

搭建自己的中转服务器

本渣环境:

  • 腾讯云2C2G,3M,200G流量/月,必须要有公网IP
  • CentOS Stream 9
  • 安装了1Panel作为Docker管理工具
  • 还运行这自己的技术博客,就是现在大家在浏览文章的这个hexo博客。

最终形成这样的拓扑架构
图片

搭建服务端

(1)用1Panel来拉取(下载)easytier镜像
镜像名:easytier/easytier:latest
官方参考地址:https://easytier.cn/guide/installation.html
当然你也可以用传统的Docker命令来拉镜像,不过Docker Hub可能连不上,问题不少的。我个人是习惯了用1Panel来管理。
图片

(2)在1Panel通过Docker Compose来启动镜像
填写好1Panel的【编排】,Docker应该就会自动启动的。
图片

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
version: '3.8'
services:
watchtower: # 用于自动更新easytier镜像,若不需要请删除这部分
command: --interval 3600 --cleanup --label-enable
container_name: watchtower
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_NO_STARTUP_MESSAGE
image: containrrr/watchtower
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
easytier:
restart: always
labels:
com.centurylinklabs.watchtower.enable: 'true'
privileged: true
mem_limit: 0m
container_name: easytier
hostname: easytier
network_mode: host
volumes:
- /etc/easytier:/root
environment:
- TZ=Asia/Shanghai
image: easytier/easytier:latest # 国内用户可以使用 m.daocloud.io/docker.io/easytier/easytier:latest
command: -i <VPN虚拟IP> --network-name <用户> --network-secret <密码> -p tcp://<云服务器域名或公网IP>:11010

如最后一句可以是:

1
command: -i 10.114.114.114 --hostname MyEasytierServer --network-name MyVPNName --network-secret MyVPNPassword -p tcp://110.110.110.110:11010
  • -i:VPN中的内网地址
  • --hostname:节点名字(中转服务器名字),没有的话就默认是easytier
  • --network-name:在组建虚拟局域网的名字,要复杂个性一点,网上已经有人用了就会冲突连不上。其他节点千万不要写错。
  • --network-secret:在组建虚拟局域网的密码,要复杂一点,被人猜到,就会白嫖你的公网云主机流量。其他节点千万不要写错。
  • -p:搭建中转服务器的IP,即云主机的公网IP。如果填写的不是云主机的公网IP,就需要填作者或其他大神公开的中转服务器IP,连通性会差很多的。

配置好Docker Compose【编排】,1Panel会启动两个Docker镜像。easytierwatchtower,第二个可以停掉的,是用来保持Docker镜像是最新版。也可以通过删除Docker Compose【编排】中watchtower: 这一段来不使用。
图片

配置客户端

(1)配置Windows客户端
下载地址:https://easytier.cn/guide/download.html
图片
Windows的安装非常简单的,这里就不说明的。全部下一步。

  • 配置Windows客户端的方法如图:
    图片
  • 连上了就会这样子,显示P2P就是点对点的联网成功了,这时候就会走两台电脑之间的WIFI/宽带/5G流量,不会走中转服务器(腾讯云/阿里云)的公网IP流量。
  • 点对点P2P不成功,会显示delay,这就只能走中转服务器的流量了,会慢很多。看下图的ping值就看出来有两个数量级的延时差距。
    图片

(2)配置Linux客户端

  • 配置飞牛OS的客户端(命令行)
  1. 下载Linux用的zip包
    图片
  2. 把zip包解压出来,会有三个文件。
    图片
    把文件授权可以执行
    1
    2
    # cd到你解压出来的文件夹里面
    sudo chmod +x ./*
    把文件丢到/usr/bin/
    1
    sudo mv ./easytier-* /usr/bin/
    现在就可以试用easytier-coreeasytier-cli命令了,记得在root用户下使用。
  3. 启动飞牛OS的客户端
    1
    2
    sudo easytier-core -i <你要创建虚拟局域网IP> --network-name <用户> --network-secret <密码> -p tcp://<服务器地址>:11010
    #例子: sudo easytier-core -i 10.144.144.5 --network-name MyVPNName --network-secret MyVPNPassword -p tcp://110.110.110.110:11010
    譬如:Windows的虚拟局域网IP是:10.144.144.3,你的飞牛OS就是错开用:10.144.144.5,你的安卓手机是10.144.144.4、笔记本电脑是10.144.144.5全都要把最后一位IP错开。

成功连上就会有日志返回
图片

测试用飞牛影视播放1080P的电影原画的时候,走的是P2P,即只走了飞牛所在宽带的上传流量,没有走中转服务器的上传流量。
图片

PS:如果关闭终端窗口,就会关闭这个easytier-core进程,需要后台保持就要创建systemctl服务

  1. 配置systemctl服务和自启
    创建一个easytier-core.service文件

    1
    sudo vim /etc/systemd/system/easytier-core.service

    写入这段到代码,具体需要按自己的情况修改。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [Unit]
    Description = EasyTier Core Service
    After = network.target

    [Service]
    ExecStart = /usr/bin/-i 10.144.144.5 --network-name MyVPNName --network-secret MyVPNPassword -p tcp://110.110.110.110:11010


    [Install]
    WantedBy = multi-user.target

    图片
    然后配置systemctl自启动

    1
    2
    3
    4
    5
    6
    ps aux | grep easytier # 确认是否有easytier启动着
    systemctl start easytier-core # 启动服务
    systemctl status easytier-core # 查看启动状态
    systemctl enable easytier-core # 设置自启动
    systemctl restart easytier-core # 重启服务
    systemctl stop easytier-core # 停止服务

    图片

  2. Linux中的常用命令:
    easytier-cli:列出每台电脑(节点)的连通情况。
    easytier-node:列出本机(节点)的详细情况。
    图片

这是我搭好的环境:
优点

  • 走P2P流量,即WIFI、家庭宽带、5G的直接流量,不需要浪费云主机(阿里云/腾讯云)的流量来做中转。
  • 延迟低,基本上可以达到个位数的毫秒级。
  • 速度快,这主要看WIFI、家庭宽带、5G的上传带宽为限。平时不要用太狠,会被运营商封禁的

缺点

  • 稳定性差,以为P2P不是绝对能连上的。如果走云主机中转,会比frp还要慢。主流的内网穿透都是走frp模式的。平时可以试用easytier来降低中转流量,用frp来兜底。
    图片