想拥有自己的 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
相关的所有记录在哪。
在确定完成上述步骤后,我们进入 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 域名