diff --git a/distro/arch/install b/distro/arch/install
index 26ef3d199f797e709fdad39512c454002ab5c048..e0104163c0592af516e94dfb41e4b531c00e4aed 100644
--- a/distro/arch/install
+++ b/distro/arch/install
@@ -4,12 +4,39 @@ post_install() {
   chown -R root:knot-resolver /etc/knot-resolver
 }
 
+pre_upgrade() {
+  if [ -f /lib/systemd/system/kresd.socket ] ; then
+    export UPG_DIR=%{_sysconfdir}/knot-resolver/.upgrade-4-to-5
+    mkdir -p ${UPG_DIR}
+
+    for sock in kresd.socket kresd-tls.socket kresd-webmgmt.socket kresd-doh.socket ; do
+      if systemctl is-enabled ${sock} 2>/dev/null | grep -qv masked ; then
+        systemctl show ${sock} -p Listen > ${UPG_DIR}/${sock}
+        case "$(systemctl show ${sock} -p BindIPv6Only)" in
+        *ipv6-only)
+          touch ${UPG_DIR}/${sock}.v6only
+          ;;
+        *default)
+          if cat /proc/sys/net/ipv6/bindv6only | grep -q 1 ; then
+            touch ${UPG_DIR}/${sock}.v6only
+          fi
+          ;;
+        esac
+      fi
+    done
+  fi
+}
+
 post_upgrade() {
   chown -R root:knot-resolver /etc/knot-resolver
 
-  if echo $2 | grep -q '^[0-4]'; then
-    echo -e "  Knot Resolver version 5+ uses a different configuration for network interfaces."
-    echo -e "  Please refer to https://knot-resolver.readthedocs.io/en/stable/upgrading.html"
+  export UPG_DIR=%{_sysconfdir}/knot-resolver/.upgrade-4-to-5
+  if [ -f ${UPG_DIR}/.unfinished ] ; then
+    rm -f ${UPG_DIR}/.unfinished
+    kresd -c %{_libdir}/knot-resolver/upgrade-4-to-5.lua &>/dev/null
+    echo -e "\n   !!! WARNING !!!"
+    echo -e "Knot Resolver configuration file requires manual upgrade.\n"
+    cat ${UPG_DIR}/kresd.conf.net 2>/dev/null
   fi
 }
 
diff --git a/distro/deb/knot-resolver.postinst b/distro/deb/knot-resolver.postinst
index 923ab0378635dd1d084e658388e113b39ae2f3fa..a74765ba0140d2e0294fa7c9b164110dfdb53b46 100644
--- a/distro/deb/knot-resolver.postinst
+++ b/distro/deb/knot-resolver.postinst
@@ -3,12 +3,12 @@ set -e
 
 # upgrade-4-to-5
 export UPG_DIR=/etc/knot-resolver/.upgrade-4-to-5
-if [ -d ${UPG_DIR} ] ; then
+if [ -f ${UPG_DIR}/.unfinished ] ; then
+       rm -f ${UPG_DIR}/.unfinished
        kresd -c /usr/lib/knot-resolver/upgrade-4-to-5.lua >/dev/null 2>/dev/null
        echo "\n   !!! WARNING !!!"
-       echo "Knot Resolver configuration file was automatically upgraded."
-       echo "Verify changes manually in /etc/knot-resolver/kresd.conf\n"
-       mv ${UPG_DIR} ${UPG_DIR}.bak
+       echo "Knot Resolver configuration file requires manual upgrade.\n"
+       cat ${UPG_DIR}/kresd.conf.net 2>/dev/null
 fi
 
 if [ "$1" = "configure" ]; then
diff --git a/distro/deb/knot-resolver.preinst b/distro/deb/knot-resolver.preinst
index c60b5e80473770264f5382fdce07f6fba3b267ec..62dc01849e8e2bcf2caaf62103bd3e8d2c45e86b 100644
--- a/distro/deb/knot-resolver.preinst
+++ b/distro/deb/knot-resolver.preinst
@@ -5,6 +5,7 @@ set -e
 if [ -f /lib/systemd/system/kresd.socket ] ; then
        export UPG_DIR=/etc/knot-resolver/.upgrade-4-to-5
        mkdir -p ${UPG_DIR}
+       touch ${UPG_DIR}/.unfinished
 
        for sock in kresd.socket kresd-tls.socket kresd-webmgmt.socket kresd-doh.socket ; do
                if systemctl is-enabled ${sock} 2>/dev/null | grep -qv masked ; then
