Merge pull request #895 from gravitl/feature_0.12.0_host_dns

match dns to acl
This commit is contained in:
dcarns 2022-03-14 19:34:01 -04:00 committed by GitHub
commit 2e0e54879a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 17 deletions

View file

@ -1,9 +1,9 @@
package logic
import (
"fmt"
"log"
"net"
"os"
"strconv"
"strings"
"time"
@ -176,11 +176,13 @@ func GetPeerUpdate(node *models.Node) (models.PeerUpdate, error) {
// #1 Set Keepalive values: set_keepalive
// #2 Set local address: set_local - could be a LOT BETTER and fix some bugs with additional logic
// #3 Set allowedips: set_allowedips
var dns string
for _, peer := range currentPeers {
if peer.ID == node.ID {
//skip yourself
continue
}
dns = dns + fmt.Sprintf("%s %s.%s\n", peer.Address, peer.Name, peer.Network)
pubkey, err := wgtypes.ParseKey(peer.PublicKey)
if err != nil {
return models.PeerUpdate{}, err
@ -236,12 +238,7 @@ func GetPeerUpdate(node *models.Node) (models.PeerUpdate, error) {
*/
dns, err := os.ReadFile("./config/dnsconfig/netmaker.hosts")
if err != nil {
logger.Log(0, "failed to read netmaker.hosts", err.Error())
} else {
peerUpdate.DNS = dns
}
peerUpdate.DNS = dns
return peerUpdate, nil
}

View file

@ -152,6 +152,7 @@ func setPeerInfo(node *models.Node) models.Node {
peer.PublicKey = node.PublicKey
peer.Endpoint = node.Endpoint
peer.Name = node.Name
peer.Network = node.Network
peer.LocalAddress = node.LocalAddress
peer.ListenPort = node.ListenPort
peer.AllowedIPs = node.AllowedIPs

View file

@ -7,7 +7,7 @@ type PeerUpdate struct {
Network string `json:"network" bson:"network" yaml:"network"`
ServerAddrs []ServerAddr `json:"serveraddrs" bson:"serveraddrs" yaml:"serveraddrs"`
Peers []wgtypes.PeerConfig `json:"peers" bson:"peers" yaml:"peers"`
DNS []byte `json:"dns" bson:'dns" yaml:"dns"`
DNS string `json:"dns" bson:"dns" yaml:"dns"`
}
// KeyUpdate - key update struct

View file

@ -141,7 +141,7 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) {
//deal with DNS
if newNode.DNSOn != "yes" && shouldDNSChange && nodeCfg.Node.Interface != "" {
ncutils.Log("settng DNS off")
if err := removeHostDNS(ncutils.IsWindows()); err != nil {
if err := removeHostDNS(nodeCfg.Network, ncutils.IsWindows()); err != nil {
ncutils.Log("error removing netmaker profile from /etc/hosts " + err.Error())
}
// _, err := ncutils.RunCmd("/usr/bin/resolvectl revert "+nodeCfg.Node.Interface, true)
@ -201,24 +201,24 @@ func UpdatePeers(client mqtt.Client, msg mqtt.Message) {
return
}
if cfg.Node.DNSOn == "yes" {
if err := setHostDNS(peerUpdate.DNS, ncutils.IsWindows()); err != nil {
if err := setHostDNS(peerUpdate.DNS, cfg.Node.Network, ncutils.IsWindows()); err != nil {
ncutils.Log("error updating /etc/hosts " + err.Error())
return
}
} else {
if err := removeHostDNS(ncutils.IsWindows()); err != nil {
ncutils.Log("error removing netmaker profile from /etc/hosts " + err.Error())
if err := removeHostDNS(cfg.Node.Network, ncutils.IsWindows()); err != nil {
ncutils.Log("error removing profile from /etc/hosts " + err.Error())
return
}
}
}
func setHostDNS(dns []byte, windows bool) error {
func setHostDNS(dns, network string, windows bool) error {
etchosts := "/etc/hosts"
if windows {
etchosts = "c:\\windows\\system32\\drivers\\etc\\hosts"
}
dnsdata := strings.NewReader(string(dns))
dnsdata := strings.NewReader(dns)
profile, err := parser.ParseProfile(dnsdata)
if err != nil {
return err
@ -227,7 +227,7 @@ func setHostDNS(dns []byte, windows bool) error {
if err != nil {
return err
}
profile.Name = "netmaker"
profile.Name = network
profile.Status = types.Enabled
if err := hosts.ReplaceProfile(profile); err != nil {
return err
@ -238,7 +238,7 @@ func setHostDNS(dns []byte, windows bool) error {
return nil
}
func removeHostDNS(windows bool) error {
func removeHostDNS(network string, windows bool) error {
etchosts := "/etc/hosts"
if windows {
etchosts = "c:\\windows\\system32\\drivers\\etc\\hosts"
@ -247,7 +247,7 @@ func removeHostDNS(windows bool) error {
if err != nil {
return err
}
if err := hosts.RemoveProfile("netmaker"); err != nil {
if err := hosts.RemoveProfile(network); err != nil {
return err
}
if err := hosts.Flush(); err != nil {