Привет коллегам!
Вот уже не первый раз читаю как одни поучают других на тему того, что при
добавлении нескольких 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