diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh index fd721e74..f979b59b 100755 --- a/modules.d/40network/ifup.sh +++ b/modules.d/40network/ifup.sh @@ -108,6 +108,9 @@ do_static() { if strglobin $ip '*:*:*'; then # note no ip addr flush for ipv6 ip addr add $ip/$mask ${srv:+peer $srv} dev $netif + echo 0 > /proc/sys/net/ipv6/conf/$netif/forwarding + echo 1 > /proc/sys/net/ipv6/conf/$netif/accept_ra + echo 1 > /proc/sys/net/ipv6/conf/$netif/accept_redirects wait_for_ipv6_dad $netif else if command -v arping2 >/dev/null; then diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh index 75051544..71a665cd 100755 --- a/modules.d/40network/net-lib.sh +++ b/modules.d/40network/net-lib.sh @@ -654,6 +654,7 @@ wait_for_ipv6_dad_link() { while [ $cnt -lt $timeout ]; do [ -z "$(ip -6 addr show dev "$1" scope link tentative)" ] \ + && [ -n "$(ip -6 route list proto ra dev "$1" | grep ^default)" ] \ && return 0 [ -n "$(ip -6 addr show dev "$1" scope link dadfailed)" ] \ && return 1 @@ -671,6 +672,7 @@ wait_for_ipv6_dad() { while [ $cnt -lt $timeout ]; do [ -z "$(ip -6 addr show dev "$1" tentative)" ] \ + && [ -n "$(ip -6 route list proto ra dev "$1" | grep ^default)" ] \ && return 0 [ -n "$(ip -6 addr show dev "$1" dadfailed)" ] \ && return 1 @@ -688,7 +690,7 @@ wait_for_ipv6_auto() { while [ $cnt -lt $timeout ]; do [ -z "$(ip -6 addr show dev "$1" tentative)" ] \ - && [ -n "$(ip -6 route list proto ra dev "$1")" ] \ + && [ -n "$(ip -6 route list proto ra dev "$1" | grep ^default)" ] \ && return 0 sleep 0.1 cnt=$(($cnt+1))