引:EasyTier 是目前感觉非常好的一个项目,但是作者可能没有时间来完善用户手册吧(em~)我来代劳,目前所有的参数都试过了,大概知道作用和配置方法,适合高级用户进阶使用,仅供参考,如有错误还请指正!
文档版本:--version -- easytier-core 2.0.0
编写日期:2024-10-2
命令行参数
命令行参数使用方式,在启动 easytier-core.exe 后面加参数就行了
🌰栗子1
easytier-core.exe --ipv4 10.10.10.1 --network-name tiax --network-secret tiax --dev-name 以太网8 -e tcp://public.easytier.top:11010
参数详解:
--ipv4 10.10.10.1
指定当前节点的 ip 地址为 10.10.10.1 (如果使用 --ipv4 参数 必须指定一个IP地址,如果不指定,就会报错,或者是不要这个参数,也可以加入到网络,只是这个节点没有IP地址,无法被其他节点所访问,但是可以用子网代理,比如这个节点配置了一个子网代理地址段,又没配置具体的 IP 那么其他节点可以访问到这个节点代理的子网,但是不能访问到这个节点本身,因为连IP都没有)--network-name tiax --network-secret tiax
指定网络名称和密码,如果当前要加入的这个网络内容提供对等连接的那个节点设置了名称和密码,那么其他节点加入就必须要添加,不然加入不进去。--dev-name 以太网8
指定本机创建的虚拟网卡名称,注意名称不要带空格就行,比如 (以太网 8)启动就会报错。(如果这个节点没有配置IP地址 本机不会创建虚拟网卡,即便使用了这个参数指定名称)-e tcp://public.easytier.top:11010
对等的连接地址,如果只配置这一个地址,可以使用-e
参数-p tcp://public.easytier.top:11010 udp://121.74.84.127:49160
多个地址,使用-p
参数
-e 和 -p 的区别说明,按照作者的说明是 -p, --peers 最初要连接的对等节点,-e, --external-node 使用公共共享节点来发现对等节点,
-e 启动说明,加入到项目中的公共节点都会显示出来,也就是说这些节点和你都在用一个网络里了,都是你可以使用的资源,如帮助流量中继,RPC转发。-p 启动说明,如果说要加入自己的服务器和公共节点,则可以使用 -p 命令,同时加入,启动后如下图这样,就是配置了两个 peer 地址。
总结:如果不是使用公共节点,使用 -e 和 -p 没啥本质的区别,只是 -p 可以在命令行支持多个地址。
🌰栗子2
easytier-core.exe --dhcp --dev-name 以太网8 -p tcp://public.easytier.top:11010 --disable-ipv6 --hostname Σ(°ロ°)wc
参数详解:
--dhcp
由对等节点自动确定并设置IP地址,默认从10.0.0.1开始。警告:在使用DHCP时,如果网络中出现IP冲突,IP将自动更改。--dev-name 以太网8
指定虚拟网卡名称,不指定就会自动命名。-p tcp://public.easytier.top:11010
连接的节点地址,例1里面已经详细说了,此处不再赘述。--disable-ipv6
不使用IPv6,也就是不会启动本机的udp://[::]:
监听--hostname Σ(°ロ°)wc
指定本机的设备名称,如果不指定则是默认取电脑的设备名称。
常见问题
上述是 2 个 使用命令行启动的例子,相信通过这两个栗子🌰已经可以理解命令行启动参数是如何应用的了,使用 easytier-core.exe --help
可以查看全部的可使用参数。
常见错误❌格式:
1、比如 --rpc-portal 这个参数 在命令行中的格式为 --rpc-portal 127.0.0.1:15888
后面要加监听地址和端口。
2、比如 --listeners 这个参数 在命令行中的格式为 --listeners tcp://0.0.0.0:11010 tcp://0.0.0.0:11011 wg://0.0.0.0:11010
3、参数可以使用全参数名 也可以使用简写 ,比如 --listeners 的简写就是 -l,具体如下全部说明⬇️
PS D:\P2_code> .\easytier-core.exe --help
A full meshed p2p VPN, connecting all your devices in one network with one command.
Usage: easytier-core.exe [OPTIONS]
Options:
-c, --config-file <CONFIG_FILE> 配置文件路径,注意:如果设置了这个选项,其他所有选项都将被忽略
--network-name <NETWORK_NAME> 用于标识此VPN网络的网络名称 [default: default]
--network-secret <NETWORK_SECRET> 网络密钥,用于验证此节点属于VPN网络 [default: ]
-i, --ipv4 <IPV4> 此VPN节点的IPv4地址,如果为空,则此节点将仅转发数据包,不会创建TUN设备
-d, --dhcp 由Easytier自动确定并设置IP地址,默认从10.0.0.1开始。警告:在使用DHCP时,如果网络中出现IP冲突,IP将自动更改。
-p, --peers [<PEERS>...] 最初要连接的对等节点
-e, --external-node <EXTERNAL_NODE> 使用公共共享节点来发现对等节点
-n, --proxy-networks <PROXY_NETWORKS> 将本地网络导出到VPN中的其他对等节点
-r, --rpc-portal <RPC_PORTAL> 用于管理的RPC门户地址。0表示随机端口,12345表示在localhost的12345上监听,0.0.0.0:12345表示在所有接口的12345上监听。默认是0,首先尝试15888
[default: 0]
-l, --listeners [<LISTENERS>...] 监听器用于接受连接,允许以下格式:
端口号:<11010>,意味着tcp/udp将在11010端口监听,ws/wss将在11010和11011端口监听,wg将在11011端口监听。
url:<tcp://0.0.0.0:11010>,其中tcp可以是tcp、udp、ring、wg、ws、wss协议。
协议和端口对:<proto:port>,例如wg:11011,表示使用WireGuard协议在11011端口监听。URL 和 协议端口对 可以多次出现。
[default: 11010]
--no-listener 不监听任何端口,只连接到对等节点
--console-log-level <CONSOLE_LOG_LEVEL> 控制台日志级别
--file-log-level <FILE_LOG_LEVEL> 文件日志级别
--file-log-dir <FILE_LOG_DIR> 存储日志文件的目录
--hostname <HOSTNAME> 用于标识此设备的主机名
-m, --instance-name <INSTANCE_NAME> 实例名称,用于在同一台机器上标识此VPN节点 [default: default]
--vpn-portal <VPN_PORTAL> 定义VPN门户的URL,允许其他VPN客户端连接。示例:wg://0.0.0.0:11010/10.14.14.0/24,表示VPN门户是监听在vpn.example.com:11010的wireguard服务器,VPN客户端在10.14.14.0/24网络中
--default-protocol <DEFAULT_PROTOCOL> 连接到对等节点时使用的默认协议
-u, --disable-encryption 禁用对等节点通信的加密,默认为false,必须与对等节点相同
--multi-thread 使用多线程运行时,默认为单线程
--disable-ipv6 不使用IPv6
--dev-name <DEV_NAME> 可选的TUN接口名称
--mtu <MTU> TUN设备的MTU,默认为非加密时为1420,加密时为1400
--latency-first 延迟优先模式,将尝试使用最低延迟路径转发流量,默认使用最短路径
--exit-nodes [<EXIT_NODES>...] 转发所有流量的出口节点,虚拟IPv4地址,优先级由列表顺序决定
--enable-exit-node 允许此节点成为出口节点
--no-tun 不创建TUN设备,可以使用子网代理访问节点
--use-smoltcp 为子网代理启用smoltcp堆栈
--manual-routes [<MANUAL_ROUTES>...] 手动分配路由CIDR,将禁用子网代理和从对等节点传播的wireguard路由。例如:192.168.0.0/16
--relay-network-whitelist [<RELAY_NETWORK_WHITELIST>...] 仅转发白名单网络的流量,支持通配符字符串。多个网络名称间可以使用英文空格间隔。
如果该参数为空,则禁用转发。默认允许所有网络。
例如:'*'(所有网络),'def*'(以def为前缀的网络),'net1 net2'(只允许net1和net2)"
--disable-p2p 禁用P2P通信,只通过--peers指定的节点转发数据包
--disable-udp-hole-punching 禁用UDP打洞功能
--relay-all-peer-rpc 转发所有对等节点的RPC数据包,即使对等节点不在转发网络白名单中。这可以帮助白名单外网络中的对等节点建立P2P连接。
--socks5 <SOCKS5> 启用 socks5 服务器,允许 socks5 客户端访问虚拟网络. 格式: <端口>,例如:1080
-h, --help Print help
-V, --version Print version
版本区别
1.2.3 版本通过命令行启动后可以在窗口看见全部的参数,有些参数是默认的,即使没有在命令行中指定,主要对 [flags]内的参数默认,如下图
2.0.0 版本通过命令行启动后,只显示基础的默认参数,要看详细,就在命令行启用 --console-log-level info
通过添加启动日志信息查看全部的参数
配置文件启动
使用配置文件启动命令为 easytier-core -c ./config.yaml
在同级目录下新增一个 config.yaml
即可,配置文件的优先级更高,当运行时指定了配置文件,则命令行中除 -c 的其他参数将被忽略,只对配置文件生效。
下面👇是官方给的示例
这个👇是我的服务器和节点启动的示例,聪明的你已经看出来区别,我这份就是使用了自己需要的参数和配置来启动,也就是说配置文件不需要的参数可以不用加,很好理解
# 服务器启动配置内容
hostname = "GHNAT"
ipv4 = "192.168.13.1"
dhcp = false
routes = []
listeners = [
"tcp://0.0.0.0:49160",
"udp://0.0.0.0:49160",
"wg://0.0.0.0:49161",
"ws://0.0.0.0:49161/",
"wss://0.0.0.0:49162/",
]
exit_nodes = []
rpc_portal = "0.0.0.0:15888"
[network_identity]
network_name = "tiax"
network_secret = "tiax"
[[proxy_network]]
cidr = "10.74.0.0/16"
[flags]
default_protocol = "udp"
dev_name = "以太网8"
enable_encryption = false
enable_ipv6 = true
mtu = 1380
latency_first = true
enable_exit_node = false
no_tun = false
use_smoltcp = true
disable_p2p = false
disable_udp_hole_punching = false
relay_all_peer_rpc = false
foreign_network_whitelist = "*"
# 加入的设备配置内容
hostname = ""
dhcp = true
listeners = []
rpc_portal = "127.0.0.1:15888"
[network_identity]
network_name = "tiax"
network_secret = "tiax"
[[peer]]
uri = "udp://122.34.14.237:49160"
[flags]
default_protocol = "udp"
dev_name = "以太网8"
enable_encryption = false
enable_ipv6 = true
mtu = 1380
latency_first = true
enable_exit_node = false
no_tun = false
use_smoltcp = true
disable_p2p = false
disable_udp_hole_punching = false
relay_all_peer_rpc = false
foreign_network_whitelist = "*"
参数作用和使用场景
名称和密码
- --network-name
- --network-secret
这两个参数是标识此网络的网络名称和密码的,在命令行中是--network-name 名称 --network-secret 密码
在配置文件中是 👇
[network_identity]
network_name = "tiax"
network_secret = "tiax"
可以不配置,则会自动默认就是下图这样的,名称 default ,密码空
IP地址
- --ipv4
- --dhcp
这两个参数是用来指定 IP 地址的,一个手动一个自动 ,在命令行中 --ipv4 10.10.10.1
| --dhcp
表示
在配置文件中是 👇
# 固定地址
ipv4 = "192.168.13.1"
dhcp = false
# 自动获取
dhcp = true
网段说明,如果当前你的这个网络里有一个设备,ip地址不管是固定还是自动获取的,后面加入的节点都会按第一个设备的IP自动往下分配,如果你是这个网络里第一个设备又没有配置固定地址,那么默认的地址就是 10.126.126.1
经测试这个是程序默认的,具体可以问下作者。
举例说明1:这个网络里 现在有一个 A节点(不区别服务端和客户端),配置了一个固定 IP 地址 ipv4 = "192.168.13.1"
那么后续B,C,D等使用dhcp参数加入进这个网络内的设备就自动 从 192.168.13.2,192.168.13.3,192.168.13.4 分配,除非加入的这个节点配置了固定 IP 。
举例说明2:这个网络现在有一个A节点,没有配置固定地址,只配置了dhcp,那么后续加入的b,c,d等使用dhcp,则会自动分配 10.126.126.1 这个地址。
节点和监听
- --peers
- --rpc-portal 这个参数是监听RPC管理地址,如果没有配置正确,那么 easytier-cli.exe peer 等几个命令就会提示连接超时。
- --listeners 这个参数是监听当前节点的可供连接的地址,一般作为服务器才使用,如果不监听任何可以使用
--no-listener
这 3 个参数是用来指定对等节点地址,rpc 监听地址,和本机监听地址,在命令行中 -p tcp://public.easytier.top:11010
| --rpc-portal 127.0.0.1:15888
| --listeners tcp://0.0.0.0:11010 tcp://0.0.0.0:11011 wg://0.0.0.0:11010
在配置文件中是 👇
# 对等节点地址
[[peer]]
uri = "udp://111.889.44.333:49160"
# 多个就这样填
[[peer]]
uri = ""
[[peer]]
uri = ""
# RPC 监听地址
rpc_portal = "127.0.0.1:15888"
# 本机监听的可提供对外对等连接的地址,端口可以自定义
listeners = [
"tcp://0.0.0.0:49160",
"udp://0.0.0.0:49160",
"wg://0.0.0.0:49161",
"ws://0.0.0.0:49161/",
"wss://0.0.0.0:49162/",
]
# 如果不监听任何地址
listeners = []
子网代理
- --proxy-networks
这个参数用来做点对网的配置,具体干嘛用的参见作者文档 子网代理(点对网) 在命令行中 单个-n 192.168.1.0/24
| 多个 -n 192.168.1.0/24 -n 172.16.31.0/24
在配置文件中是 👇
# 单个
[[proxy_network]]
cidr = "10.74.0.0/16"
# 多个
[[proxy_network]]
cidr = "10.74.0.0/16"
[[proxy_network]]
cidr = "59.0.0.0/8"
常见问题:
1、A节点配置了一个子网 10.74.0.0/16 ,B节点配置了一个子网 "10.0.0.0/8,虽然用子网掩码隔开了网段,但是实际测试中,如果 C 加入到网络后,会收到这 2 条路由信息,其中 B 的 10.0.0.0/8 优先级最高,A节点的 10.74 就有时候能访问有时候不能,因为ET分发的路由表网关地址都是一样的,如下图,经实际测试,不同节点代理了子网后分发的路由表,网关地址都是 10.1.1.1
这种是路由地址冲突的场景下,如果节点代理的子网地址不冲突就不会有这个问题。这个也不算问题,本身就是地址不规范的问题,给作者提了 Issues 希望后续版本可以通过自定义分发路由,类似在 IPsec 中分发路由那种直接定义:IP/掩码/网关
2、A节点配置了一个子网 10.74.0.0/16 ,B节点配置了一个子网 "10.0.0.0/8,当 B 加入网络后,会自动给 A 推送 10.0.0.0/8 这条路由,这种地址范围比较大的情况下,就会导致 A 原本自己本地网络原本就能访问的地址就要经过 B 了。经测试这种情况,有 2 种解决办法,
(1:在配置文件中添加 routes = [] ,或者在命令行参数添加 --manual-routes ,表示当前节点加入到网路内,不接受其他有子网代理的节点推送路由信息
或者只接受某一个子网地址路由信息,命令行中 --manual-routes 192.168.1.0/24 172.16.31.0/24
# 配置文件中
routes = [
"192.168.1.0/24",
"172.16.31.0/24",
]
(2:不给当前节点分配IP地址,既不配置固定IP 也不配置 dhcp 自动获取,这个节点加入网络后,也不会收到网络里其他有子网代理的节点推送路由信息
[flags]参数
flags 里面主要定义一些进阶参数内容,下面是以配置文件形式介绍,如果使用命令行也可以,请参考上文中命令行使用例子,拼接参数即可。(我个人目前是以配置文件运行为主,命令行拼接这么多参数太长la~)
default_protocol = "udp"
连接到对等节点使用的默认协议,tcp或udp,这个经过实际测试,还是要看本身的网络环境而定,默认是tcp
dev_name = "以太网8"
虚拟网卡名称,也就是在设备里这个名称,为空的话就按程序的命令来
enable_encryption = false
是否启用加密,默认是 true 加密的,如果一个节点使用了加密,那么其他节点都要使用加密,不然就加入不了网络里,这个加密实际用 wireshark 抓包看过,不加密好像要快一些?
enable_ipv6 = true
是否监听本机的ipv6,默认是开启的,如果有ipv6环境,启用就可以支持 ipv6
mtu = 1380
意思是“最大传输单元”。它指的是在网络中一次可以传输的最大数据包大小(以字节为单位)
mtu = 1380
表示网络接口的最大传输单元设置为 1380 字节,也就是创建的那张虚拟网卡的吞吐量,一般不用修改,默认就行。
latency_first = true
延迟优先模式,将尝试使用最低延迟路径转发流量,默认使用最短路径,这个实际测试过,可能我节点太少了,没啥感觉~ 主要还是依据自己的网络环境来配置。
enable_exit_node = false
意思是不会将其节点配置为出口节点,这意味着它不会允许外部流量通过该节点访问公共互联网。这种设置通常用于提高安全性和隐私,防止节点被用作流量出口,没有实际测试过作用,默认就行。
no_tun = false
无TUN模式,意思是不创建虚拟网卡,win环境下要使用管理员权限,linux环境下要root权限,如果无法使用管理权限,就可以把这个打开,节点可以通过虚拟 IP 被访问(TCP、UDP 和 ICMP 都支持),也可以做子网代理(使用 -n 参数)但是无法主动发起对其他节点的访问。没有实际测试过,因为都是自己的设备,不存在没有管理员权限。
use_smoltcp = false
意思是该系统或应用程序将使用
smoltcp
协议栈来处理网络通信,这个参数主要用于子网代理的节点,比如 A 代理了自己的子网 192.168.1.0/24 , B 加入后,发现访问不了 A 的子网,那么 A 就可以把这个参数打开。由于代理流量需要用到系统的网络栈,因此子网代理需要关闭在虚拟网卡上的防火墙(Linux 和 Windows 皆是如此),如果无法关闭防火墙,可以尝试用用户态的网络栈做子网代理,可以免去配置防火墙的步骤。
disable_p2p = false
这个选项指的是是否禁用点对点(P2P)功能,如果改成 true 那么这个节点的流量都是通过网络内的其他节点中继。
disable_udp_hole_punching = false | 2.0.0 新增的一个参数,1.2.3 没有这个参数,禁用UDP打洞功能
没有实际测试过,可能某些环境下tcp 中继才可以通?
relay_all_peer_rpc = false
默认情况 ET 的每个节点都允许为其他虚拟网提供转发服务,不转发其他虚拟网的网络包,而是只帮助他们建立 P2P 链接,只需将白名单置空,并设置仅转发 RPC 流量即可。比如 A 节点 不想让他去中继其他节点的流量,只帮助其他节点建立 p2p连接,就可以把这个参数打开,然后oreign_network_whitelist 为空。
- foreign_network_whitelist = "*"
仅转发白名单网络的流量,支持通配符字符串。多个网络名称间可以使用英文空格间隔。如果该参数为空,则禁用转发,默认允许所有网络。
例如:*
就是允许所有网络
def*
(以def为前缀的网络)
net1 net2
(只允许net1和net2)
其他参数
- --console-log-level
- --file-log-level
- --file-log-dir
- --instance-name
- --vpn-portal
- --default-protocol
- --hostname
- --socks5
这些参数看上面的帮助说明就行了,都很简单好理解,这里不再赘述了,其他相关问题可以群里咨询我,有问必答,我也解答不了的,就只有问作者大大了 哈哈哈
此处评论已关闭