Привет коллегам!

Вот уже не первый раз читаю как одни поучают других на тему того, что при добавлении нескольких IP-адресов из одной подсети alias'ами на сетевой интерфейс netmask'и для alias'ов должны быть 0xffffffff.

Да, я знаю, что в man ifconfig написано "...a non-conflicting netmask must be given. Usually 0xffffffff is most appropriate". Да, я знаю, что код, обрабатывающий ipv4_addrs_xxx из rc.conf добавляет все адреса из одной подсети, кроме первого, с маской /32. Да, я знаю, что на многих Internet-заборах понаписаны горы советов про netmask 0xffffffff для alias'ов.

Вопрос в том, соответствует ли это все реальности?

Немного исторической перспективы.
Когда-то давно это, безусловно, реальности соответствовало.
Вот например, как вела себя FreeBSD 2.2.8 (кто-то еще помнит такую? :)):

228> ifconfig ed1 inet 10.9.8.1 netmask 0xffffff00 alias

228> ifconfig ed1 inet 10.9.8.2 netmask 0xffffff00 alias
ifconfig: ioctl (SIOCAIFADDR): File exists

228>ifconfig ed1
ed1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 10.9.8.1 netmask 0xffffff00 broadcast 10.9.8.255
        inet 10.9.8.2 netmask 0xffffff00 broadcast 10.9.8.255
        ether 00:80:48:c7:a8:49

228> ping 10.9.8.1
PING 10.9.8.1 (10.9.8.1): 56 data bytes
64 bytes from 10.9.8.1: icmp_seq=0 ttl=255 time=0.156 ms
64 bytes from 10.9.8.1: icmp_seq=1 ttl=255 time=0.090 ms
^C
--- 10.9.8.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.090/0.123/0.156/0.033 ms

228> ping 10.9.8.2
PING 10.9.8.2 (10.9.8.2): 56 data bytes
ping: sendto: Permission denied
ping: sendto: Permission denied
ping: sendto: Permission denied
ping: sendto: Permission denied
^C
--- 10.9.8.2 ping statistics ---
4 packets transmitted, 0 packets received, 100% packet loss

228>netstat -rn | fgrep 10.9.8
10.9.8/24          link#1             UC          0        0
10.9.8.1           0:80:48:c7:a8:49   UHLW        0        4       lo0
10.9.8.2           link#1             UHLW        0        4


А вот так вела себя FreeBSD 4.11:

411> ifconfig fxp1 inet 10.9.8.1 netmask 0xffffff00 alias

411> ifconfig fxp1 inet 10.9.8.2 netmask 0xffffff00 alias
ifconfig: ioctl (SIOCAIFADDR): File exists

411> ifconfig fxp1
fxp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=40<POLLING>
        inet 10.9.8.1 netmask 0xffffff00 broadcast 10.9.8.255
        ether 00:a0:c9:9e:75:a6
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active

(т.е. 4.11 второй адрес с той же нетмаской на интерфейс просто не добавляла)


Но почти 7 лет назад в /usr/src/sys/netinet/in.c появилось нечто новое в виде вот такого патча: http://svnweb.freebsd.org/base?view=revision&revision=137628 Этот патч появился в HEAD, Затем вошел в ветку 5-STABLE, а потом оттуда перекочевал в 5.5-RELEASE.


И вот -- наши дни, FreeBSD 8.2:

82> ifconfig vlan7 inet 10.9.8.1 netmask 0xffffff00 alias

82> ifconfig vlan7 inet 10.9.8.2 netmask 0xffffff00 alias

82> ifconfig vlan7
vlan7: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=3<RXCSUM,TXCSUM>
        ether 00:19:d1:24:76:c4
        inet 10.9.8.1 netmask 0xffffff00 broadcast 10.9.8.255
        inet 10.9.8.2 netmask 0xffffff00 broadcast 10.9.8.255
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
        vlan: 7 parent interface: em0

82> ping 10.9.8.1
PING 10.9.8.1 (10.9.8.1): 56 data bytes
64 bytes from 10.9.8.1: icmp_seq=0 ttl=64 time=0.053 ms
64 bytes from 10.9.8.1: icmp_seq=1 ttl=64 time=0.047 ms
^C
--- 10.9.8.1 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.047/0.050/0.053/0.003 ms

82> ping 10.9.8.2
PING 10.9.8.2 (10.9.8.2): 56 data bytes
64 bytes from 10.9.8.2: icmp_seq=0 ttl=64 time=0.056 ms
64 bytes from 10.9.8.2: icmp_seq=1 ttl=64 time=0.048 ms
^C
--- 10.9.8.2 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.048/0.052/0.056/0.004 ms

82>netstat -rn | fgrep 10.9.8
10.9.8.0/24        link#7             U           0        0  vlan7
10.9.8.1           link#7             UHS         0        4    lo0
10.9.8.2           link#7             UHS         0        4    lo0


Так соответствует ли на сегодняшний день реальности утверждение, что неправильно вешать на интерфейс несколько IP-адресов из одной подсети с одинаковой нетмаской? Или мы просто забиваем себе и другим головы устаревшим информационным мусором, который кто-то просто забыл вымести из man'ов?

--
Olwi

Ответить