Skip to content

Commit 48e0ee2

Browse files
fix for configuring multiple dns server on azure0 interface (#769)
* fix for configuring multiple dns server on azure0 interface * updated log * added a comment
1 parent 2bc809e commit 48e0ee2

File tree

1 file changed

+31
-4
lines changed

1 file changed

+31
-4
lines changed

network/network_linux.go

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

294305
func 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

Comments
 (0)