Skip to content

[Feature Request] Tun 模式并启用 auto_redirect 时,希望增加一个选项用于控制 DNS 劫持范围 #3921

@daiyeqi

Description

@daiyeqi

在 Tun 模式并开启 auto_redirect 时,sing-box 会自动创建 nftables 规则,对 DNS 流量(TCP/UDP 53 端口)进行劫持。

目前规则会匹配来源 IP 属于以下集合的流量:

  • inet4_local_address_set
  • inet6_local_address_set

sing-box 自动生成的规则类似:

ip saddr @inet4_local_address_set meta l4proto { tcp, udp } th dport 53 dnat ip to ...

当前行为

inet4_local_address_set 和 inet6_local_address_set 是 sing-box 自动创建并填充的集合,其中不仅包含 loopback 地址,还包含当前机器检测到的局域网网段。

set inet4_local_address_set {
    type ipv4_addr
    flags interval
    elements = {
        127.0.0.0/8,
        172.19.0.0/30,
        192.168.X.0/24
    }
}

set inet6_local_address_set {
    type ipv6_addr
    flags interval
    elements = {
        ::1,
        240e:XXXX::/64,
        fdfe:dcba:9876::/126
    }
}

因此,当该设备作为旁路由使用时,来自局域网的 53 普通流量请求也会被自动劫持。

在某些使用场景中,希望只劫持 本机发出的 DNS 请求,而不希望影响局域网设备转发来的的 53 端口流量。
当前的实现会同时匹配:

  • 本机流量
  • 局域网流量
    这在网关或旁路由场景下可能不是期望行为。

期望功能

希望能够增加一个可选配置,用于控制 DNS 劫持的范围,例如只劫持 本机 DNS 请求。
新增一个类似选项:

auto_redirect_dns_local_only: true

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions