V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Buffer2Disk
V2EX  ›  Go 编程语言

golang 如何指定一个程序内部使用的全局 dns

  •  
  •   Buffer2Disk · 2020-04-05 14:50:41 +08:00 · 2306 次点击
    这是一个创建于 1720 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,golang 如何指定一个程序内部使用的全局 dns,

    即这个 golang 程序,内部的所有网络请求全部走自己指定的 dns,不走 /etc/resolv.conf 来获取

    6 条回复    2020-04-06 23:54:36 +08:00
    junkman
        1
    junkman  
       2020-04-05 19:29:52 +08:00
    https://golang.org/pkg/net/#Dialer

    ```golang
    type Dialer struct {
    ...
    // Resolver optionally specifies an alternate resolver to use.
    Resolver *Resolver
    ...
    }
    ```

    可以在 Dialer 层设置 net.Resolver,然后再用 HTTP 包裹 Dialer,最后发起连接即可。
    你可以封装下上面的 struct,这样所有网络请求都可以走自定义的 DNS 了。
    reus
        2
    reus  
       2020-04-05 19:58:31 +08:00
    做不到,你可以放在 docker 里,然后改里面的 /etc/resolv.conf
    vus520
        3
    vus520  
       2020-04-05 21:32:29 +08:00
    如果所有的网络接口都使用一个基类,那使用 Resolver 应该是可以的。否则应该是不行的。
    Buffer2Disk
        4
    Buffer2Disk  
    OP
       2020-04-06 12:18:37 +08:00
    @reus 试了下,可以做到,不过这种方法在 windows 下无效

    https://godoc.org/net

    On Windows, the resolver always uses C library functions, such as GetAddrInfo and DnsQuery.

    ```
    dns = 1.1.1.1
    net.DefaultResolver = &net.Resolver{
    PreferGo: true,
    Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
    d := net.Dialer{
    Timeout: time.Millisecond * time.Duration(4000),
    }
    return d.DialContext(ctx, "udp", fmt.Sprintf("%s:53", dns))
    },
    }
    Mitt
        5
    Mitt  
       2020-04-06 16:31:15 +08:00
    Buffer2Disk
        6
    Buffer2Disk  
    OP
       2020-04-06 23:54:36 +08:00
    @Mitt 这个是引入了一个第三方的 dns client 了,他为了解决 windows 下用不了的问题 = =
    我只需要 Linux 下能用就行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2804 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:46 · PVG 10:46 · LAX 18:46 · JFK 21:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.