macronut / ghostcp

GhosTCP is a program for Windows that protects the TCP connections from being interfered.
GNU Lesser General Public License v3.0
837 stars 164 forks source link

dns endless loop #35

Closed Franinc closed 1 year ago

Franinc commented 1 year ago

win10,本地用mosdns建了个DNS 转发器,发现性能挺好就改为处理本机所有dns查询,mosdns设置了gfw domin list来分流向国内/外dns的查询。

问题:当某些域名在ghostcp里,但这些域名却通过mosdns向国内dns发起查询时(也就是这些域名不在gfw domin list时),就会出现死循环。

例子:ghostcp里加入method=ttl(或w-md5)pixiv.me,浏览器访问pixiv.me时由于pixiv.me不在gfw所以mosdns往udp 119.29.29.29:53(腾讯dns)发送了查询,然后就无限循环了。

ghostcp配置:

log=3
#forward
server=127.0.0.2:53 #设置了mosdns在127.0.0.2:53提供dns服务
ttl=9
mss=512
ipv6=true
method=w-md5 #ttl也一样
pixiv.me

ghostcp日志:这两条无限循环

[pixiv.me 1]
[pixiv.me 1]
[pixiv.me 1]
[pixiv.me 1]
[pixiv.me 1]
[127.0.0.2 53]
[127.0.0.2 53]
[127.0.0.2 53]
[127.0.0.2 53]
[127.0.0.2 53]

mosdns日志:也在循环报错

2022-10-05T16:24:02.411+0800    warn    dns_handler/entry_handler.go:110    entry returned an err   {"query": "pixiv.me. IN A 32610 88 127.0.0.1", "error": "context canceled"}
2022-10-05T16:24:02.411+0800    error   dns_handler/entry_handler.go:115    entry returned an nil response  {"query": "pixiv.me. IN A 32610 88 127.0.0.1"}
2022-10-05T16:24:02.411+0800    warn    server/tcp.go:119   failed to write response    {"client": "127.0.0.1:53887", "error": "write tcp 127.0.0.2:53->127.0.0.1:53887: use of closed network connection"}
2022-10-05T16:24:02.411+0800    warn    dns_handler/entry_handler.go:110    entry returned an err   {"query": "pixiv.me. IN A 32610 36 127.0.0.1", "error": "context canceled"}
2022-10-05T16:24:02.411+0800    error   dns_handler/entry_handler.go:115    entry returned an nil response  {"query": "pixiv.me. IN A 32610 36 127.0.0.1"}
2022-10-05T16:24:02.411+0800    warn    server/tcp.go:119   failed to write response    {"client": "127.0.0.1:53829", "error": "write tcp 127.0.0.2:53->127.0.0.1:53829: use of closed network connection"}
2022-10-05T16:24:02.411+0800    warn    dns_handler/entry_handler.go:110    entry returned an err   {"query": "pixiv.me. IN A 32610 40 127.0.0.1", "error": "context canceled"}
2022-10-05T16:24:02.411+0800    error   dns_handler/entry_handler.go:115    entry returned an nil response  {"query": "pixiv.me. IN A 32610 40 127.0.0.1"}
2022-10-05T16:24:02.411+0800    warn    server/tcp.go:119   failed to write response    {"client": "127.0.0.1:53828", "error": "write tcp 127.0.0.2:53->127.0.0.1:53828: use of closed network connection"}
2022-10-05T16:24:02.411+0800    warn    dns_handler/entry_handler.go:110    entry returned an err   {"query": "pixiv.me. IN AAAA 62167 39 127.0.0.1", "error": "context canceled"}
2022-10-05T16:24:02.411+0800    error   dns_handler/entry_handler.go:115    entry returned an nil response  {"query": "pixiv.me. IN AAAA 62167 39 127.0.0.1"}
2022-10-05T16:24:02.411+0800    warn    server/tcp.go:119   failed to write response    {"client": "127.0.0.1:53827", "error": "write tcp 127.0.0.2:53->127.0.0.1:53827: use of closed network connection"}
2022-10-05T16:24:02.411+0800    warn    dns_handler/entry_handler.go:110    entry returned an err   {"query": "pixiv.me. IN A 32610 76 127.0.0.1", "error": "context canceled"}

不过我发现删除mosdns里所有国内dns,只用国外dns时(也就不分流了)就不会有死循环问题。 可惜mosdns好像不支持给不同来源提供不同规则,目前同时开了两个mosdns一个监听127.0.0.1国内外dns分流,另一个127.0.0.2只有国外dns。

ghostcp是20天前 9月15版本,另外有个小问题,release文件夹没带WinDivert.dll,启动报错

panic: Failed to load WinDivert.dll: The specified module could not be found.

goroutine 1 [running]:
syscall.(*LazyProc).mustFind(...)
        C:/Program Files/Go/src/syscall/dll_windows.go:293
syscall.(*LazyProc).Call(0xc00007f8c0, {0xc0000127c0, 0x4, 0x4})
        C:/Program Files/Go/src/syscall/dll_windows.go:309 +0x65
github.com/macronut/godivert.WinDivertOpen({0xc000012780?, 0x1e?}, 0x0, 0x1, 0x0)
        C:/Users/Frani/go/pkg/mod/github.com/macronut/godivert@v0.0.0-20200223163208-e0ee08361ab9/windivert.go:95 +0xad
github.com/macronut/ghostcp/header.TCPDaemon({0xa250f2, 0x4}, 0x0)
        D:/ghostcp-master/header/tcp.go:501 +0x30b
main.StartService()
        D:/ghostcp-master/main.go:63 +0x35d
main.main()
        D:/ghostcp-master/main.go:175 +0x554
Franinc commented 1 year ago

😥mosdns只用国外dns没能解决问题 上面pixiv.me虽然好了但查询alive.github.com时又死循环,奇怪了这两个域名在mosdns里查询流程一样的,我再改改配置找找怎么触发的

macronut commented 1 year ago

If you want to use the system default DNS, please remove the server in the configuration file.