@@ -231,14 +231,25 @@ func readDnsInfo(ifName string) (DNSInfo, error) {
231231 return dnsInfo , fmt .Errorf ("[net] Console output doesn't have any lines" )
232232 }
233233
234+ dnsServerFound := false
234235 for _ , line := range lineArr {
235236 if strings .Contains (line , dnsServersStr ) {
236237 dnsServerSplit := strings .Split (line , colonDelimiter )
237238 if len (dnsServerSplit ) > 1 {
239+ dnsServerFound = true
238240 dnsServerSplit [1 ] = strings .TrimSpace (dnsServerSplit [1 ])
239241 dnsInfo .Servers = append (dnsInfo .Servers , dnsServerSplit [1 ])
240242 }
241- } else if strings .Contains (line , dnsDomainStr ) {
243+ } else if ! strings .Contains (line , colonDelimiter ) && dnsServerFound {
244+ dnsServer := strings .TrimSpace (line )
245+ dnsInfo .Servers = append (dnsInfo .Servers , dnsServer )
246+ } else {
247+ dnsServerFound = false
248+ }
249+ }
250+
251+ for _ , line := range lineArr {
252+ if strings .Contains (line , dnsDomainStr ) {
242253 dnsDomainSplit := strings .Split (line , colonDelimiter )
243254 if len (dnsDomainSplit ) > 1 {
244255 dnsInfo .Suffix = strings .TrimSpace (dnsDomainSplit [1 ])
@@ -292,10 +303,23 @@ func (nm *networkManager) applyIPConfig(extIf *externalInterface, targetIf *net.
292303}
293304
294305func applyDnsConfig (extIf * externalInterface , ifName string ) error {
295- var err error
306+ var (
307+ setDnsList string
308+ err error
309+ )
310+
311+ if extIf != nil {
312+ for _ , server := range extIf .DNSInfo .Servers {
313+ if net .ParseIP (server ).To4 () == nil {
314+ log .Errorf ("[net] Invalid dns ip %s." , server )
315+ continue
316+ }
317+
318+ buf := fmt .Sprintf ("--set-dns=%s" , server )
319+ setDnsList = setDnsList + " " + buf
320+ }
296321
297- if extIf != nil && len (extIf .DNSInfo .Servers ) > 0 {
298- cmd := fmt .Sprintf ("systemd-resolve --interface=%s --set-dns=%s" , ifName , extIf .DNSInfo .Servers [0 ])
322+ cmd := fmt .Sprintf ("systemd-resolve --interface=%s%s" , ifName , setDnsList )
299323 _ , err = platform .ExecuteCommand (cmd )
300324 if err != nil {
301325 return err
@@ -375,6 +399,9 @@ func (nm *networkManager) connectExternalInterface(extIf *externalInterface, nwI
375399 log .Printf ("[net] Failed to save IP configuration for interface %v: %v." , hostIf .Name , err )
376400 }
377401
402+ /*
403+ If custom dns server is updated, VM needs reboot for the change to take effect.
404+ */
378405 isGreaterOrEqualUbuntu17 := isGreaterOrEqaulUbuntuVersion (ubuntuVersion17 )
379406 if isGreaterOrEqualUbuntu17 {
380407 log .Printf ("[net] Saving dns config from %v" , extIf .Name )
0 commit comments