m/n/c/network: configure given DNS servers

Actually configure the list of statically-configured DNS servers.

Change-Id: I174be38195db4e63af2dfe7499e3e721f7b54556
Reviewed-on: https://review.monogon.dev/c/monogon/+/1524
Tested-by: Jenkins CI
Reviewed-by: Leopold Schabel <leo@monogon.tech>
diff --git a/metropolis/node/core/network/static.go b/metropolis/node/core/network/static.go
index 29e3c48..0c694e7 100644
--- a/metropolis/node/core/network/static.go
+++ b/metropolis/node/core/network/static.go
@@ -18,6 +18,7 @@
 	"source.monogon.dev/go/algorithm/toposort"
 	"source.monogon.dev/metropolis/node/core/network/dhcp4c"
 	dhcpcb "source.monogon.dev/metropolis/node/core/network/dhcp4c/callback"
+	"source.monogon.dev/metropolis/node/core/network/dns"
 	"source.monogon.dev/metropolis/pkg/logtree"
 	"source.monogon.dev/metropolis/pkg/supervisor"
 	netpb "source.monogon.dev/net/proto"
@@ -115,6 +116,18 @@
 		}
 		l.Infof("Configured interface %q", i.Name)
 	}
+	var nsIPList []net.IP
+	for _, ns := range s.StaticConfig.Nameserver {
+		nsIP := net.ParseIP(ns.Ip)
+		if nsIP == nil {
+			l.Warningf("failed to parse %q as nameserver IP", ns.Ip)
+		}
+		nsIPList = append(nsIPList, nsIP)
+	}
+	if len(nsIPList) > 0 {
+		s.ConfigureDNS(dns.NewUpstreamDirective(nsIPList))
+	}
+
 	supervisor.Signal(ctx, supervisor.SignalHealthy)
 	supervisor.Signal(ctx, supervisor.SignalDone)
 	return nil