功能发布:自建 Yak Bridge 反连(DNSLog/ICMPLog/TCPLog)
随着大家对 Yakit 的使用越来越深入,一些场景支持逐渐被提上日程。
众所周知,在 Yak 检测模块中,很多漏洞需要借助外部的 DNSLog 或者随机的 TCP 端口连接或 ICMP 长度进行反连确认。然而在内网中或者遇到 “数据不出网” 合规要求,我们不应当将反连操作接入公共的 Yak Bridge 来进行操作。很自然地,我们将会遇到 Yak Bridge 的私有化部署的问题。
在之前的版本,我们的 Yak Bridge 似乎可以自动获取 External IP,自动从诸如
"ifconfig.me"
"ipinfo.io/ip"
"ipecho.net/plain"
"www.trackip.net/ip"
"ip.sb"
"v4.ident.me"
"ident.me"
这些网站中寻找 Yak Bridge 所在的公网 IP;在这种情况下,我们部署在内网会遇到获取到 “出口网络” 的 IP,这个显然不应该作为给 Yakit 或者 Yaklang 脚本的 IP 地址;为此我们需要在一定程度上屏蔽这个问题:用户自行配置了公共 IP 后,将会绕过自动检测 IP 这个阶段。
搭建Yak Bridge服务
当然,如果用户想要不使用 Yakit 内置的公共服务,想要使用自己搭建的可以在 Yakit 平台中使用的公网服务来完成以下内容:
- 自用 DNSLog / ICMPLog / TCPLog 等优秀的特性;
- 使用 gRPC 编写客户端操作服务器;
- 有填入 “密码” 的需求;
启用DNSLog以及全部服务
我们为用户提供了一个docker-compose文件,用户只需要docker-compose up -d即可正常启动
version: "2"
services:
bridge:
image: v1ll4n/yak-bridge:latest
network_mode: host
restart: always
command: yak bridge --dnslog --domain dnstunnel.run --public-ip [your-public-ip]
当然,如果用户的环境并不希望使用 Yak bridge docker-compose 的部署方式,也可以直接启动 Yak 引擎来实现这个服务,这些都被允许的!
我们生效的其实是 Yak Bridge 这个命令,一般情况下 ,我们使用命令行的 Yak 核心引擎,通过 yak bridge -h即可查看所有参数。
NAME:
yak tunnel-server -
USAGE:
yak tunnel-server [command options] [arguments...]
OPTIONS:
--log-level value, -l value (default: "info") // 可以设置日志级别
--quiet, -q // 保持安静,不输出信息
--addr value // 监听的地址,可从此处修改端口 (default: "0.0.0.0:64333")
--debug // 调试模式 Debug mode for see database output
--retry-timeout value Set retry timeout (default: 10s)
--secret value // 用户使用这个 Yak Bridge 需要使用密码
--dnslog // 启用 DNSLog 开关
--domain value // 为 DNSLog 设置域名 Set DNSLog RootDomain
--public-ip value // 设置当前这个 Yak Bridge 的 IP 地址;Public IP Address: 设置公网显示的 IP 地址
很多时候,我们在域名配置完毕时,使用如下命令即可启动一个 Yakit 可连的 DNSLog 综合服务器:
yak bridge --dnslog --domain example.com --public-ip x.x.x.x
如何配置DNSLog?(两域名版)
一般来说,我们不配置 DNSLog 的话,上面描述的内容只能生效一半儿,我们只有 TCPLog / ICMPLog 以及穿透服务可用,如果想要 DNSLog 可用的话,我们不管在公网还是内网,都需要额外进行配置:
一、配置之前的准备工作
我们可以先约定两个域名:
- DNSLog 使用的根域名
- DNSLog NS 服务器辅助域名
- 已经部署好的 Yak Bridge
我们以 Yakit 提供的公共服务作为案例:
- Yakit DNSLog 使用的根域名为
dnstunnel.run - DNSLog NS 使用的辅助域名为
ns1.cybertunnel.run/ns2.cybertunnel.run - 我们在
124.223.202.90这台服务器上部署了 Yak Bridge,配置命令为
yak bridge --dnslog --domain dnstunnel.run
二、配置根域名
我们接下来仍然用 Yakit 中的配置举例:
我们在 dnstunnel.run 域名购买的服务提供商中配置 NS 记录为:
- NS 记录1:
ns1.cybertunnel.run - NS 记录2:
ns2.cybertunnel.run
这样的配置目的是,当大家要去找 dnstunnel.run 的解析时,
会先去询问ns1.cybertunnel.run和 ns1.cybertunnel.run 所有 dnstunnel.run 相关的所有记录在哪。
三、配置NS地址指向
在确定完成上述步骤后,我们进入 cybertunnel.run 的后台,为他添加两条 A 记录,指向的 IP 为我们搭建 Yak Bridge 的地址:124.223.202.90
我们配置ns1.cybertunnel.run 和ns2.cybertunnel.run 指向上述地址
在配置完毕后,等待记录生效后我们的 Yak Bridge 就算配置完毕了。
备注:
一般推荐大家使用两域名版本来配置 DNSLog,通用性更强,绝大多数服务提供商均可按此配置;
单域名版本需要服务提供商支持配置 DNS Hosts,目前支持此项配置的并不多(阿里云)
Yakit中使用自定义配置(v1.0.15-sp16)
一、点击右上角“配置”->配置全局反连
二、在全局反连中配置DNSLog链接选项
在这个配置中,如果要自定义 dnslog 必须提前配好 dnslog 域名
本文首发于 Yak Project 公众号,阅读原文。
