Browse Source

DNS解析时,TCP 从哪个 IP 进来,就从哪个 IP 解析

pull/1077/head
karl 1 year ago
parent
commit
92bfb95bcf
  1. 7
      chain.go
  2. 6
      dns.go

7
chain.go

@ -212,6 +212,13 @@ func (c *Chain) dialWithOptions(ctx context.Context, network, address string, op
IP: ip,
}
}
} else if inboundIP != nil && strings.ToLower(network) == "udp" {
ip := inboundIP.(net.IP)
if !ip.IsLoopback() && !ip.IsPrivate() {
d.LocalAddr = &net.UDPAddr{
IP: ip,
}
}
}
return d.DialContext(ctx, network, ipAddr)
}

6
dns.go

@ -83,7 +83,11 @@ func (h *dnsHandler) Handle(conn net.Conn) {
if resolver == nil {
resolver = defaultResolver
}
reply, err := resolver.Exchange(context.Background(), b[:n])
ctx := context.Background()
if inboundAddr, ok := conn.LocalAddr().(*net.TCPAddr); ok {
ctx = context.WithValue(ctx, "InboundIP", inboundAddr.IP)
}
reply, err := resolver.Exchange(ctx, b[:n])
if err != nil {
log.Logf("[dns] %s - %s exchange: %v", conn.RemoteAddr(), conn.LocalAddr(), err)
return

Loading…
Cancel
Save