通过Cisco IPSec连接时,应用程序无法解析内部DNS条目

时间:2016-05-03 07:02:03

标签: go dns vpn

我使用Cisco IPsec连接到我的工作场所VPN。我使用OS X的原生Cisco IPSec客户端进行连接。我们有一个内部DNS服务器,用于保存内部站点的记录,例如scotty.infinidat.com。使用curl联系内部站点按预期工作。使用以下Python代码也可以:

import requests

resp = requests.get("http://www.google.com")
resp.raise_for_status()

resp = requests.get("http://scotty.infinidat.com")
resp.raise_for_status()

但是,尝试在Go中实现等效操作失败:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    _, err := http.Get("http://google.com/") // This works
    if err != nil {
        panic(fmt.Sprintf("Error contacting Google: %s", err))
    }

    _, err = http.Get("http://scotty.infinidat.com/") // This doesn't
    if err != nil {
        panic(fmt.Sprintf("Error contacting an internal site: %s", err))
    }
}

连接到VPN时运行上面的程序会产生以下输出:

panic: Error contacting internal site: Get http://scotty.infinidat.com/: dial tcp: lookup scotty.infinidat.com on 10.135.1.1:53: no such host

goroutine 1 [running]:
panic(0x290ca0, 0xc82010a490)
        /usr/local/Cellar/go/1.6.2/libexec/src/runtime/panic.go:481 +0x3e6
main.main()
        /Users/roeyd/src/go/src/webtest/main.go:16 +0x2af

10.135.1.1是我本地网络的DNS服务器。据我所知,OS X上不提供纯Go DNS解析器。通过设置GODEBUG=netdns=cgo强制Go使用cgo DNS解析器没有任何区别。

2 个答案:

答案 0 :(得分:0)

也许您可以使用完整的DNS库来首先解析IP:

 package main

 import (
    "log"

    "github.com/miekg/dns"
 )

 func main() {
    c := dns.Client{}
    m := dns.Msg{}
    m.SetQuestion("scotty.infinidat.com.", dns.TypeA)
    r, t, err := c.Exchange(&m, "10.135.1.1:53")
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Took %v", t)
    for _, ans := range r.Answer {
        Arecord := ans.(*dns.A)
        log.Printf("%s", Arecord.A)
    }
 }

答案 1 :(得分:0)

可能你已经这样做了,但是在执行dig scotty.infinidat.com时从我这边做的我没有记录(与你的结果相符):

$ dig scotty.infinidat.com

; <<>> DiG 9.8.3-P1 <<>> scotty.infinidat.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 53313
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;scotty.infinidat.com.          IN      A

;; AUTHORITY SECTION:
infinidat.com.          155     IN      SOA     ns1.dnsimple.com. admin.dnsimple.com. 1438782431 86400 7200 604800 300

;; Query time: 234 msec
;; SERVER: 10.132.0.1#53(10.132.0.1)
;; WHEN: Sun Jul 30 21:37:14 2017
;; MSG SIZE  rcvd: 93

因此,如果www.google.com正在运行,那么更改可能与您的DNS / ZONE更相关。