Compare commits
3 Commits
511fae1dc6
...
03b3375f8c
| Author | SHA1 | Date | |
|---|---|---|---|
| 03b3375f8c | |||
| 81ce0257c4 | |||
| f6b13f423a |
25
README.md
25
README.md
@@ -0,0 +1,25 @@
|
||||
A plugin to override A and AAAA records with a custom value.
|
||||
I made this to override the public IP address of my server with its VPN IP address.
|
||||
|
||||
There is probably a better way to do this, but I couldn't find it.
|
||||
|
||||
# Usage
|
||||
|
||||
Add this to your `plugin.cfg`:
|
||||
```
|
||||
override:git.kapelle.org/niklas/coredns-override
|
||||
```
|
||||
|
||||
In your `Corefile`:
|
||||
```
|
||||
. {
|
||||
override {
|
||||
12.34.56.78 10.0.0.1
|
||||
98.76.54.32 10.0.0.2
|
||||
}
|
||||
|
||||
forward . 1.1.1.1
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -3,12 +3,9 @@ package override
|
||||
import (
|
||||
"net"
|
||||
|
||||
clog "github.com/coredns/coredns/plugin/pkg/log"
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
var log = clog.NewWithPlugin("overide")
|
||||
|
||||
type Rule struct {
|
||||
Search net.IP
|
||||
Override net.IP
|
||||
@@ -22,6 +19,18 @@ type ResponseWrapper struct {
|
||||
func (r *ResponseWrapper) WriteMsg(res *dns.Msg) error {
|
||||
for _, r := range r.Rules {
|
||||
for _, rr := range res.Answer {
|
||||
overideRR(r, rr)
|
||||
}
|
||||
|
||||
for _, rr := range res.Extra {
|
||||
overideRR(r, rr)
|
||||
}
|
||||
}
|
||||
|
||||
return r.ResponseWriter.WriteMsg(res)
|
||||
}
|
||||
|
||||
func overideRR(r Rule, rr dns.RR) {
|
||||
if rr.Header().Rrtype == dns.TypeA {
|
||||
a := rr.(*dns.A)
|
||||
if a.A.Equal(r.Search) {
|
||||
@@ -33,10 +42,6 @@ func (r *ResponseWrapper) WriteMsg(res *dns.Msg) error {
|
||||
a.AAAA = r.Override
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return r.ResponseWriter.WriteMsg(res)
|
||||
}
|
||||
|
||||
func (r *ResponseWrapper) Write(buf []byte) (int, error) {
|
||||
|
||||
26
setup.go
26
setup.go
@@ -6,8 +6,11 @@ import (
|
||||
"github.com/coredns/caddy"
|
||||
"github.com/coredns/coredns/core/dnsserver"
|
||||
"github.com/coredns/coredns/plugin"
|
||||
clog "github.com/coredns/coredns/plugin/pkg/log"
|
||||
)
|
||||
|
||||
var log = clog.NewWithPlugin("overide")
|
||||
|
||||
func init() {
|
||||
plugin.Register("override", setup)
|
||||
}
|
||||
@@ -31,10 +34,25 @@ func setup(c *caddy.Controller) error {
|
||||
func parseRules(c *caddy.Controller) ([]Rule, error) {
|
||||
var rules []Rule
|
||||
|
||||
rules = append(rules, Rule{
|
||||
Search: net.ParseIP("45.9.63.244"),
|
||||
Override: net.ParseIP("10.0.0.1"),
|
||||
})
|
||||
for c.Next() {
|
||||
for c.NextBlock() {
|
||||
searchIP := net.ParseIP(c.Val())
|
||||
if searchIP == nil {
|
||||
return nil, c.Errf("invalid search IP: %s", c.Val())
|
||||
}
|
||||
|
||||
if !c.NextArg() {
|
||||
return nil, c.ArgErr()
|
||||
}
|
||||
|
||||
overrideIP := net.ParseIP(c.Val())
|
||||
if overrideIP == nil {
|
||||
return nil, c.Errf("invalid override IP: %s", c.Val())
|
||||
}
|
||||
|
||||
rules = append(rules, Rule{Search: searchIP, Override: overrideIP})
|
||||
}
|
||||
}
|
||||
|
||||
return rules, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user