mirror of
https://gitea.elkins.co/Networking/ccl.git
synced 2025-03-09 20:51:39 -05:00
nsupdate: support multiple ips per network
This commit is contained in:
parent
90b4603229
commit
463a4890b5
@ -2,6 +2,7 @@ package container
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -194,11 +195,27 @@ func (c *Container) NsUpdateCommands() cmd.Set {
|
|||||||
// prepare update commands
|
// prepare update commands
|
||||||
cmds := []cmd.Command{}
|
cmds := []cmd.Command{}
|
||||||
|
|
||||||
// TODO: also iterate over c.IPv6Addresses, if it ever works
|
|
||||||
for i := range c.Networks {
|
for i := range c.Networks {
|
||||||
n := &c.Networks[i]
|
n := &c.Networks[i]
|
||||||
if n.IPv6.Bool && n.IPv6Address != nil && !n.IPv6Address.IsUnspecified() {
|
|
||||||
|
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 {
|
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{
|
aaaa := dns.AAAA{
|
||||||
Hdr: dns.RR_Header{
|
Hdr: dns.RR_Header{
|
||||||
Name: dn,
|
Name: dn,
|
||||||
@ -206,24 +223,35 @@ func (c *Container) NsUpdateCommands() cmd.Set {
|
|||||||
Class: dns.ClassINET,
|
Class: dns.ClassINET,
|
||||||
Ttl: 7200,
|
Ttl: 7200,
|
||||||
},
|
},
|
||||||
AAAA: n.IPv6Address,
|
AAAA: a6,
|
||||||
}
|
|
||||||
|
|
||||||
if err := c.doDnsReverse(aaaa.AAAA.String(), dn, dns.TypeAAAA); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := c.killDnsForward(dn, dns.TypeAAAA); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
if err := c.doDnsForward(aaaa.String()); err != nil {
|
if err := c.doDnsForward(aaaa.String()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
cmds = append(cmds, cmd.NewFunc("nsupate6", f_6))
|
cmds = append(cmds, cmd.NewFunc("nsupate6", f_6))
|
||||||
}
|
|
||||||
|
ip4s := []net.IP{}
|
||||||
if n.IPv4Address != nil && !n.IPv4Address.IsUnspecified() {
|
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 {
|
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{
|
a := dns.A{
|
||||||
Hdr: dns.RR_Header{
|
Hdr: dns.RR_Header{
|
||||||
Name: dn,
|
Name: dn,
|
||||||
@ -231,22 +259,15 @@ func (c *Container) NsUpdateCommands() cmd.Set {
|
|||||||
Class: dns.ClassINET,
|
Class: dns.ClassINET,
|
||||||
Ttl: 7200,
|
Ttl: 7200,
|
||||||
},
|
},
|
||||||
A: n.IPv4Address,
|
A: a4,
|
||||||
}
|
|
||||||
|
|
||||||
if err := c.doDnsReverse(a.A.String(), dn, dns.TypeA); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := c.killDnsForward(dn, dns.TypeA); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
if err := c.doDnsForward(a.String()); err != nil {
|
if err := c.doDnsForward(a.String()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
cmds = append(cmds, cmd.NewFunc("nsupate4", f_4))
|
cmds = append(cmds, cmd.NewFunc("nsupate4", f_4))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return c.newCommandSet("NSUPDATE", cmds)
|
return c.newCommandSet("NSUPDATE", cmds)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user