fcdns 0.3.13 → 0.3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +11 -10
- package/lib/cli.js +7 -2
- package/lib/cli.js.map +1 -1
- package/lib/hostname-list.js +20 -0
- package/lib/hostname-list.js.map +1 -0
- package/lib/router.js +44 -29
- package/lib/router.js.map +1 -1
- package/lib/server.js +7 -6
- package/lib/server.js.map +1 -1
- package/lib/utils/map-file.js.map +1 -1
- package/package.json +17 -17
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [0.3.16](https://github.com/BlackGlory/fcdns/compare/v0.3.15...v0.3.16) (2022-07-25)
|
|
6
|
+
|
|
7
|
+
### [0.3.15](https://github.com/BlackGlory/fcdns/compare/v0.3.14...v0.3.15) (2022-04-16)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* hostname blacklist ([0e21a21](https://github.com/BlackGlory/fcdns/commit/0e21a214c13633ee4a3b2fe6353ae97d72f3fa65))
|
|
13
|
+
|
|
14
|
+
### [0.3.14](https://github.com/BlackGlory/fcdns/compare/v0.3.13...v0.3.14) (2022-04-16)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* add hostname blacklist ([f196de1](https://github.com/BlackGlory/fcdns/commit/f196de13e742935ccdf4f67e1b54f73b057e15e8))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Bug Fixes
|
|
23
|
+
|
|
24
|
+
* make hostname list files optional ([ab2352f](https://github.com/BlackGlory/fcdns/commit/ab2352ff55dd05f947fa8eedd9dc6706e36c67ad))
|
|
25
|
+
|
|
5
26
|
### [0.3.13](https://github.com/BlackGlory/fcdns/compare/v0.3.12...v0.3.13) (2022-04-01)
|
|
6
27
|
|
|
7
28
|
### [0.3.12](https://github.com/BlackGlory/fcdns/compare/v0.3.11...v0.3.12) (2022-03-26)
|
package/README.md
CHANGED
|
@@ -21,6 +21,7 @@ Options:
|
|
|
21
21
|
--port <port> (default: "53")
|
|
22
22
|
--ip-whitelist <filename> (default: "ip-whitelist.txt")
|
|
23
23
|
--hostname-whitelist <filename> (default: "hostname-whitelist.txt")
|
|
24
|
+
--hostname-blacklist <filename> (default: "hostname-blacklist.txt")
|
|
24
25
|
--route-cache <filename> (default: "route.txt")
|
|
25
26
|
--test-cache <filename> (default: "test.txt")
|
|
26
27
|
--test-timeout <ms> (default: "200")
|
|
@@ -38,7 +39,7 @@ fcdns \
|
|
|
38
39
|
```
|
|
39
40
|
|
|
40
41
|
## 原理
|
|
41
|
-

|
|
42
43
|
|
|
43
44
|
## 必要条件
|
|
44
45
|
使用fcdns需要指定3个服务器地址, 1份IP地址白名单, 1份主机名白名单.
|
|
@@ -114,6 +115,9 @@ IPv6地址范围示例:
|
|
|
114
115
|
### 主机名白名单(hostname whitelist)
|
|
115
116
|
主机名白名单用于强制使某些主机名在解析时使用不可信DNS服务器, 其优先级高于fcdns里的其他规则.
|
|
116
117
|
|
|
118
|
+
### 主机名黑名单(hostname blacklist)
|
|
119
|
+
主机名白名单用于强制使某些主机名在解析时使用可信DNS服务器, 其优先级低于白名单, 高于fcdns里的其他规则.
|
|
120
|
+
|
|
117
121
|
#### 文件格式
|
|
118
122
|
白名单是一个文本文件, 以行为分隔符存储主机名模式.
|
|
119
123
|
主机名模式使用`*`作为通配符, 可以匹配任意个字符.
|
|
@@ -170,17 +174,14 @@ fcdns的内存缓存受V8引擎的实现限制, 且缓存是只增不减的.
|
|
|
170
174
|
如果有非常大量完全不同域名的查询, 则内存缓存可能导致内存占用增加, 但在大部分场景下应该无需担心.
|
|
171
175
|
|
|
172
176
|
## 针对fcdns的攻击
|
|
173
|
-
### DNS
|
|
177
|
+
### 以黑名单/白名单形式污染DNS服务器
|
|
174
178
|
禁止向非DNS服务器发送DNS数据包将会破坏fcdns的投毒测试功能.
|
|
175
179
|
|
|
176
|
-
###
|
|
177
|
-
禁止发送ping(echo request)或丢弃reply(echo reply)将会破坏fcdns的投毒测试功能.
|
|
178
|
-
|
|
179
|
-
### 无差别污染
|
|
180
|
+
### 无差别污染主机名
|
|
180
181
|
劫持所有DNS响应将会破坏fcdns的投毒测试功能.
|
|
181
182
|
|
|
182
|
-
###
|
|
183
|
-
|
|
183
|
+
### 随机投毒
|
|
184
|
+
随机投毒将会使fcdns生成错误的缓存记录.
|
|
184
185
|
|
|
185
|
-
|
|
186
|
-
|
|
186
|
+
### 禁止ping
|
|
187
|
+
禁止发送ping(echo request)或丢弃reply(echo reply)将会破坏fcdns的投毒测试功能.
|
package/lib/cli.js
CHANGED
|
@@ -5,7 +5,7 @@ const commander_1 = require("commander");
|
|
|
5
5
|
const server_1 = require("./server");
|
|
6
6
|
const router_1 = require("./router");
|
|
7
7
|
const ip_whitelist_1 = require("./ip-whitelist");
|
|
8
|
-
const
|
|
8
|
+
const hostname_list_1 = require("./hostname-list");
|
|
9
9
|
const tester_1 = require("./tester");
|
|
10
10
|
const create_dns_resolver_1 = require("./utils/create-dns-resolver");
|
|
11
11
|
const errors_1 = require("@blackglory/errors");
|
|
@@ -21,6 +21,7 @@ commander_1.program
|
|
|
21
21
|
.option('--port <port>', '', '53')
|
|
22
22
|
.option('--ip-whitelist <filename>', '', 'ip-whitelist.txt')
|
|
23
23
|
.option('--hostname-whitelist <filename>', '', 'hostname-whitelist.txt')
|
|
24
|
+
.option('--hostname-blacklist <filename>', '', 'hostname-blacklist.txt')
|
|
24
25
|
.option('--route-cache <filename>', '', 'route.txt')
|
|
25
26
|
.option('--test-cache <filename>', '', 'test.txt')
|
|
26
27
|
.option('--test-timeout <ms>', '', '200')
|
|
@@ -35,12 +36,14 @@ commander_1.program
|
|
|
35
36
|
});
|
|
36
37
|
const untrustedResolver = (0, create_dns_resolver_1.createDNSResolver)(options.untrustedServer);
|
|
37
38
|
const ipWhitelist = await ip_whitelist_1.IPWhitelist.create(options.ipWhitelistFilename);
|
|
38
|
-
const hostnameWhitelist = await
|
|
39
|
+
const hostnameWhitelist = await hostname_list_1.HostnameList.create(options.hostnameWhitelistFilename);
|
|
40
|
+
const hostnameBlacklist = await hostname_list_1.HostnameList.create(options.hostnameBlacklistFilename);
|
|
39
41
|
const router = await router_1.Router.create({
|
|
40
42
|
tester,
|
|
41
43
|
untrustedResolver,
|
|
42
44
|
ipWhitelist,
|
|
43
45
|
hostnameWhitelist,
|
|
46
|
+
hostnameBlacklist,
|
|
44
47
|
cacheFilename: options.routeCacheFilename,
|
|
45
48
|
looseMode: options.looseMode
|
|
46
49
|
});
|
|
@@ -68,6 +71,7 @@ function getOptions() {
|
|
|
68
71
|
const port = Number.parseInt(opts.port, 10);
|
|
69
72
|
const ipWhitelistFilename = opts.ipWhitelist;
|
|
70
73
|
const hostnameWhitelistFilename = opts.hostnameWhitelist;
|
|
74
|
+
const hostnameBlacklistFilename = opts.hostnameBlacklist;
|
|
71
75
|
const routeCacheFilename = opts.routeCache;
|
|
72
76
|
const testCacheFilename = opts.testCache;
|
|
73
77
|
(0, errors_1.assert)(/^\d+$/.test(opts.testTimeout), 'The parameter test timeout must be integer');
|
|
@@ -81,6 +85,7 @@ function getOptions() {
|
|
|
81
85
|
port,
|
|
82
86
|
ipWhitelistFilename,
|
|
83
87
|
hostnameWhitelistFilename,
|
|
88
|
+
hostnameBlacklistFilename,
|
|
84
89
|
routeCacheFilename,
|
|
85
90
|
testCacheFilename,
|
|
86
91
|
testTimeout,
|
package/lib/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA,yCAAmC;AACnC,qCAAsC;AACtC,qCAAiC;AACjC,iDAA4C;AAC5C,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA,yCAAmC;AACnC,qCAAsC;AACtC,qCAAiC;AACjC,iDAA4C;AAC5C,mDAA8C;AAC9C,qCAAiC;AACjC,oEAA8D;AAC9D,+CAA2C;AAC3C,+CAA8E;AAC9E,gEAA0D;AAE1D,mBAAO;KACJ,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC;KACrC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;KAC3C,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC;KACnD,MAAM,CAAC,wBAAwB,EAAE,EAAE,CAAC;KACpC,MAAM,CAAC,6BAA6B,EAAE,EAAE,CAAC;KACzC,MAAM,CAAC,2BAA2B,EAAE,EAAE,CAAC;KACvC,MAAM,CAAC,eAAe,EAAE,EAAE,EAAE,IAAI,CAAC;KACjC,MAAM,CAAC,2BAA2B,EAAE,EAAE,EAAE,kBAAkB,CAAC;KAC3D,MAAM,CAAC,iCAAiC,EAAE,EAAE,EAAE,wBAAwB,CAAC;KACvE,MAAM,CAAC,iCAAiC,EAAE,EAAE,EAAE,wBAAwB,CAAC;KACvE,MAAM,CAAC,0BAA0B,EAAE,EAAE,EAAE,WAAW,CAAC;KACnD,MAAM,CAAC,yBAAyB,EAAE,EAAE,EAAE,UAAU,CAAC;KACjD,MAAM,CAAC,qBAAqB,EAAE,EAAE,EAAE,KAAK,CAAC;KACxC,MAAM,CAAC,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC;KACnC,MAAM,CAAC,cAAc,CAAC;KACtB,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,MAAM,GAAG,MAAM,eAAM,CAAC,MAAM,CAAC;QACjC,MAAM,EAAE,OAAO,CAAC,UAAU;QAC1B,OAAO,EAAE,OAAO,CAAC,WAAW;QAC5B,aAAa,EAAE,OAAO,CAAC,iBAAiB;KACzC,CAAC,CAAA;IACF,MAAM,iBAAiB,GAAG,IAAA,uCAAiB,EAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IACpE,MAAM,WAAW,GAAG,MAAM,0BAAW,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACzE,MAAM,iBAAiB,GAAG,MAAM,4BAAY,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;IACtF,MAAM,iBAAiB,GAAG,MAAM,4BAAY,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;IACtF,MAAM,MAAM,GAAG,MAAM,eAAM,CAAC,MAAM,CAAC;QACjC,MAAM;QACN,iBAAiB;QACjB,WAAW;QACX,iBAAiB;QACjB,iBAAiB;QACjB,aAAa,EAAE,OAAO,CAAC,kBAAkB;QACzC,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,IAAI,qBAAM,CAAC;QACxB,KAAK,EAAE,OAAO,CAAC,QAAQ;QACvB,SAAS,EAAE,IAAI,gCAAiB,CAAC,EAAE,CAAC;KACrC,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,IAAA,mCAAe,EAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAChE,MAAM,aAAa,GAAG,IAAA,mCAAe,EAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IAE5D,IAAA,oBAAW,EAAC;QACV,MAAM;QACN,MAAM;QACN,aAAa;QACb,eAAe;QACf,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAA;AACJ,CAAC,CAAC;KACD,KAAK,EAAE,CAAA;AAEV,SAAS,UAAU;IACjB,MAAM,IAAI,GAAG,mBAAO,CAAC,IAAI,EAAE,CAAA;IAE3B,MAAM,UAAU,GAAW,IAAI,CAAC,UAAU,CAAA;IAC1C,MAAM,eAAe,GAAW,IAAI,CAAC,eAAe,CAAA;IACpD,MAAM,aAAa,GAAW,IAAI,CAAC,aAAa,CAAA;IAEhD,IAAA,eAAM,EAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,oCAAoC,CAAC,CAAA;IACrE,MAAM,IAAI,GAAW,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAEnD,MAAM,mBAAmB,GAAW,IAAI,CAAC,WAAW,CAAA;IACpD,MAAM,yBAAyB,GAAW,IAAI,CAAC,iBAAiB,CAAA;IAChE,MAAM,yBAAyB,GAAW,IAAI,CAAC,iBAAiB,CAAA;IAChE,MAAM,kBAAkB,GAAW,IAAI,CAAC,UAAU,CAAA;IAClD,MAAM,iBAAiB,GAAW,IAAI,CAAC,SAAS,CAAA;IAEhD,IAAA,eAAM,EAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,4CAA4C,CAAC,CAAA;IACpF,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;IAEzD,MAAM,QAAQ,GAAU,IAAA,4BAAa,EAAC,IAAI,CAAC,GAAG,EAAE,oBAAK,CAAC,IAAI,CAAC,CAAA;IAC3D,MAAM,SAAS,GAAY,IAAI,CAAC,SAAS,CAAA;IAEzC,OAAO;QACL,UAAU;QACV,eAAe;QACf,aAAa;QACb,IAAI;QACJ,mBAAmB;QACnB,yBAAyB;QACzB,yBAAyB;QACzB,kBAAkB;QAClB,iBAAiB;QACjB,WAAW;QACX,QAAQ;QACR,SAAS;KACV,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HostnameList = void 0;
|
|
4
|
+
const hostname_list_file_1 = require("./utils/hostname-list-file");
|
|
5
|
+
const extra_filesystem_1 = require("extra-filesystem");
|
|
6
|
+
class HostnameList {
|
|
7
|
+
constructor(patterns) {
|
|
8
|
+
this.patterns = patterns;
|
|
9
|
+
}
|
|
10
|
+
static async create(filename) {
|
|
11
|
+
await (0, extra_filesystem_1.ensureFile)(filename);
|
|
12
|
+
const patterns = await (0, hostname_list_file_1.readHostnameListFile)(filename);
|
|
13
|
+
return new HostnameList(patterns);
|
|
14
|
+
}
|
|
15
|
+
includes(hostname) {
|
|
16
|
+
return this.patterns.some(x => x.match(hostname));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.HostnameList = HostnameList;
|
|
20
|
+
//# sourceMappingURL=hostname-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hostname-list.js","sourceRoot":"","sources":["../src/hostname-list.ts"],"names":[],"mappings":";;;AAAA,kEAAgE;AAEhE,uDAA6C;AAE7C,MAAa,YAAY;IACvB,YAA4B,QAA2B;QAA3B,aAAQ,GAAR,QAAQ,CAAmB;IAAG,CAAC;IAE3D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAgB;QAClC,MAAM,IAAA,6BAAU,EAAC,QAAQ,CAAC,CAAA;QAC1B,MAAM,QAAQ,GAAG,MAAM,IAAA,yCAAoB,EAAC,QAAQ,CAAC,CAAA;QAErD,OAAO,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC;IAED,QAAQ,CAAC,QAAgB;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;IACnD,CAAC;CACF;AAbD,oCAaC"}
|
package/lib/router.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Router = exports.
|
|
3
|
+
exports.Router = exports.RouteResult = void 0;
|
|
4
4
|
const map_file_1 = require("./utils/map-file");
|
|
5
5
|
const resolve_a_1 = require("./utils/resolve-a");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
const extra_promise_1 = require("extra-promise");
|
|
7
|
+
var RouteResult;
|
|
8
|
+
(function (RouteResult) {
|
|
9
|
+
RouteResult[RouteResult["UntrustedServer"] = 0] = "UntrustedServer";
|
|
10
|
+
RouteResult[RouteResult["TrustedServer"] = 1] = "TrustedServer";
|
|
11
|
+
RouteResult[RouteResult["Unresolved"] = 2] = "Unresolved";
|
|
12
|
+
})(RouteResult = exports.RouteResult || (exports.RouteResult = {}));
|
|
11
13
|
class Router {
|
|
12
|
-
constructor(cacheFilename, cache, looseMode, tester, untrustedResolver, ipWhitelist, hostnameWhitelist) {
|
|
14
|
+
constructor(cacheFilename, cache, looseMode, tester, untrustedResolver, ipWhitelist, hostnameWhitelist, hostnameBlacklist) {
|
|
13
15
|
this.cacheFilename = cacheFilename;
|
|
14
16
|
this.cache = cache;
|
|
15
17
|
this.looseMode = looseMode;
|
|
@@ -17,53 +19,63 @@ class Router {
|
|
|
17
19
|
this.untrustedResolver = untrustedResolver;
|
|
18
20
|
this.ipWhitelist = ipWhitelist;
|
|
19
21
|
this.hostnameWhitelist = hostnameWhitelist;
|
|
22
|
+
this.hostnameBlacklist = hostnameBlacklist;
|
|
23
|
+
this.route = (0, extra_promise_1.reusePendingPromise)(async (hostname) => {
|
|
24
|
+
const result = await this.routeByLocal(hostname);
|
|
25
|
+
if (result) {
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
if (this.looseMode) {
|
|
30
|
+
queueMicrotask(() => this.routeByNetwork(hostname));
|
|
31
|
+
return RouteResult.UntrustedServer;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return await this.routeByNetwork(hostname);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
});
|
|
20
38
|
}
|
|
21
39
|
static async create(options) {
|
|
22
40
|
const tester = options.tester;
|
|
23
41
|
const untrustedResolver = options.untrustedResolver;
|
|
24
42
|
const ipWhitelist = options.ipWhitelist;
|
|
25
43
|
const hostnameWhitelist = options.hostnameWhitelist;
|
|
44
|
+
const hostnameBlacklist = options.hostnameBlacklist;
|
|
26
45
|
const cacheFilename = options.cacheFilename;
|
|
27
46
|
const looseMode = options.looseMode;
|
|
28
47
|
const cache = await (0, map_file_1.readMapFile)(cacheFilename);
|
|
29
48
|
await (0, map_file_1.writeMapFile)(cacheFilename, cache);
|
|
30
|
-
return new Router(cacheFilename, cache, looseMode, tester, untrustedResolver, ipWhitelist, hostnameWhitelist);
|
|
49
|
+
return new Router(cacheFilename, cache, looseMode, tester, untrustedResolver, ipWhitelist, hostnameWhitelist, hostnameBlacklist);
|
|
31
50
|
}
|
|
32
|
-
async
|
|
51
|
+
async routeByLocal(hostname) {
|
|
33
52
|
if (this.inHostnameWhitelist(hostname))
|
|
34
|
-
return
|
|
35
|
-
if (this.
|
|
53
|
+
return RouteResult.UntrustedServer;
|
|
54
|
+
if (this.inHostnameBlacklist(hostname))
|
|
55
|
+
return RouteResult.TrustedServer;
|
|
56
|
+
if (this.cache.has(hostname))
|
|
36
57
|
return this.cache.get(hostname);
|
|
37
|
-
|
|
38
|
-
else {
|
|
39
|
-
if (this.looseMode) {
|
|
40
|
-
queueMicrotask(() => this.getTargetWithoutCache(hostname));
|
|
41
|
-
return Target.Untrusted;
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
return await this.getTargetWithoutCache(hostname);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
58
|
+
return null;
|
|
47
59
|
}
|
|
48
|
-
async
|
|
60
|
+
async routeByNetwork(hostname) {
|
|
49
61
|
if (await this.tester.isPoisoned(hostname)) {
|
|
50
|
-
this.setCache(hostname,
|
|
51
|
-
return
|
|
62
|
+
this.setCache(hostname, RouteResult.TrustedServer);
|
|
63
|
+
return RouteResult.TrustedServer;
|
|
52
64
|
}
|
|
53
65
|
else {
|
|
54
66
|
const addresses = await (0, resolve_a_1.resolveA)(this.untrustedResolver, hostname);
|
|
55
67
|
if (addresses.length > 0) {
|
|
56
68
|
if (this.inIPWhitelist(addresses)) {
|
|
57
|
-
this.setCache(hostname,
|
|
58
|
-
return
|
|
69
|
+
this.setCache(hostname, RouteResult.UntrustedServer);
|
|
70
|
+
return RouteResult.UntrustedServer;
|
|
59
71
|
}
|
|
60
72
|
else {
|
|
61
|
-
this.setCache(hostname,
|
|
62
|
-
return
|
|
73
|
+
this.setCache(hostname, RouteResult.TrustedServer);
|
|
74
|
+
return RouteResult.TrustedServer;
|
|
63
75
|
}
|
|
64
76
|
}
|
|
65
77
|
else {
|
|
66
|
-
return
|
|
78
|
+
return RouteResult.Unresolved;
|
|
67
79
|
}
|
|
68
80
|
}
|
|
69
81
|
}
|
|
@@ -73,6 +85,9 @@ class Router {
|
|
|
73
85
|
inHostnameWhitelist(hostname) {
|
|
74
86
|
return this.hostnameWhitelist.includes(hostname);
|
|
75
87
|
}
|
|
88
|
+
inHostnameBlacklist(hostname) {
|
|
89
|
+
return this.hostnameBlacklist.includes(hostname);
|
|
90
|
+
}
|
|
76
91
|
setCache(hostname, result) {
|
|
77
92
|
this.cache.set(hostname, result);
|
|
78
93
|
(0, map_file_1.appendMapFile)(this.cacheFilename, hostname, result);
|
package/lib/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":";;;AAIA,8CAA0E;AAC1E,gDAA2C;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/lib/server.js
CHANGED
|
@@ -33,6 +33,7 @@ const return_style_1 = require("return-style");
|
|
|
33
33
|
const ms_1 = __importDefault(require("ms"));
|
|
34
34
|
const chalk_1 = __importDefault(require("chalk"));
|
|
35
35
|
const record_types_1 = require("./record-types");
|
|
36
|
+
const extra_promise_1 = require("extra-promise");
|
|
36
37
|
function startServer({ logger, port, router, trustedServer, untrustedServer }) {
|
|
37
38
|
const server = dns.createServer();
|
|
38
39
|
server.on('error', console.error);
|
|
@@ -42,14 +43,14 @@ function startServer({ logger, port, router, trustedServer, untrustedServer }) {
|
|
|
42
43
|
res.header.rcode = dns.consts.NAME_TO_RCODE.SERVFAIL;
|
|
43
44
|
const startTime = Date.now();
|
|
44
45
|
const question = req.question[0];
|
|
45
|
-
var [err,
|
|
46
|
+
var [err, result] = await (0, return_style_1.getErrorResultAsync)(() => router.route(question.name));
|
|
46
47
|
if (err) {
|
|
47
48
|
logger.error(`${formatHostname(question.name)} ${err}`, getElapsed(startTime));
|
|
48
49
|
logger.trace(`response: ${JSON.stringify(res)}`);
|
|
49
50
|
return res.send();
|
|
50
51
|
}
|
|
51
|
-
logger.debug(`${formatHostname(question.name)} ${router_1.
|
|
52
|
-
const server =
|
|
52
|
+
logger.debug(`${formatHostname(question.name)} ${router_1.RouteResult[result]}`, getElapsed(startTime));
|
|
53
|
+
const server = result === router_1.RouteResult.TrustedServer ? trustedServer : untrustedServer;
|
|
53
54
|
var [err, response] = await (0, return_style_1.getErrorResultAsync)(() => resolve(server, question));
|
|
54
55
|
if (err) {
|
|
55
56
|
logger.error(`${formatHostname(question.name)} ${err}`, getElapsed(startTime));
|
|
@@ -63,10 +64,10 @@ function startServer({ logger, port, router, trustedServer, untrustedServer }) {
|
|
|
63
64
|
logger.trace(`response: ${JSON.stringify(res)}`);
|
|
64
65
|
res.send();
|
|
65
66
|
});
|
|
66
|
-
|
|
67
|
+
server.serve(port);
|
|
67
68
|
}
|
|
68
69
|
exports.startServer = startServer;
|
|
69
|
-
|
|
70
|
+
const resolve = (0, extra_promise_1.reusePendingPromise)(function (server, question) {
|
|
70
71
|
return new Promise((resolve, reject) => {
|
|
71
72
|
let response;
|
|
72
73
|
const request = dns.Request({
|
|
@@ -97,7 +98,7 @@ function resolve(server, question) {
|
|
|
97
98
|
});
|
|
98
99
|
request.send();
|
|
99
100
|
});
|
|
100
|
-
}
|
|
101
|
+
});
|
|
101
102
|
function formatHostname(hostname) {
|
|
102
103
|
return chalk_1.default.cyan(hostname);
|
|
103
104
|
}
|
package/lib/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-file.js","sourceRoot":"","sources":["../../src/utils/map-file.ts"],"names":[],"mappings":";;;AAAA,0EAA8E;AAC9E,2BAAmC;AACnC,uDAA6C;AAEtC,KAAK,UAAU,WAAW,CAC/B,QAAgB;IAEhB,MAAM,IAAA,6BAAU,EAAC,QAAQ,CAAC,CAAA;IAC1B,MAAM,IAAI,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACjD,MAAM,OAAO,GAA8B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;SACxD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAE1B,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;AACzB,CAAC;AAVD,kCAUC;AAEM,KAAK,UAAU,YAAY,
|
|
1
|
+
{"version":3,"file":"map-file.js","sourceRoot":"","sources":["../../src/utils/map-file.ts"],"names":[],"mappings":";;;AAAA,0EAA8E;AAC9E,2BAAmC;AACnC,uDAA6C;AAEtC,KAAK,UAAU,WAAW,CAC/B,QAAgB;IAEhB,MAAM,IAAA,6BAAU,EAAC,QAAQ,CAAC,CAAA;IAC1B,MAAM,IAAI,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACjD,MAAM,OAAO,GAA8B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;SACxD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAE1B,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;AACzB,CAAC;AAVD,kCAUC;AAEM,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,GAAc;IAEd,MAAM,IAAI,GAAG,IAAI,2BAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC3B,OAAO,EAAE;SACT,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,MAAM,aAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC,CAAA;AAC3C,CAAC;AAVD,oCAUC;AAEM,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,GAAM,EACN,KAAQ;IAER,MAAM,aAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AACpE,CAAC;AAND,sCAMC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fcdns",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.16",
|
|
4
4
|
"description": "DNS relay server with fact-checking.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dns"
|
|
@@ -32,42 +32,42 @@
|
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@commitlint/cli": "^
|
|
36
|
-
"@commitlint/config-conventional": "^
|
|
35
|
+
"@commitlint/cli": "^17.0.3",
|
|
36
|
+
"@commitlint/config-conventional": "^17.0.3",
|
|
37
37
|
"@types/jest": "^27.4.1",
|
|
38
38
|
"@types/ms": "^0.7.31",
|
|
39
39
|
"@types/node": "14",
|
|
40
40
|
"@types/ping": "^0.4.1",
|
|
41
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
42
|
-
"@typescript-eslint/parser": "^5.
|
|
43
|
-
"eslint": "^8.
|
|
41
|
+
"@typescript-eslint/eslint-plugin": "^5.30.7",
|
|
42
|
+
"@typescript-eslint/parser": "^5.30.7",
|
|
43
|
+
"eslint": "^8.20.0",
|
|
44
44
|
"husky": "4",
|
|
45
|
-
"internet-number": "^3.0.
|
|
45
|
+
"internet-number": "^3.0.2",
|
|
46
46
|
"jest": "^27.5.1",
|
|
47
47
|
"npm-run-all": "^4.1.5",
|
|
48
48
|
"rimraf": "^3.0.2",
|
|
49
|
-
"standard-version": "^9.
|
|
49
|
+
"standard-version": "^9.5.0",
|
|
50
50
|
"ts-jest": "^27.1.4",
|
|
51
51
|
"tsconfig-paths": "^3.14.1",
|
|
52
52
|
"tscpaths": "^0.0.9",
|
|
53
|
-
"typescript": "^4.
|
|
53
|
+
"typescript": "^4.7.4"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"@blackglory/errors": "^2.2.1",
|
|
57
|
-
"@blackglory/go": "^1.
|
|
58
|
-
"@blackglory/types": "^1.
|
|
57
|
+
"@blackglory/go": "^1.1.1",
|
|
58
|
+
"@blackglory/types": "^1.2.1",
|
|
59
59
|
"address-range": "^0.2.9",
|
|
60
60
|
"chalk": "^4.1.2",
|
|
61
|
-
"commander": "^9.
|
|
62
|
-
"extra-filesystem": "^0.4.
|
|
63
|
-
"extra-logger": "^0.6.
|
|
64
|
-
"extra-promise": "^
|
|
65
|
-
"iterable-operator": "^1.0
|
|
61
|
+
"commander": "^9.4.0",
|
|
62
|
+
"extra-filesystem": "^0.4.4",
|
|
63
|
+
"extra-logger": "^0.6.8",
|
|
64
|
+
"extra-promise": "^2.3.0",
|
|
65
|
+
"iterable-operator": "^1.1.0",
|
|
66
66
|
"ms": "^2.1.3",
|
|
67
67
|
"native-node-dns": "0.7.6",
|
|
68
68
|
"native-node-dns-packet": "0.1.5",
|
|
69
69
|
"patch-package": "^6.4.7",
|
|
70
|
-
"ping": "^0.4.
|
|
70
|
+
"ping": "^0.4.2",
|
|
71
71
|
"return-style": "^1.0.0"
|
|
72
72
|
}
|
|
73
73
|
}
|