Merge pull request #2052 from bergware/master

Networking: fix DNS entries get removed when configuring interface other then et0
This commit is contained in:
tom mortensen
2025-02-27 12:25:00 -08:00
committed by GitHub
4 changed files with 42 additions and 36 deletions
+1 -1
View File
@@ -85,7 +85,7 @@ $service = exec('pgrep --ns $$ libvirt') ? _('VM manager') : '';
$service .= exec('pgrep --ns $$ docker') ? ($service ? ' '._('and').' ' : '')._('Docker service') : '';
// eth0 port status
$no_eth0 = exec("ip -br link show eth0 | grep -om1 ' DOWN '");
$no_eth0 = exec("ip -br link show eth0 | awk '{print \$2;exit}'")=='DOWN';
// get VLAN interfaces
$vlan_eth0 = $sort_eth0 = [];
+1 -1
View File
@@ -28,7 +28,7 @@ if (strpos($locked,'bond')===0 || strpos($locked,'br')===0) {
[$master_ethX,$root] = my_explode(' ',$locked);
$reason = _('member of')." $master_ethX ("._('see interface')." $root)";
$class = 'green-text';
} elseif (exec("ip -br link show ethX | grep -om1 ' DOWN '")) {
} elseif (exec("ip -br link show ethX | awk '{print \$2;exit}'")=='DOWN') {
$reason = _("shutdown")." ("._("inactive").")";
$class = 'blue-text';
$cmd = 'Up';
+35 -9
View File
@@ -79,6 +79,7 @@
# Adapted by Bergware for use in Unraid OS - February 2025
# - added metric value to interface IP assignment
# - fixed DNS entries get removed when configuring interface other then eth0
###########
# LOGGING #
@@ -478,6 +479,30 @@ if_up(){
fi
fi
fi
# only execute dns assignment for main interface
if [[ -n $RENEW || ${1//[^0-9]} == 0 ]]; then
# default resolv.conf file
RESOLV=/etc/resolv.conf
echo -n >$RESOLV
echo -n >$RESOLV.head
echo -n >$RESOLV.tail
if [[ $DHCP_KEEPRESOLV == yes ]]; then
echo "# Generated by rc.inet1" >>$RESOLV
[[ -n $DNS_SERVER1 ]] && echo "nameserver $(unzero $DNS_SERVER1) # eth0:v4" >>$RESOLV
[[ -n $DNS_SERVER2 ]] && echo "nameserver $(unzero $DNS_SERVER2) # eth0:v4" >>$RESOLV
[[ -n $DNS_SERVER3 ]] && echo "nameserver $(unzero $DNS_SERVER3) # eth0:v4" >>$RESOLV
[[ -n $DNS_SERVER4 ]] && echo "nameserver $(unzero $DNS_SERVER4) # eth0:v4" >>$RESOLV
[[ $DHCP6_KEEPRESOLV == no ]] && cp -f $RESOLV $RESOLV.head
fi
if [[ $DHCP6_KEEPRESOLV == yes ]]; then
[[ $DHCP_KEEPRESOLV == no ]] && echo "# Generated by rc.inet1" >>$RESOLV
[[ -n $DNS6_SERVER1 ]] && echo "nameserver $(unzero6 $DNS6_SERVER1) # eth0:v6" >>$RESOLV
[[ -n $DNS6_SERVER2 ]] && echo "nameserver $(unzero6 $DNS6_SERVER2) # eth0:v6" >>$RESOLV
[[ -n $DNS6_SERVER3 ]] && echo "nameserver $(unzero6 $DNS6_SERVER3) # eth0:v6" >>$RESOLV
[[ -n $DNS6_SERVER4 ]] && echo "nameserver $(unzero6 $DNS6_SERVER4) # eth0:v6" >>$RESOLV
[[ $DHCP_KEEPRESOLV == no ]] && cp -f $RESOLV $RESOLV.tail
fi
fi
# loop thru main and VLAN interfaces
for ((j=0;j<${VLANS[$i]:-1};j++)); do
[[ $j -eq 0 ]] && IFACE=$1 || IFACE=$1.${VLANID[$i,$j]}
@@ -499,24 +524,24 @@ if_up(){
run ip link set $IFACE up
fi
# set interface address
[[ $i -eq 0 && $j -eq 0 ]] && MAIN=1 || MAIN=
DNS=${IFACE//[^0-9]}
if [[ $IP == ipv4 ]]; then
[[ $j -eq 0 ]] && DHCP=${USE_DHCP[$i]} || DHCP=${USE_DHCP[$i,$j]}
[[ $j -eq 0 ]] && DHCP_METRIC=${METRIC[$i]} || DHCP_METRIC=${METRIC[$i,$j]}
[[ -n $MAIN ]] && DHCP_KEEP_RESOLV=$DHCP_KEEPRESOLV || DHCP_KEEP_RESOLV=yes
[[ $DNS == 0 ]] && DHCP_KEEP_RESOLV=$DHCP_KEEPRESOLV || DHCP_KEEP_RESOLV=yes
ipaddr_up
elif [[ $IP == ipv6 ]]; then
[[ $j -eq 0 ]] && DHCP=${USE_DHCP6[$i]} || DHCP=${USE_DHCP6[$i,$j]}
[[ $j -eq 0 ]] && DHCP_METRIC=${METRIC6[$i]} || DHCP_METRIC=${METRIC6[$i,$j]}
[[ -n $MAIN ]] && DHCP_KEEP_RESOLV=$DHCP6_KEEPRESOLV || DHCP_KEEP_RESOLV=yes
[[ $DNS == 0 ]] && DHCP_KEEP_RESOLV=$DHCP6_KEEPRESOLV || DHCP_KEEP_RESOLV=yes
ipaddr_up
else
[[ $j -eq 0 ]] && DHCP=${USE_DHCP[$i]} || DHCP=${USE_DHCP[$i,$j]}
[[ $j -eq 0 ]] && DHCP6=${USE_DHCP6[$i]} || DHCP6=${USE_DHCP6[$i,$j]}
[[ $j -eq 0 ]] && DHCP_METRIC=${METRIC[$i]} || DHCP_METRIC=${METRIC[$i,$j]}
[[ $j -eq 0 ]] && DHCP6_METRIC=${METRIC6[$i]} || DHCP6_METRIC=${METRIC6[$i,$j]}
[[ -n $MAIN ]] && DHCP_KEEP_RESOLV=$DHCP_KEEPRESOLV || DHCP_KEEP_RESOLV=yes
[[ -n $MAIN ]] && DHCP6_KEEP_RESOLV=$DHCP6_KEEPRESOLV || DHCP6_KEEP_RESOLV=yes
[[ $DNS == 0 ]] && DHCP_KEEP_RESOLV=$DHCP_KEEPRESOLV || DHCP_KEEP_RESOLV=yes
[[ $DNS == 0 ]] && DHCP6_KEEP_RESOLV=$DHCP6_KEEPRESOLV || DHCP6_KEEP_RESOLV=yes
[[ -n $DHCP_METRIC ]] && METRIC_VALUE=$DHCP_METRIC || METRIC_VALUE=0
[[ -n $DHCP6_METRIC ]] && METRIC6_VALUE=$DHCP6_METRIC || METRIC6_VALUE=0
IP=ipv4
@@ -547,20 +572,21 @@ if_down(){
# macvtap interface name
VHOST=vhost${IFACE//[^0-9.]}
if [[ -e $SYSTEM/$IFACE ]]; then
DNS=${IFACE//[^0-9]}
# take down interface
if [[ $IP == ipv4 ]]; then
[[ $j -eq 0 ]] && DHCP=${USE_DHCP[$i]} || DHCP=${USE_DHCP[$i,$j]}
[[ $j -eq 0 ]] && DHCP_KEEP_RESOLV=$DHCP_KEEPRESOLV || DHCP_KEEP_RESOLV=yes
[[ $DNS == 0 ]] && DHCP_KEEP_RESOLV=$DHCP_KEEPRESOLV || DHCP_KEEP_RESOLV=yes
ipaddr_down
elif [[ $IP == ipv6 ]]; then
[[ $j -eq 0 ]] && DHCP=${USE_DHCP6[$i]} || DHCP=${USE_DHCP6[$i,$j]}
[[ $j -eq 0 ]] && DHCP_KEEP_RESOLV=$DHCP6_KEEPRESOLV || DHCP_KEEP_RESOLV=yes
[[ $DNS == 0 ]] && DHCP_KEEP_RESOLV=$DHCP6_KEEPRESOLV || DHCP_KEEP_RESOLV=yes
ipaddr_down
else
[[ $j -eq 0 ]] && DHCP=${USE_DHCP[$i]} || DHCP=${USE_DHCP[$i,$j]}
[[ $j -eq 0 ]] && DHCP6=${USE_DHCP6[$i]} || DHCP6=${USE_DHCP6[$i,$j]}
[[ -n $MAIN ]] && DHCP_KEEP_RESOLV=$DHCP_KEEPRESOLV || DHCP_KEEP_RESOLV=yes
[[ -n $MAIN ]] && DHCP6_KEEP_RESOLV=$DHCP6_KEEPRESOLV || DHCP6_KEEP_RESOLV=yes
[[ $DNS == 0 ]] && DHCP_KEEP_RESOLV=$DHCP_KEEPRESOLV || DHCP_KEEP_RESOLV=yes
[[ $DNS == 0 ]] && DHCP6_KEEP_RESOLV=$DHCP6_KEEPRESOLV || DHCP6_KEEP_RESOLV=yes
IP=ipv4
ipaddr_down
IP=ipv6
+5 -25
View File
@@ -10,11 +10,14 @@
# IFNAME[interface] to the interface's name. If IFNAME[interface] is unset
# or empty, it is assumed you're configuring eth<interface>.
#
# LimeTech - modified for Unraid OS
# Bergware - modified for Unraid OS, February 2025
# Adapted by Bergware for use in Unraid OS - December 2023
# - added functions to remove leading zeros in IPv4 and IPv6 addresses
# LimeTech - modified for Unraid OS
# Bergware - modified for Unraid OS, December 2023
# Adapted by Bergware for use in Unraid OS - February 2025
# - fixed DNS entries get removed when configuring interface other then eth0
# change this to "yes" for debugging output to stdout.
# Unfortunately, /sbin/hotplug seems to disable stdout so you'll only see debugging output when rc.inet1 is called directly.
@@ -70,29 +73,6 @@ else
DHCP6_KEEPRESOLV=yes
fi
# default resolv.conf file
RESOLV=/etc/resolv.conf
echo -n >$RESOLV
echo -n >$RESOLV.head
echo -n >$RESOLV.tail
if [[ $DHCP_KEEPRESOLV == yes ]]; then
echo "# Generated by rc.inet1" >>$RESOLV
[[ -n $DNS_SERVER1 ]] && echo "nameserver $(unzero $DNS_SERVER1) # eth0:v4" >>$RESOLV
[[ -n $DNS_SERVER2 ]] && echo "nameserver $(unzero $DNS_SERVER2) # eth0:v4" >>$RESOLV
[[ -n $DNS_SERVER3 ]] && echo "nameserver $(unzero $DNS_SERVER3) # eth0:v4" >>$RESOLV
[[ -n $DNS_SERVER4 ]] && echo "nameserver $(unzero $DNS_SERVER4) # eth0:v4" >>$RESOLV
[[ $DHCP6_KEEPRESOLV == no ]] && cp -f $RESOLV $RESOLV.head
fi
if [[ $DHCP6_KEEPRESOLV == yes ]]; then
[[ $DHCP_KEEPRESOLV == no ]] && echo "# Generated by rc.inet1" >>$RESOLV
[[ -n $DNS6_SERVER1 ]] && echo "nameserver $(unzero6 $DNS6_SERVER1) # eth0:v6" >>$RESOLV
[[ -n $DNS6_SERVER2 ]] && echo "nameserver $(unzero6 $DNS6_SERVER2) # eth0:v6" >>$RESOLV
[[ -n $DNS6_SERVER3 ]] && echo "nameserver $(unzero6 $DNS6_SERVER3) # eth0:v6" >>$RESOLV
[[ -n $DNS6_SERVER4 ]] && echo "nameserver $(unzero6 $DNS6_SERVER4) # eth0:v6" >>$RESOLV
[[ $DHCP_KEEPRESOLV == no ]] && cp -f $RESOLV $RESOLV.tail
fi
make_cfg(){
[[ -s $CFG ]] && return
for VAR in "$@"; do