虽然不同的ET实现版本支持的特性不尽相同,但它们的配置文件是相互兼容的,少量不支持的参数会被自动忽略不生效。你可以在不同版本间使用同一个配置文件,使它们可以协同工作。
在本文中,会使用et
指代ET的可执行程序,在使用时需将其替换成所在平台的可执行程序:
操作系统平台 | 可执行程序 |
---|---|
Windows | et.go.exe |
Linux | et.go.linux |
Mac | et.go.mac |
如果在Linux中执行过安装脚本,那么et.go.linux
会被链接为et
。
所谓主配置文件就是启动ET必须给出的配置文件,其中记录了程序运行需要的基本参数,这些参数会在接下来的指南中有所涉及,也会在文末进行汇总。如默认安装的client.conf
或server.conf
这两个文件,就是主配置文件。这个配置文件可以根据你的喜好创建于任何位置,叫做任何名字。只要它遵循本文所述参数规则,你就可以用et -c [配置文件]
这个格式的命令启动ET。
et -c [配置文件]
# 例如 et -c /etc/eagle-tunnel.d/client.conf
主配置文件遵循以下格式:
# 注释部分
参数1 = 值1
参数2 = 值2
每行一对键值对。#表示注释,符号#
以及其所在行接下来的内容都将被忽略。如果出现重复参数,以最后出现的值为准。
ET的一些高级功能(后文会叙述)也需要自己的配置文件,这些配置文件所在目录即配置文件目录
。配置文件目录的默认位置为主配置文件
的所在目录,一般情况是不需要更改的。如果万一需要,我们也可以通过config-dir
这个参数来进行手动指定,例如:
config-dir = /etc/myconfig
固定协议头意味着流量识别的方便,但这种方便不但被提供给用户,也被提供给互联网中的第三方。如果你不希望他人知道你正在运行ET服务,可使用自定义协议头来达到你的目的。
head = 协议头内容
如上,head
参数被用来定义ET使用的协议头,它的值仅需遵循三条原则:
- 可以为任意随机或不随机字符串,但不得包含制表符(
\t
)或空格 - 服务端与客户端必须同时配置,并被配置为相同的值
- 不得照搬本文或其它任何地方的示例,因为这样便无法保证你的协议头的独特性,那么也就失去使用本参数的存在意义
为保证向下兼容性,当本参数未启用时,其值被设定为默认值:eagle_tunnel
ET提供简单轻量的用户认证,它分为服务端和客户端两个部分。
打开用户认证功能需要将主配置中user-check
参数置为on
。
user-check = on
所有用户信息应该被保存在用户列表中。用户列表是一个文本文件,默认情况下,它的位置为主配置文件同目录下的users.list
,比如/etc/eagle-tunnel.d/users.list
。当这个文件不存在,你需要自行创建。
用户列表的格式如下所示:
用户名:密码:速度限制:登录地数量
每行代表一个用户,由四个参数组成——用户名、密码、限速、用户类型。注意它们之间的:
是一个半角符号,而不是全角的:
。它们的含义如下:
参数 | 含义 | 可填项 | 当不填写时 |
---|---|---|---|
用户名 | 任意字符串(不包含: ) |
用户无效 | |
密码 | 任意字符串(不包含: ) |
用户无效 | |
限速 | 该用户的最高传输速度,单位为(KB/s) | 任意大于0的整数 | 不限速 |
登录地数量 | 该用户同时登录的地址最大数 | 任意大于或等于0的整数 | 0(表示不限制) |
登陆地数量的设计初衷是,当多人共用同一份ET服务时,有时会以AA制付费。但如果有人私下将账户分享给他人,这是对付费成员的不公平。限制多地同时登录能一定程度缓解这种风险。每次登录的超时时长为3分钟。
这里有一个users.list
示例:
eagle:ppp:100:0
wang:aaa
lan:ccc::1
示例中存在三个用户:
用户名 | 密码 | 限速 | 登录地限制数 |
---|---|---|---|
eagle | ppp | 100KB/s | 不限制 |
wang | aaa | 不限制 | 不限制 |
lan | ccc | 不限制 | 1 |
打开用户认证的功能需要设置主配置中的user
参数,格式类似于服务端
小节:
user=wang:aaa
# 用户名为wang,密码是aaa
当然,在客户端你也可以通过给
user
参数赋值wang:aaa:100
这样的方式来将客户端限速为100KB/s。(虽然几乎没人会有需要这么干)
null
作为保留账户名,被禁止使用(使用时会被忽略)
可在客户端处执行以下指令证明用户认证是否成功配置:
et check auth -c [配置文件]
成功的返回应该类似下面的示例:
AUTH OK with local user: [客户端使用的用户名]
默认情况下,ET会表现为全局代理软件:即所有流量都使用服务端进行中转。但这有时会带来不便——例如,除非关掉关掉代理,你可能无法访问B站仅限国内访问的内容。
因此ET提供了proxy-status
参数来控制其代理模式。当其值为smart
时,ET会有额外的智能分流特性,连接网站之前,程序首先会检测目标IP的地理位置,如果处于国外
则使用代理
,如果处于国内
则采用直连
。
proxy-status=smart
默认情况下,智能模式只考虑到中国大陆地区用户的需求,但有时国外用户也需要类似的功能。此时可使用location
参数。
# 以下是location参数的默认值,代表用户处于中国大陆
location = 1;CN;CHN;China
如何判断自己应该填什么值呢?可以通过https://ip2c.org/?self
这个地址查看。
智能模式下,DNS会根据目标上文提到的location
参数判断目标位置,选择最快的DNS解析方式(本地解析/代理解析)。
智能DNS无法解决DNS污染的问题。所以我们需要将部分容易遭受污染的域名添加进强制代理列表
,使这些域名强制使用代理进行解析。如果发现某个域名只有全局模式能打开,智能模式无法打开,请手动将其添加进强制代理列表
。
这个列表的位置是${config-dir}/proxylists/*
,该目录的所有.txt
文件都会被加载。
程序通常会内置一个默认的强制列表文件,它来自proxy-list 项目,并遵循模板文件中注释部分所述规则。用户可以依照规则自由添加新的域名。
不过更建议将自定义规则放置在单独的自定义文件中,这可以避免你的自定义文件被更新覆盖掉。正如前文所说,proxylists目录的所有.txt
文件都会被加载。
与之相对的一个目录是directlists
,其中的所有.txt
规则文件也都会被加载,但不同的是,这里记录的所有域名,在智能模式下都会被强制使用本地直连。
将常用域名添加进proxylists或directlists会显著提高ET的性能,因为这帮助ET省去了判断目标位置的开销。
hosts文件是网络活动中常用的规则文件,ET提供了对hosts文件的支持。用户只需要将hosts文件放置于[配置文件目录]/hosts
这个目录(例如/etc/eagle-tunnel.d/hosts/
)内,ET便会在启动时自动加载它。
所有以.hosts
为后缀的文件都将被加载。
ET默认使用了neoHosts项目提供的广告屏蔽hosts。当然,如果你不喜欢,可以自由删去。
ip-type
参数表明了当前DNS解析的模式:
ip-type 参数值 | 含义 |
---|---|
4 | 只解析IPv4 |
6 | 只解析IPv6 |
46 | 优先IPv4 |
64 | 优先IPv6 |
所有配置文件中支持的参数(可参考下文参数总览),皆支持加上--
前缀后作为程序启动参数被提供。
et --relay 127.0.0.1:8080 --listen 127.0.0.1:8081
上述启动方式等价于
et -c ./client.conf
# ./client.conf
# relay = 127.0.0.1:8080
# listen= = 127.0.0.1:8081
为了方便测试,ET提供了内建命令。标准的内建命令执行格式如下:
et [命令] -c [配置文件]
如果配置完账户验证却无法正常使用ET,不妨执行下面指令试试:
et check auth -c [配置文件]
正确的反馈应该是:
AUTH OK with local user: [客户端使用的用户名]
传统PING命令运行于网络层,无法准确反映应用层的实际网络表现。为了达到这个目标我们可以执行ET内置的应用层PING:
et check ping -c [配置文件]
PING指令反映的是一条极短的消息(<1 MTU)在服务端与客户端之间往返一次所花的时间。丢包等异常情况导致的重传和时延,都已被包含在此时间之内。
ET协议起初参考了SOCKS协议的构思,因此也将版本校验放在比较优先的地位,但实践证明这是并无必要的,因此新版本的协议会取消对不兼容版本的拒绝服务。当然不兼容带来的异常是仍然存在的——例如v1.3以上服务端协议无法为v1.2及以下客户端协议提供IP定位服务。
用户需要一个方便的手段判断,服务异常是否由版本不兼容引起,因此ET提供了以下命令:
et check version -c [配置文件]
如果有用户无法正常使用服务,可使用下述指令查询登录状况检查(该程序的执行需要保证“管理员可登录”这一前提):
et check users -c [配置文件]
正确的反馈应该类似这样:
USERS:
--- ---
用户名1: free # 用户1 登录地未满
用户名2: full # 用户2 登录地已满
用户名3: no limit # 用户3 登陆地无限制
这一小节所说的参数,指的是主配置文件中所使用的参数。ET目前拥有的参数,以及其解释会被放在下表:
参数名 | 值类型 | 示例 | 默认值 | 解释 |
---|---|---|---|---|
relay | IP地址:端口号 | 8.8.8.8:8080 | 空 | 上级relay(服务端)的监听地址。对于客户端来讲它是必填项。当你只填写了IP地址(如8.8.8.8)它会被自动添上默认端口号(8080) |
listen | IP地址:端口号 | 127.0.0.1:8080 | 0.0.0.0:8080 | 本地relay(客户端)的监听地址。当你只填写了IP地址(如8.8.8.8)它会被自动添上默认端口号(8080)。当它的值为0.0.0.0::8080时,代表程序会监听本地所有IP地址的8080端口 |
http | on/off | on | off | HTTP代理协议的开关。当值为on时,程序会接收HTTP代理协议的流量。这个参数通常被用于客户端中 |
socks | on/off | on | off | SOCKS协议的开关。当值为on时,程序会接收SOCKS协议的流量。这个参数通常被用于客户端中 |
et | on/off | on | off | ET协议的开关。当值为on时,程序会接收ET协议的流量。这个参数通常被用于服务端中 |
user | 用户名:密码 | username:password | 空 | 客户端使用的登录账户。当它为空时,表示关闭用户检查(这需要服务端同时关闭用户检查)。 |
user-check | on/off | on | off | 服务端的用户检查开关,当它为on时,用户检查功能开启。所有被授权的用户应该被写在用户列表中。 |
proxy-status | enable/smart | smart | enable | 代理服务的模式状态,这个参数只对客户端生效。当为enable时,为全局代理,当为smart时,为智能代理。 |
head | 字符串 | helloworld | eagle_tunnel | 自定义协议头 |
config-dir | 字符串 | /etc/eagle-tunnel.d | 当使用配置文件,则为配置文件所在目录;当未使用配置文件,则为空 | 存放users.list等配置文件的目录 |
timeout | 数字 | 10 | 0 | 超时时间(单位:秒),默认为0,表示不检查超时 |