mirror of
https://gitea.elkins.co/Networking/ccl.git
synced 2025-03-09 12:41:40 -05:00
Overhaul nsupdate
ffs why is this so hard
This commit is contained in:
parent
03aa6c8d1b
commit
558bf7d66a
@ -141,10 +141,15 @@ func (c *Container) killDnsForward(name string, rrtype uint16) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Container) doDnsForward(rr string) error {
|
||||
rr_parsed, err := dns.NewRR(rr)
|
||||
if err != nil {
|
||||
return err
|
||||
func (c *Container) doDnsForward(rr []string) error {
|
||||
rrs := make([]dns.RR, len(rr))
|
||||
|
||||
for i := range rr {
|
||||
rr_parsed, err := dns.NewRR(rr[i])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
rrs[i] = rr_parsed
|
||||
}
|
||||
|
||||
cli := c.makeDnsClient()
|
||||
@ -156,11 +161,11 @@ func (c *Container) doDnsForward(rr string) error {
|
||||
// Update the forward record
|
||||
msg := new(dns.Msg)
|
||||
msg.SetUpdate(dn)
|
||||
msg.Ns = append(msg.Ns, rr_parsed)
|
||||
msg.Ns = append(msg.Ns, rrs...)
|
||||
if c.TSIGName != "" {
|
||||
msg.SetTsig(c.TSIGName, dns.HmacSHA256, 300, time.Now().Unix())
|
||||
}
|
||||
_, _, err = cli.Exchange(msg, c.DnsServer)
|
||||
_, _, err := cli.Exchange(msg, c.DnsServer)
|
||||
return err
|
||||
}
|
||||
|
||||
@ -185,81 +190,78 @@ func (c *Container) NsUpdateCommands() cmd.Set {
|
||||
}
|
||||
|
||||
// prepare update commands
|
||||
cmds := []cmd.Command{}
|
||||
cmds := []cmd.Command{
|
||||
cmd.NewFunc("kill_fwd_6", func() error {
|
||||
return c.killDnsForward(dn, dns.TypeAAAA)
|
||||
}),
|
||||
cmd.NewFunc("kill_fwd_4", func() error {
|
||||
return c.killDnsForward(dn, dns.TypeA)
|
||||
}),
|
||||
}
|
||||
|
||||
// gather all ip addresses to be mapped to this name
|
||||
ip6s := []net.IP{}
|
||||
ip4s := []net.IP{}
|
||||
for i := range c.Networks {
|
||||
n := &c.Networks[i]
|
||||
|
||||
ip6s := []net.IP{}
|
||||
if n.IPv6Address != nil && !n.IPv6Address.IsUnspecified() {
|
||||
ip6s = append(ip6s, n.IPv6Address)
|
||||
}
|
||||
if n.IPv6Addresses != nil {
|
||||
ip6s = append(ip6s, n.IPv6Addresses...)
|
||||
}
|
||||
|
||||
f_6 := func() error {
|
||||
for _, a6 := range ip6s {
|
||||
if err := c.doDnsReverse(a6.String(), dn, dns.TypeAAAA); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if err := c.killDnsForward(dn, dns.TypeAAAA); err != nil {
|
||||
return err
|
||||
}
|
||||
for _, a6 := range ip6s {
|
||||
aaaa := dns.AAAA{
|
||||
Hdr: dns.RR_Header{
|
||||
Name: dn,
|
||||
Rrtype: dns.TypeAAAA,
|
||||
Class: dns.ClassINET,
|
||||
Ttl: 7200,
|
||||
},
|
||||
AAAA: a6,
|
||||
}
|
||||
if err := c.doDnsForward(aaaa.String()); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
cmds = append(cmds, cmd.NewFunc("nsupate6", f_6))
|
||||
|
||||
ip4s := []net.IP{}
|
||||
if n.IPv4Address != nil && !n.IPv4Address.IsUnspecified() {
|
||||
ip4s = append(ip4s, n.IPv4Address)
|
||||
}
|
||||
if n.IPv4Addresses != nil {
|
||||
ip4s = append(ip4s, n.IPv4Addresses...)
|
||||
}
|
||||
|
||||
f_4 := func() error {
|
||||
for _, a4 := range ip4s {
|
||||
if err := c.doDnsReverse(a4.String(), dn, dns.TypeA); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if err := c.killDnsForward(dn, dns.TypeA); err != nil {
|
||||
return err
|
||||
}
|
||||
for _, a4 := range ip4s {
|
||||
a := dns.A{
|
||||
Hdr: dns.RR_Header{
|
||||
Name: dn,
|
||||
Rrtype: dns.TypeA,
|
||||
Class: dns.ClassINET,
|
||||
Ttl: 7200,
|
||||
},
|
||||
A: a4,
|
||||
}
|
||||
if err := c.doDnsForward(a.String()); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
cmds = append(cmds, cmd.NewFunc("nsupate4", f_4))
|
||||
}
|
||||
|
||||
// make reverse commands
|
||||
for _, i := range ip6s {
|
||||
f_6 := func() error {
|
||||
return c.doDnsReverse(i.String(), dn, dns.TypeAAAA)
|
||||
}
|
||||
cmds = append(cmds, cmd.NewFunc("reverse_dns_6"+i.String(), f_6))
|
||||
}
|
||||
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))
|
||||
}
|
||||
|
||||
// make foreard commands
|
||||
rrs := []string{}
|
||||
for _, i := range ip6s {
|
||||
aaaa := dns.AAAA{
|
||||
Hdr: dns.RR_Header{
|
||||
Name: dn,
|
||||
Rrtype: dns.TypeAAAA,
|
||||
Class: dns.ClassINET,
|
||||
Ttl: 7200,
|
||||
},
|
||||
AAAA: i,
|
||||
}
|
||||
rrs = append(rrs, aaaa.String())
|
||||
}
|
||||
for _, i := range ip4s {
|
||||
a := dns.A{
|
||||
Hdr: dns.RR_Header{
|
||||
Name: dn,
|
||||
Rrtype: dns.TypeA,
|
||||
Class: dns.ClassINET,
|
||||
Ttl: 7200,
|
||||
},
|
||||
A: i,
|
||||
}
|
||||
rrs = append(rrs, a.String())
|
||||
}
|
||||
fdns := func() error {
|
||||
return c.doDnsForward(rrs)
|
||||
}
|
||||
cmds = append(cmds, cmd.NewFunc("forward_dns", fdns))
|
||||
|
||||
return c.newCommandSet("NSUPDATE", cmds)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user