DNSLog平台搭建
Lastmod: 2023-06-17

讲解一下DNSLog平台搭建的原理。

预备

DNSLOG平台代码

eyes.sh

DNSLog-Platform-Golang

VPS一枚

VPS操作系统:Ubuntu20.04LTS

域名一个

准备

举例腾讯云,域名是allsec.top

添加一条A记录
主机记录:ns1 记录值:VPS的IP
添加一条NS记录
主机记录:log 记录值:ns1.allsec.top

完成。注意坑三。

【可选】调试

VPS上使用TCPDUMP抓包

tcpdump udp port 53

本地尝试查找A记录

nslookup aaaa.log.allsec.top 114.114.114.114

正常的话,VPS上已经能看到aaaa.log.allsec.top的A请求记录了。

方案一:XRAY

配置参考:

reverse:
  db_file_path: "rev.db"   # 反连平台数据库文件位置, 这是一个 KV 数据库
  token: "bugaosuni"         # 反连平台认证的 Token, 独立部署时不能为空
  http:
    enabled: true
    listen_ip: 0.0.0.0 
    listen_port: "9990"
    ip_header: ""     
  dns:
    enabled: true
    listen_ip: 0.0.0.0 
    domain: "log.allsec.top"     # DNS 域名配置
    is_domain_name_server: true        # 是否修改了域名的 ns 为反连平台,如果是,那 nslookup 等就不需要指定 dns 了
    resolve:            # DNS 静态解析规则
    - type: A             # A, AAAA, TXT 三种
      record: localhost
      value: 127.0.0.1
      ttl: 60

运行:

./xray_linux_amd64 reverse

参考阅读:DNS 相关

方案二:编译

config.toml配置文件,domians填自己的dns服务器,cname填你想解析到的域名。

开启认证,帐号密码kokokoko/sec

[front]
template = "index.html"
[back]
listenhost = "0.0.0.0"
listenport = 8088
domains = [ "log.allsec.top"]
cname = "www.bilibili.com"
[basicauth]
check = true
username = "kokokoko"
password = "sec"

Ubuntu安装golang

sudo apt install golang-go

编译,注意先完成坑一:

go build main.go

在main/main获得二进制文件,重命名。

mv main/main log-server

完成

[可选]为了不用sudo也能绑定53端口运行,为添加特例

sudo setcap cap_net_bind_service=+eip ~/dnslog/log-server

运行:

./log-server
或
./xray_linux_amd64 reverse

其实可以了。

FAQ

坑一:

go运行加载仓库需要非常通畅的网络环境,国内是没有的,所以配置镜像。

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

坑二:

系统自带服务在占用53端口:

root@tesVM:/home/jose/DNSLog-Platform-Golang# ss -anltp | grep 53 LISTEN 0 10 172.18.0.1:53 0.0.0.0:* users:((“named”,pid=748,fd=55),(“named”,pid=748,fd=54),(“named”,pid=748,fd=53)) LISTEN 0 10 172.17.0.1:53 0.0.0.0:* users:((“named”,pid=748,fd=50),(“named”,pid=748,fd=49),(“named”,pid=748,fd=48)) LISTEN 0 10 10.0.8.16:53 0.0.0.0:* users:((“named”,pid=748,fd=33),(“named”,pid=748,fd=32),(“named”,pid=748,fd=31)) LISTEN 0 10 127.0.0.1:53 0.0.0.0:* users:((“named”,pid=748,fd=28),(“named”,pid=748,fd=27),(“named”,pid=748,fd=26)) LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:((“systemd-resolve”,pid=713,fd=13))
LISTEN 0 4096 127.0.0.1:953 0.0.0.0:* users:((“named”,pid=748,fd=22))
LISTEN 0 10 [fe80::5054:ff:fede:6ad7]%eth0:53 [::]:* users:((“named”,pid=748,fd=44),(“named”,pid=748,fd=43),(“named”,pid=748,fd=42)) LISTEN 0 10 [::1]:53 [::]:* users:((“named”,pid=748,fd=39),(“named”,pid=748,fd=38),(“named”,pid=748,fd=37)) LISTEN 0 4096 [::1]:953 [::]:* users:((“named”,pid=748,fd=45))

root@tesVM:/home/jose/DNSLog-Platform-Golang# ps aux | grep 748 bind 748 0.0 0.8 379540 33868 ? Ssl Oct13 7:40 /usr/sbin/named -f -u bind

root@tesVM:/home/jose/DNSLog-Platform-Golang# ss -anltp | grep 53 LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:((“systemd-resolve”,pid=713,fd=13))

可以看到,就是named、systemd-resolve在占用端口。

在关停服务前,保险起见,先打个快照。也避免影响sudo命令,所以同时为VPS加一条hosts。

sudo vim /etc/hosts
-----------添加一行,这里的VPS主机名是tesVM----------
127.0.0.1 tesVM
----------------

关停占用的系统服务

sudo systemctl stop systemd-resolved
sudo systemctl stop named
sudo systemctl disable named

坑三:

VPS防火墙策略,记得放通UDP端口53。

坑四:

这家伙的仓库 lanyi1998/DNSlog-GO,star多,但是用不起来,没用。 –2021-12-31