v2fly / v2ray-core

A platform for building proxies to bypass network restrictions.
https://v2fly.org
MIT License
29.49k stars 4.66k forks source link

TCP:// 格式的 DNS 服务器无法正常匹配路由 #1143

Closed digglife closed 3 years ago

digglife commented 3 years ago

你正在使用哪个版本的 V2Ray?

V2Ray 4.40.1 (V2Fly, a community-driven edition of V2Ray.) Custom (go1.16.5 linux/arm64)
A unified platform for anti-censorship.

你的使用场景是什么?

在 DNS 服务器配置中,使用 tcp://host:port 以实现 DNS Over TCP,同时通过路由转发 DNS 流量。

当值为 tcp://host:port 的形式,如 tcp://8.8.8.8:53,V2Ray 会使用 DNS over TCP 进行查询,可使用非标准端口。(4.40.0+)

你看到的异常现象是什么?

针对 tcp://8.8.8.8:53 的路由无法正常匹配生效。

比如,即便我在路由中有一条规则针对 8.8.8.8 的 流量走代理 Outbound,此路由也会被忽略。

你期待看到的正常表现是怎样的?

针对 DNS 的路由能正常匹配。

请附上你的配置

以下配置经过简化,但测试过可以重现问题。

{
    "log": {
        "loglevel": "debug"
    },
    "dns": {
        "servers": [
            "tcp://8.8.8.8:53"
        ]
    },
    "routing": {
        "domainStrategy": "IPOnDemand",
        "rules": [
            {
                "type": "field",
                "ip": [
                    "8.8.8.8"
                ],
                "outboundTag": "proxy"
            }
        ]
    },
    "inbounds": [
        {
            "listen": "0.0.0.0",
            "port": 10080,
            "protocol": "socks",
            "settings": {
                "auth": "noauth",
                "udp": false
            },
            "streamSettings": {
                "sockopt": {}
            },
            "sniffing": {
                "enabled": true,
                "destOverride": [
                    "http",
                    "tls"
                ]
            }
        }
    ],
    "outbounds": [
        {
            "protocol": "freedom",
            "settings": {
                "domainStrategy": "UseIP"
            },
            "streamSettings": {
                "sockopt": {
                    "mark": 255
                }
            },
            "tag": "direct"
        },
        {
            "protocol": "vmess",
            "settings": {
                "vnext": [
                    {
                        "address": "xxx.xxx.xxx.xxx",
                        "port": 8888,
                        "users": [
                            {
                                "id": "uuid",
                                "alterId": 32,
                                "security": "auto",
                                "level": 1
                            }
                        ]
                    }
                ]
            },
            "streamSettings": {
                "sockopt": {
                    "mark": 255
                }
            },
            "tag": "proxy"
        }
    ]
}

服务端配置:

本问题与服务端无关。

客户端配置:

本问题与客户端配置无关

请附上出错时软件输出的错误日志

8.8.8.8 未匹配到任何路由。

2021/07/16 04:18:04 [Info] [2378305334] proxy/socks: TCP Connect request to tcp:108.160.170.33:80
2021/07/16 04:18:04 [Info] [2378305334] app/dispatcher: sniffed domain: www.google.com
2021/07/16 04:18:04 [Debug] app/dns: domain www.google.com will use the first DNS: [TCP//8.8.8.8:53]
2021/07/16 04:18:04 [Debug] app/dns: TCP//8.8.8.8:53 querying DNS for: www.google.com.
2021/07/16 04:18:04 [Info] app/dispatcher: default route for tcp:8.8.8.8:53
Loyalsoldier commented 3 years ago

Fixed by #1144