讲解一下DNSLog平台搭建的原理。
预备
DNSLOG平台代码
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