Giter VIP home page Giter VIP logo

dns64's Introduction

dns64

DEPRECATED: This plugin has been merged upstream. Credit goes to @SuperQ.

The dns64 plugin implements the DNS64 IPv6 transition mechanism. From Wikipedia:

DNS64 describes a DNS server that when asked for a domain's AAAA records, but only finds A records, synthesizes the AAAA records from the A records.

The synthesis in only performed if the query came in via IPv6.

TODO

Not all features required by DNS64 are implemented, only basic AAAA synthesis.

  • Support other proxy protocols in the configuration file
    • Requires writing a custom parser for the proxy plugin
  • Support "mapping of separate IPv4 ranges to separate IPv6 prefixes"
  • Resolve PTR records
  • Follow CNAME records
  • Make resolver DNSSEC aware
  • Improve test coverage
  • Improve the hooking method
    • At the moment, the plugin hijacks WriteMsg and does the modifications on the message being written. This very likely can break other plugins especially plugins like DNSSEC.
    • What position should the plugin be?

Usage

The syntax has changed since 20 September 2019. "upstream" has been renamed to proxy

Translate with the well known prefix. Applies to all queries

dns64

Use a custom prefix

dns64 64:1337::/96
# Or 
dns64 {
    prefix 64:1337::/96
}

Use a reverse proxy, with a custom prefix

dns64 {
    proxy . 1.1.1.1 1.0.0.1
    prefix 64:1337::/96
}

Enable translation even if an existing AAAA record is present

dns64 {
    translateAll
}
  • prefix specifies any local IPv6 prefix to use, instead of the well known prefix (64:ff9b::/96)
  • proxy optionally specifies upstream DNS protocol addresses like the proxy plugin

See Also

RFC 6147

Installation

See CoreDNS Documentation for more information on how to include this plugin. A DNS64 example is available too.

Here's the summary:

package main

import (
	_ "github.com/coredns/coredns/core/plugin"
	_ "github.com/coredns/proxy"
	_ "github.com/serverwentdown/dns64"

	"github.com/coredns/coredns/core/dnsserver"
	"github.com/coredns/coredns/coremain"
)

var additionalDirectives = []string{
	"dns64",
	"proxy",
}

func init() {
	dnsserver.Directives = append(dnsserver.Directives, additionalDirectives...)
}

func main() {
	coremain.Run()
}

dns64's People

Contributors

ageis avatar serverwentdown avatar superq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

dns64's Issues

Build failed with recent coredns

Hi,

I'm trying to build DNS64 plugin with recent coredns code and github.com/missdeer/proxy (an updated version of github.com/coredns/proxy) in a go1.13 fresh docker env and get this error when I add DNS64 plugin :

# GO111MODULE=auto go clean -modcache && GO111MODULE=auto go mod tidy && GO111MODULE=auto go build
<...>
go: finding golang.org/x/text v0.3.2
go: finding gopkg.in/square/go-jose.v2 v2.3.1
# github.com/serverwentdown/dns64
./dns64.go:65:22: r.DNS64.Proxy.Lookup undefined (type proxy.Proxy has no field or method Lookup)
./setup.go:60:12: undefined: proxy.NewLookup
#

Beside I "generated" a go.mod for DNS64 plugin (unsure if it was necessary) :


module github.com/serverwentdown/dns64

go 1.13

replace (
        github.com/coredns/coredns v1.6.3 => /go/src/github.com/coredns/coredns
        github.com/miekg/dns v1.1.3 => github.com/miekg/dns v1.1.17
        github.com/missdeer/proxy v0.0.0-20190830011929-ab38cbb8fdfa => /go/src/github.com/missdeer/proxy
        golang.org/x/net v0.0.0-20190813000000-74dc4d7220e7 => golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7
)

require (
        github.com/caddyserver/caddy v1.0.3
        github.com/coredns/coredns v1.6.3
        github.com/dnstap/golang-dnstap v0.1.0 // indirect
        github.com/farsightsec/golang-framestream v0.0.0-20190425193708-fa4b164d59b8 // indirect
        github.com/klauspost/cpuid v1.2.1 // indirect
        github.com/mholt/certmagic v0.7.0 // indirect
        github.com/miekg/dns v1.1.17
        github.com/missdeer/proxy v0.0.0-20190830011929-ab38cbb8fdfa
        github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 // indirect
        github.com/prometheus/procfs v0.0.4 // indirect
        golang.org/x/net v0.0.0-20190912160710-24e19bdeb0f2 // indirect
        golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8 // indirect
        google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51 // indirect
        google.golang.org/grpc v1.23.1 // indirect
)


I may have done something wrong (I am totally unfamiliar/new to Go..).

Except for DNS64 plugin everything compiles and works (coredns & the external proxy plugin). But I don't know how to solve this DNS64 error neither exactly where it's coming from.. maybe the proxy plugin or coredns version I'm using are too recent ? I just don't know.

Some help would be nice. Thanks.

inclusion in coredns

I think this is a good plugin to have by default. @fturib (I think?) expressed interest as well. Could you possibly work together and push for upstream inclusion?

Feature request; Force A (ipv4) external queries

Feature Request

I am testing Kubernetes ipv6-only in a ipv4-only environment (company IT network). A problem is that when a process in the ipv6 space makes a AAAA query the DNS may actually get a AAAA response and (correctly) return it to the process.

The problem is that my ipv6 test environment does not have ipv6 access to the internet for reasons out of my control.

I would like a configuration option that forces all external queries to be A (ipv4) and be translated to ipv6 using the prefix. E.g; translateAll: yes.

I have not even included CoreDNS+dns64 in my Kubernetes ipv6-only cluster yet, so if this can already be configured I apologize, but if so, please update the documentation.

In bind9 this can be done with an exclude { any; } in the dns64 configuration. As a work-around I can use a local bind9 but then I would not test the coredns dns64 plugin properly.

Build failed w/CoreDNS v1.4.0 tag

Was trying to work out a dockerfile for dns64, but hit this error:

github.com/coredns/coredns/vendor/github.com/openzipkin/zipkin-go-opentracing
github.com/coredns/coredns/plugin/whoami
github.com/mholt/caddy/onevent/hook
github.com/mholt/caddy/onevent
github.com/serverwentdown/dns64
# github.com/serverwentdown/dns64
../../serverwentdown/dns64/dns64.go:65:22: r.DNS64.Proxy.Lookup undefined (type proxy.Proxy has no field or method Lookup)
../../serverwentdown/dns64/setup.go:59:12: undefined: proxy.NewLookup
github.com/coredns/coredns/vendor/github.com/DataDog/dd-trace-go/tracer
github.com/coredns/coredns/vendor/github.com/DataDog/dd-trace-go/opentracing

How to replicate it:

FROM golang:1.12
ENV GO111MODULE=off
ENV TAG=v1.4.0
RUN mkdir -p $GOPATH/src/github.com/coredns \
 && cd $GOPATH/src/github.com/coredns/ \
 && git clone --branch ${TAG} https://github.com/coredns/coredns \
 && go get -d -v github.com/serverwentdown/dns64 \
 && cd coredns \
 && cp plugin.cfg /tmp \
 && echo dns64:github.com/serverwentdown/dns64 > plugin.cfg \
 && cat /tmp/plugin.cfg >> plugin.cfg \
 && go generate \
 && make \
 && coredns -plugins

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.