diff options
Diffstat (limited to 'plugin/bind')
-rw-r--r-- | plugin/bind/README.md | 22 | ||||
-rw-r--r-- | plugin/bind/bind.go | 11 | ||||
-rw-r--r-- | plugin/bind/bind_test.go | 30 | ||||
-rw-r--r-- | plugin/bind/setup.go | 24 |
4 files changed, 87 insertions, 0 deletions
diff --git a/plugin/bind/README.md b/plugin/bind/README.md new file mode 100644 index 000000000..57b3c1e18 --- /dev/null +++ b/plugin/bind/README.md @@ -0,0 +1,22 @@ +# bind + +*bind* overrides the host to which the server should bind. + +Normally, the listener binds to the wildcard host. However, you may force the listener to bind to +another IP instead. This directive accepts only an address, not a port. + +## Syntax + +~~~ txt +bind ADDRESS +~~~ + +**ADDRESS** is the IP address to bind to. + +## Examples + +To make your socket accessible only to that machine, bind to IP 127.0.0.1 (localhost): + +~~~ txt +bind 127.0.0.1 +~~~ diff --git a/plugin/bind/bind.go b/plugin/bind/bind.go new file mode 100644 index 000000000..bd3c32b51 --- /dev/null +++ b/plugin/bind/bind.go @@ -0,0 +1,11 @@ +// Package bind allows binding to a specific interface instead of bind to all of them. +package bind + +import "github.com/mholt/caddy" + +func init() { + caddy.RegisterPlugin("bind", caddy.Plugin{ + ServerType: "dns", + Action: setupBind, + }) +} diff --git a/plugin/bind/bind_test.go b/plugin/bind/bind_test.go new file mode 100644 index 000000000..11556f0bd --- /dev/null +++ b/plugin/bind/bind_test.go @@ -0,0 +1,30 @@ +package bind + +import ( + "testing" + + "github.com/coredns/coredns/core/dnsserver" + + "github.com/mholt/caddy" +) + +func TestSetupBind(t *testing.T) { + c := caddy.NewTestController("dns", `bind 1.2.3.4`) + err := setupBind(c) + if err != nil { + t.Fatalf("Expected no errors, but got: %v", err) + } + + cfg := dnsserver.GetConfig(c) + if got, want := cfg.ListenHost, "1.2.3.4"; got != want { + t.Errorf("Expected the config's ListenHost to be %s, was %s", want, got) + } +} + +func TestBindAddress(t *testing.T) { + c := caddy.NewTestController("dns", `bind 1.2.3.bla`) + err := setupBind(c) + if err == nil { + t.Fatalf("Expected errors, but got none") + } +} diff --git a/plugin/bind/setup.go b/plugin/bind/setup.go new file mode 100644 index 000000000..796377841 --- /dev/null +++ b/plugin/bind/setup.go @@ -0,0 +1,24 @@ +package bind + +import ( + "fmt" + "net" + + "github.com/coredns/coredns/core/dnsserver" + "github.com/coredns/coredns/plugin" + + "github.com/mholt/caddy" +) + +func setupBind(c *caddy.Controller) error { + config := dnsserver.GetConfig(c) + for c.Next() { + if !c.Args(&config.ListenHost) { + return plugin.Error("bind", c.ArgErr()) + } + } + if net.ParseIP(config.ListenHost) == nil { + return plugin.Error("bind", fmt.Errorf("not a valid IP address: %s", config.ListenHost)) + } + return nil +} |