diff --git a/distro/rpm/knot-resolver.spec b/distro/rpm/knot-resolver.spec
index cee182bde9182089ec6c76821553773f9d5f7f0d..c0171461e011e1ec64e2355726596c8cef0103b3 100644
--- a/distro/rpm/knot-resolver.spec
+++ b/distro/rpm/knot-resolver.spec
@@ -208,6 +208,7 @@ getent passwd knot-resolver >/dev/null || useradd -r -g knot-resolver -d %{_sysc
 if [ -f %{_unitdir}/kresd.socket ] ; then
 	export UPG_DIR=%{_sysconfdir}/knot-resolver/.upgrade-4-to-5
 	mkdir -p ${UPG_DIR}
+	touch ${UPG_DIR}/.unfinished
 
 	for sock in kresd.socket kresd-tls.socket kresd-webmgmt.socket kresd-doh.socket ; do
 		if systemctl is-enabled ${sock} 2>/dev/null | grep -qv masked ; then
@@ -230,23 +231,14 @@ fi
 
 %post
 # upgrade-4-to-5
-%if 0%{?fedora}
+%if "x%{?rhel}" == "x"
 export UPG_DIR=%{_sysconfdir}/knot-resolver/.upgrade-4-to-5
-if [ -d ${UPG_DIR} ] ; then
+if [ -f ${UPG_DIR}/.unfinished ] ; then
+	rm -f ${UPG_DIR}/.unfinished
 	kresd -c %{_libdir}/knot-resolver/upgrade-4-to-5.lua &>/dev/null
 	echo -e "\n   !!! WARNING !!!"
-	echo -e "Knot Resolver configuration file was automatically upgraded."
-	echo -e "Verify changes manually in %{_sysconfdir}/knot-resolver/kresd.conf\n"
-	mv ${UPG_DIR} ${UPG_DIR}.bak
-fi
-%endif
-%if 0%{?suse_version}
-export UPG_DIR=%{_sysconfdir}/knot-resolver/.upgrade-4-to-5
-if [ -d ${UPG_DIR} ] ; then
-	echo -e "\n   !!! WARNING !!!"
-	echo -e "Manual upgrade required, run:\n"
-	echo -e "kresd -c %{_libdir}/knot-resolver/upgrade-4-to-5.lua &>/dev/null && mv %{_sysconfdir}/knot-resolver/.upgrade-4-to-5{,.bak}"
-	echo -e "\nand verify changes manually in %{_sysconfdir}/knot-resolver/kresd.conf\n"
+	echo -e "Knot Resolver configuration file requires manual upgrade.\n"
+	cat ${UPG_DIR}/kresd.conf.net 2>/dev/null
 fi
 %endif
 
diff --git a/utils/upgrade/upgrade-4-to-5.lua.in b/utils/upgrade/upgrade-4-to-5.lua.in
index ad6c621c74c6f969f4ba55f89306156f07abf876..93f79f1fe1d966101c45553e6be4f0c574079736 100644
--- a/utils/upgrade/upgrade-4-to-5.lua.in
+++ b/utils/upgrade/upgrade-4-to-5.lua.in
@@ -1,5 +1,5 @@
 local upg_dir = '@etc_dir@/.upgrade-4-to-5'
-local out = '@etc_dir@/kresd.conf'
+local out = upg_dir..'/kresd.conf.net'
 local sockets = {
 	{ file='kresd.socket', kind='dns' },
 	{ file='kresd-tls.socket', kind='tls' },
@@ -16,10 +16,10 @@ if outfile == nil then
 	os.exit(0)  -- make no changes and exit
 end
 
-outfile:write("\n-- START OF AUTOGENERATED BLOCK (upgrade-4-to-5)\n")
-outfile:write("-- This block was automatically created during upgrade\n")
+outfile:write("-- Suggested network interface configuration\n")
 outfile:write("-- Please verify these settings match your desired configuration\n")
-outfile:write("-- See https://knot-resolver.readthedocs.io/en/stable/upgrading.html\n")
+outfile:write("-- and add them to @etc_dir@/kresd.conf\n")
+outfile:write("-- See https://knot-resolver.readthedocs.io/en/stable/upgrading.html\n\n")
 
 local function write_net_listen(addr, port, kind)
 	-- make sure (addr, port) combination is unique
@@ -79,7 +79,7 @@ for _, socket in pairs(sockets) do
 	end
 end
 
-outfile:write("-- END OF AUTOGENERATED BLOCK (upgrade-4-to-5)\n")
+outfile:write("\n")
 
 io.close(outfile)
 os.exit(0)