diff --git a/xCAT-server/lib/xcat/plugins/ddns.pm b/xCAT-server/lib/xcat/plugins/ddns.pm index f1af338c8..73d1f79a4 100644 --- a/xCAT-server/lib/xcat/plugins/ddns.pm +++ b/xCAT-server/lib/xcat/plugins/ddns.pm @@ -443,18 +443,17 @@ sub process_request { if ($net and $net->{nameservers}) { my $valid = 0; - my @myips; - my @myipsd = xCAT::NetworkUtils->my_ip_facing($net->{net}); - my $myipsd_l = @myipsd; - unless ($myipsd[0]) { @myips = @myipsd[ 1 .. ($myipsd_l - 1) ]; } foreach (split /,/, $net->{nameservers}) { chomp $_; - foreach my $myip (@myips) { - if (($_ eq $myip) || ($_ eq '') || ($_ eq $sitens)) - { - $valid += 1; - } + # my_ip_facing() only returns addresses on the interface directly + # facing this network, so a nameserver that is a local address on + # another (routed) interface was wrongly treated as external. + # thishostisnot() recognizes any local address; keep the existing + # and site-nameserver special cases. + if (!xCAT::NetworkUtils->thishostisnot($_) || $_ eq '' || $_ eq $sitens) + { + $valid += 1; } } unless ($valid > 0)