Skip to content
This repository has been archived by the owner on Aug 14, 2023. It is now read-only.

Latest commit

 

History

History
292 lines (192 loc) · 12.2 KB

config.md

File metadata and controls

292 lines (192 loc) · 12.2 KB

ET 配置

虽然不同的ET实现版本支持的特性不尽相同,但它们的配置文件是相互兼容的,少量不支持的参数会被自动忽略不生效。你可以在不同版本间使用同一个配置文件,使它们可以协同工作。

基本概念

程序命令

在本文中,会使用et指代ET的可执行程序,在使用时需将其替换成所在平台的可执行程序:

操作系统平台 可执行程序
Windows et.go.exe
Linux et.go.linux
Mac et.go.mac

如果在Linux中执行过安装脚本,那么et.go.linux会被链接为et

主配置文件

所谓主配置文件就是启动ET必须给出的配置文件,其中记录了程序运行需要的基本参数,这些参数会在接下来的指南中有所涉及,也会在文末进行汇总。如默认安装的client.confserver.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使用的协议头,它的值仅需遵循三条原则:

  1. 可以为任意随机或不随机字符串,但不得包含制表符(\t)或空格
  2. 服务端与客户端必须同时配置,并被配置为相同的值
  3. 不得照搬本文或其它任何地方的示例,因为这样便无法保证你的协议头的独特性,那么也就失去使用本参数的存在意义

为保证向下兼容性,当本参数未启用时,其值被设定为默认值: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

智能模式下,DNS会根据目标上文提到的location参数判断目标位置,选择最快的DNS解析方式(本地解析/代理解析)。

DNS污染

智能DNS无法解决DNS污染的问题。所以我们需要将部分容易遭受污染的域名添加进强制代理列表,使这些域名强制使用代理进行解析。如果发现某个域名只有全局模式能打开,智能模式无法打开,请手动将其添加进强制代理列表

这个列表的位置是${config-dir}/proxylists/*,该目录的所有.txt文件都会被加载。

程序通常会内置一个默认的强制列表文件,它来自proxy-list 项目,并遵循模板文件中注释部分所述规则。用户可以依照规则自由添加新的域名。

不过更建议将自定义规则放置在单独的自定义文件中,这可以避免你的自定义文件被更新覆盖掉。正如前文所说,proxylists目录的所有.txt文件都会被加载。

与之相对的一个目录是directlists,其中的所有.txt规则文件也都会被加载,但不同的是,这里记录的所有域名,在智能模式下都会被强制使用本地直连。

将常用域名添加进proxylists或directlists会显著提高ET的性能,因为这帮助ET省去了判断目标位置的开销。

hosts文件

hosts文件是网络活动中常用的规则文件,ET提供了对hosts文件的支持。用户只需要将hosts文件放置于[配置文件目录]/hosts这个目录(例如/etc/eagle-tunnel.d/hosts/)内,ET便会在启动时自动加载它。

所有以.hosts为后缀的文件都将被加载。

ET默认使用了neoHosts项目提供的广告屏蔽hosts。当然,如果你不喜欢,可以自由删去。

IP-Type

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(用户)

传统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,表示不检查超时