Op Fri 5 Apr 2013 om 05:14:13 +0200 schreef Casper Gielen: > ip-autodetectie werkt niet als je een interface hebt in een non-routable > netwerk. Het netmask moet eigenlijk worden aangepast. > 192.168.123.0/24 -> 192.168.0.0/16 Joost: there might be an easier way to work around the problem btw. We could e.g. state that autodetect-ips doesn't support that situation, and tell people to use another trick. The patch would update documentation only. I am not sure yet what's the best solution. Message-ID: <5166AD46.6010606@uvt.nl> Date: Thu, 11 Apr 2013 14:32:06 +0200 From: Casper Gielen CC: 704807@bugs.debian.org Subject: Re: Bug#704807: uruk: autodetect non-routable nets уто 12 09:59 < joostvb> voor ipv4 werkte t al, ook zonder die patch? уто 12 09:59 < casper> ja уто 12 10:00 < joostvb> maar hoe kan t dan dat t niet werkte voor ipv6? уто 12 10:00 < casper> omdat er andere namen worden gebruikt en andere adresranges уто 12 10:01 < casper> redhat gebruikt bv IPADDR voor ipv4 en IPV6ADDR voor ipv6 уто 12 10:02 < casper> bij nader inzien doet de patch meer dan alleen IPv6 уто 12 10:03 < casper> ook IPv4 wordt verbeterd met de expandnet4 functie уто 12 10:05 < casper> het is nodig zodat je in veruit de meeste gevallen niet handmatig net_eth0_default hoeft in te stellen уто 12 10:05 < casper> als het om non-routable adres-space gaat уто 12 10:05 < casper> voor routable adressen hoeft het nu ook al niet уто 12 10:05 < joostvb> dus t wijzigt t uruk user interface уто 12 10:06 < casper> maar wel backwardscompatible уто 12 10:06 < joostvb> ja уто 12 10:06 < joostvb> ik krijg n beetje jeuk van die hele lijst met hardcoded ranges уто 12 10:06 < joostvb> die staat nu ook al ergens anders in de code уто 12 10:07 < joostvb> in /usr/sbin/uruk iirc уто 12 10:07 < joostvb> maar goed, ik denk r nog over na уто 12 10:09 < joostvb> +»······»·······192.168.*) »··»······· echo "192.168.0.0/24" ;; уто 12 10:09 < joostvb> + 172.1[6-9].*|172.2?.*|172.3[0-1].*) echo "172.16.0.0/12" ;; уто 12 10:09 < joostvb> уто 12 10:10 < joostvb> das n soort rijtje van paren: regex - range уто 12 10:10 < joostvb> ik denk erover om dat in n soort van config file-tje te stoppen уто 12 10:10 < joostvb> while read regex paar; do stuff; done < /config/file/tje уто 12 10:10 < casper> dat kan уто 12 12:13 < F> als ik 10.1.2.0/24 heb, waarom zou ik dan willen dat uruk er 10.0.0.0/8 van maakt уто 12 12:13 < joostvb> F: omdat uruk n heel speciaal idee heeft over precies de range 10.0.0.0/8 уто 12 12:14 < joostvb> F: uruk legt gebruik van die range uit als: o, je doet 10.0.0.0/8, dat gaan we special-case-n уто 12 12:14 < joostvb> en in dat geval gaan we niet-internet-routeerbaar verkeer _niet_ blokkeren уто 12 12:14 < joostvb> dat gedrag van uruk is wellicht n beetje breindood уто 12 12:14 < joostvb> dus misschien beter om _dat_ te "fixen" уто 12 12:15 < F> maar dan is het een kwestie van kijken of 10.1.2.0 in 10.0.0/8 valt уто 12 12:15 < F> +.0 уто 12 12:15 < joostvb> das idd mogelijk een betere oplossing уто 12 12:15 < F> eens denken of ik dat in POSIX sh kan programmeren :) --- autodetect-ips.old 2013-04-05 16:49:16.000000000 +0200 +++ autodetect-ips 2013-04-11 14:30:12.000000000 +0200 @@ -31,6 +31,31 @@ # For each interface in interfaces, ip_ should be defined. +# If an autodetected address is in a non-routable range, +# then net__default should expand to contain the entire range. +expandnet4() +{ + case "$1" in + 10.*) echo "10.0.0/8" ;; + 192.168.*) echo "192.168.0.0/24" ;; + 172.1[6-9].*|172.2?.*|172.3[0-1].*) echo "172.16.0.0/12" ;; + *) echo "$1" ;; + esac +} + +expandnet6() +{ + # Matching IPv6 with regexes is really hard. + # The code below assumes that the usual conventions for writing IPv6-adresses are followed. + case "$1" in + fc00:*) echo "fc00::/7" ;; + fec0:*) echo "fec0::/10" ;; + ::ffff:*:*) echo "::ffff:0:0/96" ;; + 2001:0db8::*) echo "2001:0db8::/32" ;; + *) echo "$1" ;; + esac +} + # First try Red Hat's init scripts for f in /etc/sysconfig/network-scripts/ifcfg-* do @@ -41,10 +66,12 @@ esac eval "$( . $f + net4=$(expandnet4 $IPADDR/$NETMASK) + net6=$(expandnet6 $IPV6ADDR) # netmask is deel van IPV6ADDR echo ip_${i}_default=$IPADDR - echo net_${i}_default=$IPADDR/$NETMASK + echo net_${i}_default=$net4 echo ip6_${i}_default=${IPV6ADDR%/*} - echo net6_${i}_default=$IPV6ADDR + echo net6_${i}_default=$net6 )" done @@ -71,11 +98,13 @@ esac case $iface,$address,$netmask in ?*,?*,?*) case $type in inet) + net=$(expandnet4 $address/$netmask) echo ip_${iface}_default=$address - echo net_${iface}_default=$address/$netmask + echo net_${iface}_default=$net ;; inet6) + net=$(expandnet6 $address/$netmask) echo ip6_${iface}_default=$address - echo net6_${iface}_default=$address/$netmask + echo net6_${iface}_default=$net esac iface= type=