21.06.2011 08:02, Oleg Cherevko пишет:
Привет коллегам!

Вот уже не первый раз читаю как одни поучают других на тему того, что
при добавлении нескольких 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, была статья на аглицком:
"Why FreeBSD 8 Won't Rewrite the Book". Ключевым моментом статьи было
утверждение, что пользователю не нужно изучать ничего принципиально
нового для перехода на новую версию системы. Понимаете? Преемственность.
Админы привыкли за многие предидущие годы добавлять алиасы с маской
255.255.255.255. Не смотря на то, что ifconfig понимает нотацию '/XX',
многие по-прежнему дописывают 'netmask 255.255.255.XXX', например.
IMHO, есть общепринятые, устаканившиеся правила. И нет ничего плохого,
когда им следуют.

Не всегда у админа есть время/возможность копаться в исходниках
и выяснять что и где поменялось, а в официальных релизах не всегда
пишут про ВСЕ изменения в новой версии. А содержимое страниц руководства
часто первый и б/м авторитетный источник информации.

С другой стороны, конечно, не стоит делать безапеляционные утверждения
относительно того, что могло поменяться от версии к версии.

Ну и последний момент. Сейчас трудно сказать конкретно, но мне кажется,
что лучьше следовать этой старой концепции. Возможно какой-то сетевой
софт поведет себя иначе. Увидит на интерфейсе несколько сетей, несколько
броадкаст-адресов и вместо одного пакета, разошлет в сегмент несколько.
На сколько ЭТО соответствует действительности и на сколько это печально
не могу сейчас утверждать - так, мысли вслух.

Где-то так. :)

Немного исторической перспективы.
Когда-то давно это, безусловно, реальности соответствовало.
Вот например, как вела себя 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'ов?



--
           Sincerely yours,
                            Artyom Viklenko.
-------------------------------------------------------
[email protected] | http://www.aws-net.org.ua/~artem
[email protected]   | JID: [email protected]
FreeBSD: The Power to Serve   -  http://www.freebsd.org

Ответить