Features
- 对 DNS 组件进行了重构
- 新增支持的 DNS 协议
- DNS over TCP: 写法为
tcp://host:port
, 如tcp://8.8.8.8:53
. - DNS over TCP local: 写法为
tcp+local://host:port
, 如tcp+local://8.8.8.8:53
. (与 DNS over TCP 的区别是此模式不经过路由而是直接由 freedom 发出) - DNS over QUIC local: 写法为
quic+local://host
, host必须是支持DNS over QUIC 协议的服务器, 如quic+local://dns.adguard.com
.
- DNS over TCP: 写法为
- 新的配置项
queryStrategy
: 可用配置为 "UseIP" | "UseIPv4" | "UseIPv6", 其中UseIPv4 只查询 A 记录, UseIPv6只查询 AAAA 记录. 默认值为 UseIP, 即查询两者.clientIp
: 可用配置为一个非私有IP地址. 当指定 clientIp 时, 服务器将返回更适合此 clientIp 所在地区的使用的 IP 地址.- 注1: 需要 DNS 服务器支持 EDNS Client Subnet.
- 注2: 可以在
DnsObject
为所有 DNS 服务器指定 clientIp, 也可在每个 DNS 服务器配置的ServerObject
为此 DNS 服务器指定 clientIp (优先级高于DnsObject
的配置).
disableCache
: 可用配置为 true | false, 为 true 时禁用 DNS 缓存, 默认为 false, 即不禁用.disableFallback
: 可用配置为 true | false, 为 true 时禁用 DNS 的 fallback 查询, 默认为 false, 即不禁用.disableFallbackIfMatch
:可用配置为 true | false, 为 true 时禁用当DNS 服务器的优先匹配域名列表命中时的 fallback 查询, 默认为 false, 即不禁用.skipFallback
: 可用配置为 true | false, 如设置为 true, 在进行 DNS fallback 查询时将跳过此服务器, 默认为 false, 即不跳过.- 注1: DNS fallback 查询指 -- DNS 查询会使用 skipFallback 为 false 的 DNS 服务器依次查询. 即如果 DNS 服务器查询失败, 或 expectIPs 不匹配, 则使用下一个被选中的 DNS 服务器进行查询.
- hosts 现在支持多个地址映射, 如 "dns.google": ["8.8.8.8","8.8.4.4"]
- 其他的一些修改及修复
- 感谢 v2fly社区 的各位贡献者在此修改中的大量贡献. 感谢 @Loyalsoldier @Vigilans @vcptr @CalmLong @xiaokangwang @AkinoKaede @digglife @rurirei @yuhan6665 @maskedeken
Enhances
使用 gRPC 底层传输方式时, 如果用 nginx 等工具前置分流, 现在可以接收真实 IP. 感谢 @lucifer9
- nginx http 和 stream 分流方式均可以传递和接收真实 IP
- 被修复问题可参见 #766
- 支持 FakeDnsObject 配置为数组以返回多个 IP
- 一些修复和优化
Fixes & Tweaks
- 修复和完善了一系列 test, 使得很多会
随机失败的 test 稳定运行. 非常感谢 @yuhan6665 - Send shadowsocks handshake with payload if available 感谢 @nekohasekai
- Move from deprecated ioutil to os and io packages 感谢 @kallydev
- Revert "cancel failed grpc connection (#707)" 感谢 @yuhan6665
- 合并自 v2fly社区 的修改 (持续完善中) , 感谢 @yuhan6665 @therealak12 @Loyalsoldier @rurirei @xiaokangwang
- Add tcpKeepAliveInterval in transport sockopt
- 为 SockoptObject 增加了一个新配置选项
tcpKeepAliveInterval
: TCP 保持活跃的数据包的发送间隔, 单位为秒. 不配置此项使用 go 的默认行为. (仅 linux)
- Add header and method support to http2 transport
- 为 http2 底层传输方式增加了两个新配置选项
method
: HTTP 方法. 默认值为 "PUT"headers
: HTTP 头. 一个键值对, 每个键为一个 HTTP 头的名称, 对应的值是一个数组.
- Fix: nullcheck on alternative systemDialer
- Refinement: LRU
- vformat的一系列相关修改
- Add tcpKeepAliveInterval in transport sockopt
- 增加了 对 windows arm64 的 二进制编译.
- 添加了 dependabot 用于管理依赖.
- 一些拼写错误和细节修改调整.
Chores
- Style: format code by gofumpt
- upgrade dependencies
- Use Go 1.17.2
- Update geoip.dat, geosite.dat
Notice
v1.5.0 为包含较大改动的首版,如果使用中遇到任何问题,请在 pre-release 期间及时反馈,我们将会优先定位并解决,未正式发布前请谨慎部署至生产环境。