summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHandingkang <[email protected]>2023-07-10 19:58:59 +0800
committerHandingkang <[email protected]>2023-07-10 19:58:59 +0800
commit3d30b4ba2bba20cb85afb8e1ebd670554fd6bb9b (patch)
treec51c57d605bfcf32d04b871c8cccc0f3066a157f
parent886926e5d1156ee168b4727dee2de113b9e4ebbb (diff)
1. 文档撰写
2. 代码细节修改
-rw-r--r--.dockerignore3
-rw-r--r--Ohmydns2.md74
-rw-r--r--core/README.md1
-rw-r--r--core/dnsserver/prober_http.go3
-rw-r--r--picture/image.pngbin0 -> 67452 bytes
-rw-r--r--plugin/pkg/prober/args.go1
-rw-r--r--plugin/v64dns/setup.go8
-rw-r--r--plugin/v64dns/v64dns_policy.go5
-rw-r--r--plugin/v64dns/v64dnsutil.go7
9 files changed, 91 insertions, 11 deletions
diff --git a/.dockerignore b/.dockerignore
index 8d9abe9..303d104 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,3 +1,4 @@
*.md
data
-plugin/v64dns/analyze/venv \ No newline at end of file
+plugin/v64dns/analyze/venv
+picture \ No newline at end of file
diff --git a/Ohmydns2.md b/Ohmydns2.md
new file mode 100644
index 0000000..f5f9cb7
--- /dev/null
+++ b/Ohmydns2.md
@@ -0,0 +1,74 @@
+# Ohmydns2
+## 功能
+基于coredns改进而来的DNS服务组件,
+
+## 项目架构
+![项目结构](./picture/image.png)
+### 核心插件
+存放在/plugin/pkg中,负责所有底层DNS请求、响应的实现(类似于sapp解析层插件)
+
+### 业务插件
+存放在plugin,负责各种业务层处理实现(类似于sapp业务层插件)
+## 部署方式
+项目打包为Docker镜像进行容器化部署
+## 配置项
+### Ohmyfile
+参照coredns的corefile
+#### v64DNS
+
+##### NS4
+##### NS6
+
+## API设计
+### 探测控制
+通过HTTP访问的方式控制探测部分,默认开放端口2115,访问路径`/prober`
+#### 参数
+
+| 参数名 | 说明 | 示例 |
+|--------|--------------------|----------------------------------|
+| / | 无参数时,默认展示所有的探测任务状态 | / |
+| act | new/stop | 新建一个或停止指定(全部)任务(停止指定任务需要配合pid参数) |
+| pid | 探测任务id | |
+| prange | 探测范围,默认为全球 | |
+| ptype | 探测任务类型,默认为v64 | |
+| loop | 是否不间断重复探测任务 | |
+
+#### 探测任务
+
+
+
+## 库表设计
+### MySQL数据库
+待定
+### 图数据库--Neo4J
+#### 节点——ResolverFromDo53
+节点ID由Neo4J自动分配管理
+
+| 属性名 | 说明 | 示例 |
+|----------|-----------------------------------|:------------------|
+| AS | 自治域号 | AS15169 |
+| COU | 国家 | China |
+| CODE | 国家代码 | CN |
+| LAT | 纬度 | 39.916527 |
+| LNG | 经度 | 116.397128 |
+| ISP | 服务商 | Google Inc. |
+| IPtype | IP类型(v4/v6) | v6 |
+| PROVINCE | 省份 | Beijing |
+| TIME | 首次发现时间 | 1234892919.655932 |
+| LTIME | 最近一次发现时间 | 1234892919.655932 |
+| IP | IP地址 | 2001::1 |
+| W | 权重,实际等于总共被发现的次数,用以表现在实际解析中节点的关键程度 | 1 |
+
+#### 边(关联)
+neo4j通过分别匹配相同的源节点和目的节点来找到对应的边
+
+| 属性名 | 说明 | 示例 |
+|-----|-------------------------------------|----|
+| W | 权重,实际等于总共被发现的次数,用以表现实际解析中该解析路径的关键程度 | 1 |
+
+
+
+
+
+
+
diff --git a/core/README.md b/core/README.md
deleted file mode 100644
index b2d8d1b..0000000
--- a/core/README.md
+++ /dev/null
@@ -1 +0,0 @@
-core包是ohmydns核心业务组件 \ No newline at end of file
diff --git a/core/dnsserver/prober_http.go b/core/dnsserver/prober_http.go
index b1fdb3b..8ee20e1 100644
--- a/core/dnsserver/prober_http.go
+++ b/core/dnsserver/prober_http.go
@@ -178,7 +178,6 @@ func (p *ProberHTTP) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Write(msg)
return
case "stop":
- //TODO:探测停止
if n, pok := param["pid"]; pok {
id, _ := strconv.Atoi(n[0])
err := p.proberlist.DeleteProberById(id)
@@ -187,7 +186,7 @@ func (p *ProberHTTP) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
return
}
- // 无额外参数代表停止所有探测
+ //TODO: 无额外参数代表停止所有探测
}
} else {
diff --git a/picture/image.png b/picture/image.png
new file mode 100644
index 0000000..7c95156
--- /dev/null
+++ b/picture/image.png
Binary files differ
diff --git a/plugin/pkg/prober/args.go b/plugin/pkg/prober/args.go
index 5a532a1..91f6288 100644
--- a/plugin/pkg/prober/args.go
+++ b/plugin/pkg/prober/args.go
@@ -9,7 +9,6 @@ const (
const (
defaultPrange = "global"
defaultPtype = "v64"
- defaultAlladdrv4 = "test"
defaultTarget = "n64.top"
defaultStartsubv64 = "v4-1"
defaultMaxGRout = 4000 //默认协程最大运行数
diff --git a/plugin/v64dns/setup.go b/plugin/v64dns/setup.go
index e1a70ea..d9c4819 100644
--- a/plugin/v64dns/setup.go
+++ b/plugin/v64dns/setup.go
@@ -4,9 +4,9 @@ import (
"ohmydns2/core/dnsserver"
"ohmydns2/plugin"
olog "ohmydns2/plugin/pkg/log"
+ "ohmydns2/plugin/pkg/prober"
"ohmydns2/plugin/v64dns/analyze"
"strconv"
- "ohmydns2/plugin/pkg/prober"
"github.com/coredns/caddy"
)
@@ -30,6 +30,7 @@ func setup(c *caddy.Controller) error {
func parseArg(c *caddy.Controller) (*V64dns, error) {
v := new(V64dns)
v.p.maxLen = chain_maxlen
+ v.p.dmChange = false
for c.Next() {
arg := c.RemainingArgs()
@@ -63,6 +64,7 @@ func parseArg(c *caddy.Controller) (*V64dns, error) {
v.p.v6domain = args[1] + "." + v.zone
v.p.v6subdomain = args[1]
v.p.v4subdomain = args[0]
+ v.p.dmChange = true
case "ip-embed":
v.p.ipEmbed = true
case "chain-mlen":
@@ -87,8 +89,8 @@ func parseArg(c *caddy.Controller) (*V64dns, error) {
}
// 监控停止信号
go EL.Stop()
- log.Infof("v64权威服务器启动, 工作参数为 Zone:%v, NS4:%v, NS6:%v, IPv4子域:%v, IPv6子域:%v",v.zone,v.ipv4NS,v.ipv6NS,v.p.v4subdomain,v.p.v6subdomain)
- log.Infof("测试样例: "+prober.MakeTestProbev64(v.p.v4subdomain,v.zone))
+ log.Infof("v64权威服务器启动, 工作参数为 Zone:%v, NS4:%v, NS6:%v, IPv4子域:%v, IPv6子域:%v", v.zone, v.ipv4NS, v.ipv6NS, v.p.v4subdomain, v.p.v6subdomain)
+ log.Infof("测试样例: " + prober.MakeTestProbev64(v.p.v4subdomain, v.zone))
return v, nil
}
diff --git a/plugin/v64dns/v64dns_policy.go b/plugin/v64dns/v64dns_policy.go
index 4065d57..64c074a 100644
--- a/plugin/v64dns/v64dns_policy.go
+++ b/plugin/v64dns/v64dns_policy.go
@@ -19,7 +19,8 @@ type Policy struct {
v4subdomain string
v6subdomain string
ipEmbed bool
- maxLen int //解析链最大长度
+ maxLen int //解析链最大长度
+ dmChange bool //是否切换域名
}
// expobject 代表了每个实验对象
@@ -222,7 +223,7 @@ func (v V64dns) ResponseCNAME(msg *dns.Msg, sip net.IP) *dns.Msg {
maskPart += qs + "."
case 2:
subdomain = qs
- newsubdomain = v.changeSubDomain(qs)
+ newsubdomain = v.changeSubDomain(qs, v.p.dmChange)
case 5:
expid = qs
case 4:
diff --git a/plugin/v64dns/v64dnsutil.go b/plugin/v64dns/v64dnsutil.go
index 3941ab6..7d30c82 100644
--- a/plugin/v64dns/v64dnsutil.go
+++ b/plugin/v64dns/v64dnsutil.go
@@ -116,7 +116,12 @@ func (v V64dns) MatchType(s string) int {
return 3
}
-func (v V64dns) changeSubDomain(s string) string {
+// 切换域名
+func (v V64dns) changeSubDomain(s string, changeFlag bool) string {
+ // 切换标志位为false,直接返回原域名
+ if !changeFlag {
+ return s
+ }
switch s {
case v.p.v4subdomain:
return v.p.v6subdomain