mirror of
https://gitea.elkins.co/Networking/ccl.git
synced 2025-03-09 20:51:39 -05:00
Yet another nsupdate overhaul
cannot seem to figure this out. still not really working right.
This commit is contained in:
parent
bea6d8f980
commit
cbcfeef9e1
@ -52,11 +52,15 @@ func (c *Container) killDnsReverse(ip string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// This is the same code for ipv4 or ipv6 so factor it out
|
// This is the same code for ipv4 or ipv6 so factor it out
|
||||||
func (c *Container) doDnsReverse(ip string, dn string, rrtype uint16) error {
|
func (c *Container) doDnsReverse(ips []net.IP, dn string, rrtype uint16) error {
|
||||||
rv, err := dns.ReverseAddr(ip)
|
rips := make([]string, len(ips))
|
||||||
|
for i := range ips {
|
||||||
|
rv, err := dns.ReverseAddr(ips[i].String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
rips[i] = rv
|
||||||
|
}
|
||||||
|
|
||||||
cli := c.makeDnsClient()
|
cli := c.makeDnsClient()
|
||||||
|
|
||||||
@ -84,19 +88,29 @@ func (c *Container) doDnsReverse(ip string, dn string, rrtype uint16) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// map key is SOA
|
||||||
|
messages := map[string]*dns.Msg{}
|
||||||
|
|
||||||
|
for i := range rips {
|
||||||
// Determine SOA of reverse zone
|
// Determine SOA of reverse zone
|
||||||
msg = new(dns.Msg)
|
msg = new(dns.Msg)
|
||||||
msg.SetQuestion(rv, dns.TypeSOA)
|
msg.SetQuestion(rips[i], dns.TypeSOA)
|
||||||
resp, _, err = cli.Exchange(msg, c.DnsServer)
|
resp, _, err = cli.Exchange(msg, c.DnsServer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
soa := resp.Ns[0].Header().Name
|
soa := resp.Ns[0].Header().Name
|
||||||
|
|
||||||
|
if messages[soa] == nil {
|
||||||
|
msg := new(dns.Msg)
|
||||||
|
msg.SetUpdate(soa)
|
||||||
|
messages[soa] = msg
|
||||||
|
}
|
||||||
|
|
||||||
// Update the reverse record
|
// Update the reverse record
|
||||||
ptr := dns.PTR{
|
ptr := dns.PTR{
|
||||||
Hdr: dns.RR_Header{
|
Hdr: dns.RR_Header{
|
||||||
Name: rv,
|
Name: rips[i],
|
||||||
Rrtype: dns.TypePTR,
|
Rrtype: dns.TypePTR,
|
||||||
Class: dns.ClassINET,
|
Class: dns.ClassINET,
|
||||||
Ttl: 7200,
|
Ttl: 7200,
|
||||||
@ -104,14 +118,27 @@ func (c *Container) doDnsReverse(ip string, dn string, rrtype uint16) error {
|
|||||||
Ptr: dn,
|
Ptr: dn,
|
||||||
}
|
}
|
||||||
|
|
||||||
msg = new(dns.Msg)
|
messages[soa].Ns = append(messages[soa].Ns, &ptr)
|
||||||
msg.SetUpdate(soa)
|
}
|
||||||
msg.Ns = append(msg.Ns, &ptr)
|
|
||||||
|
// execute the messages
|
||||||
|
errs := make([]error, len(messages))
|
||||||
|
j := 0
|
||||||
|
for _, msg := range messages {
|
||||||
if c.TSIGName != "" {
|
if c.TSIGName != "" {
|
||||||
msg.SetTsig(c.TSIGName, dns.HmacSHA256, 300, time.Now().Unix())
|
msg.SetTsig(c.TSIGName, dns.HmacSHA256, 300, time.Now().Unix())
|
||||||
}
|
}
|
||||||
_, _, err = cli.Exchange(msg, c.DnsServer)
|
_, _, errs[j] = cli.Exchange(msg, c.DnsServer)
|
||||||
|
j += 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// check for errors
|
||||||
|
for _, err := range errs {
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Container) killDnsForward(name string, rrtype uint16) error {
|
func (c *Container) killDnsForward(name string, rrtype uint16) error {
|
||||||
@ -219,18 +246,13 @@ func (c *Container) NsUpdateCommands() cmd.Set {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// make reverse commands
|
// make reverse commands
|
||||||
for _, i := range ip6s {
|
rdns := func() error {
|
||||||
f_6 := func() error {
|
if err := c.doDnsReverse(ip6s, dn, dns.TypeAAAA); err != nil {
|
||||||
return c.doDnsReverse(i.String(), dn, dns.TypeAAAA)
|
return err
|
||||||
}
|
}
|
||||||
cmds = append(cmds, cmd.NewFunc("reverse_dns_6"+i.String(), f_6))
|
return c.doDnsReverse(ip4s, dn, dns.TypeA)
|
||||||
}
|
|
||||||
for _, i := range ip4s {
|
|
||||||
f_4 := func() error {
|
|
||||||
return c.doDnsReverse(i.String(), dn, dns.TypeAAAA)
|
|
||||||
}
|
|
||||||
cmds = append(cmds, cmd.NewFunc("reverse_dns_4"+i.String(), f_4))
|
|
||||||
}
|
}
|
||||||
|
cmds = append(cmds, cmd.NewFunc("reverse_dns", rdns))
|
||||||
|
|
||||||
// make foreard commands
|
// make foreard commands
|
||||||
rrs := []string{}
|
rrs := []string{}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user