Интересный сюрприз принесла нам новая версия FreeBSD 9.0 RELEASE. Он связан с некоторым изменением синтаксиса настройки сети в файле  /etc/rc.conf. Ранее переменные в этом файле были в основном совместимы с более ранними версиями, однако в новом релизе переменные, относящиеся к конфигурации сети, изменились из-за реорганизации стартовых скриптов. При описании конфигурации IP-адреса теперь обязательно следует указывать тип протокола. Например, строку

ifconfig_em0 = "192.168.2.1 маска 255.255.255.0"

следует записывать так:

ifconfig_em0 = "инет 192.168.2.1 маска 255.255.255.0".

Хотя старые способы записи по-прежнему поддерживается в существующих переменных для обратной совместимости, некоторые новые переменные не поддерживают старый синтаксис, например в переменных ifconfig_IF_alias также требуется указать тип протокола. Т.е.

ifconfig_em0_alias0 = "192.168.2.10 маска 255.255.255.255"

следует записывать так:

ifconfig_em0_alias0 = "инет 192.168.2.10 маска 255.255.255.255"

Зато разные протоколы можно записывать в конструкции alias:

ifconfig_em0_alias0 = "инет 192.168.2.10 маска 255.255.255.255"
ifconfig_em0_alias1 = "inet6 2001: db8: 1:: 1 prefixlen 64"

Обратите внимание, что IPv6  псевдонимы в конструкции ifconfig_IF_aliasN будут игнорироваться, если переменная ifconfig_IF_ipv6 не определена, поскольку последняя определяет включен ли IPv6-протокол на данном интерфейсе.

Все настройки адресов и статической маршрутизации, записанные в переменных файла /etc/rc.conf , можно отключить остановкой сервиса:


# service netif stop em0
Команда

# service routing stop
деактивирует все статические маршруты в системе.

Релизы до FreeBSD 9.0 не поддерживает эту функцию только для протоколов отличных от IPv4.

Синтаксис конфигурации протокола IPv6 также существенно изменился. Перед подробным объяснением, приведем пример. То, что раньше записывалось как:

ifconfig_em0 = "192.168.2.1 маска 255.255.255.0"
ifconfig_em0_alias0 = "192.168.2.2 маска 255.255.255.255"
ipv6_enable = "YES"
ipv6_ifconfig_em0 = "2001: db8: 1:: 1 prefixlen 64"
ipv6_ifconfig_em0_alias0 = "2001: db8: 2:: 1 prefixlen 64"

# em1 использует SLAAC для настройки IPv6 адресов

в 9.0-RELEASE должно выглядеть следующим образом:

ifconfig_em0 = "инет 192.168.2.1 маска 255.255.255.0"
ifconfig_em0_ipv6 = "inet6 2001: db8: 1:: 1 prefixlen 64 accept_rtadv"
ifconfig_em0_alias0 = "192.168.2.2 маска инет 255.255.255.255"
ifconfig_em0_alias1 = "inet6 2001: db8: 2:: 1 prefixlen 64"
ifconfig_em1_ipv6 = "inet6 accept_rtadv"

Переменная ipv6_enable является устаревшей, а IPv6 функциональность в системе и так по умолчанию включена. Система теперь поддерживает автоматическую настройку конфигураций IPv6 между хостом и  маршрутизатораом.  Установкой переменной ipv6_enable предполагается, что система является хостом, если ipv6_gateway_enable установлен в NO (по умолчанию), либо система является маршрутизатором, если ipv6_gateway_enable=»YES».  Хост всегда принимает сообщения от ICMPv6 маршрутизатора. Модель автоматической конфигурации протокола IPv6  все еще применяется для каждого интерфейса, а не для всей системы. В частности, если на интерфейсе установлен флаг ACCEPT_RTADV, то RA сообщений будут приниматься на этом интерфейсе для SLAAC (автоконфигурация) независимо от того, установлена переменная ipv6_gateway_enable или нет. Кроме того, для каждого интерфейса добавлены флаг NO_RADR и sysctl переменная net.inet6.ip6.rfc6204w3, определяющие, будет ли маршрутизатор по умолчанию применять полученные сообщения RA.  IPv6-маршрутизатор не должен принимать RA сообщения, как источник информации для списка маршрутизаторов по умолчанию, поэтому если установлена переменная IPv6_gateway_enable, система игнорирует  сообщения RA,  даже если  на интерфейсе установлен флаг ACCEPT_RTADV. Тем не менее, это может создать сложную ситуацию, когда система должна работать как CPE (Customer Premises Equipment), т.е в одно и тоже время должна принимать  сообщения от вышестоящего маршрутизатора, а также самой выступать в качестве маршрутизатора для локальной сети (RFC 6204). Для поддержки такой конфигурации используется переменная ipv6_cpe_wanif в файле /etc/rc.conf.

ipv6_gateway_enable = "YES"
ipv6_cpe_wanif = "em0

»

На интерфейсе em0 принимаются сообщений и применяется информация о полученных маршрутах, а на других интерфейсах, даже если на них установлен флаг ACCEPT_RTADV, игнорируется информация от маршрутизаторов. Одновременно с установкой в 1 переменной ipv6_cpe_wanif переменные net.inet6.ip6.rfc6204w3 и net.inet6.ip6.no_radr также устанавливаются   в 1. Заметим, что  по умолчанию они установлены в 0. Если флаг ACCEPT_RTADV установлен в 1, система принимает информацию от маршрутизатора, даже если переменная IPv6_gateway_enable включена. Обратите внимание, что системный администратор должен принудительно установить флаг NO_RADR с на соответствующих интерфейсах, чтобы избежать принятия нежелательной информацией о маршрутизации по умолчанию.

Если установлена переменная ipv6_enable, то устанавливается и переменная ipv6_activate_all_interfaces в файле /etc /rc.conf и опции ifconfig  inet6 accept_rtadv  для всех сетевых интерфейсов. Отметим, что это сделано только для обратной совместимости? переменная ipv6_enable не должны использоваться в FreeBSD 9.0. Переменная ipv6_ifconfig_IF переименована в ifconfig_IF_ipv6 и определяет, разрешена ли обработка  IPv6-пакетов  на данном интерфейсет. Если переменная ifconfig_IF_ipv6 не установлена, IPv6-пакеты  на интерфейса IF не обрабатываются. Не забывайте, что переменная ifconfig_IF_ipv6 всегда нуждается в указании протокола inet6. Если вам достаточно присвоения автоматического link-local адреса,  добавьте следующие строки:

ifconfig_em0_ipv6 = "inet6 auto_linklocal"

Если нужна полная поддержка IPv6 на всех интерфейсах (так, как разрешала переменная  ipv6_enable = «YES»  предыдущих версиях) , вы можете использовать переменную ipv6_activate_all_interfaces.

Если определена переменная  ipv6_ifconfig_IF =»…» это эквивалентно определению ifconfig_IF_ipv6 = «inet6 …». Отметим, что это необходимо только для обратной совместимости. Интерфейс без определения переменной ifconfig_IF_ipv6 отмечается флагом IFDISABLED, который означает, что обработка IPv6-пакетов на этом интерфейсе отключена. Это видно в выводе Ifconfig:

% Ifconfig em0
em0: flags = 8843 <UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 MTU 1500
options = 9b <RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether XX: XX: XX: XX: XX: XX
inet 192.168.2.1 mask 0xffffff00 broadcast 192.168.2.255
ND6 options = 3 <PERFORMNUD,IFDISABLED,ACCEPT_RTADV>
СМИ: Ethernet autoselect (1000baseT <full-duplex>)
status: active

Для включения функции IPv6, этот флаг должен быть удален в первую очередь. Есть несколько способов сделать это, например добавление IPv6-адрес автоматически удаляет этот флаг. Можно снять этот флаг, явно с помощью следующей команды:

# Ifconfig em0 inet6-ifdisabled

Обратите внимание, что объявление ifconfig_IF_ipv6 является наиболее разумным способом, активирования IPv6 функциональности этого интерфейса. Флаг IFDISABLED используется для для запрета нежелательного IPv6 трафика (в среде только IPv4) даже если интерфейсу присвоен IPv6 link-local адрес. Если вам нужна полная поддржка функциональности IPv6 на всех интерфейсах, вы можете использовать переменную ipv6_activate_all_interfaces.

Изменена переменная sysctl net.inet6.ip6.accept_rtadv, которая ранее определяла принимает ли система сообщения ICMPv6 Router Advertisement. В FreeBSD 9.0-RELEASE эта настройка изменяется через ifconfig  для каждого интерфейса inet6 accept_rtadv. Хотя sysctl  переменная еще доступна в FreeBSD 9.0-RELEASE, теперь он определяет, будет ли для каждого интерфейса параметр установлен по умолчанию. Значение по умолчанию равно 0.

Переменная sysctl net.inet6.ip6.auto_linklocal также изменена. Эта переменная определяла присваивался ли  IPv6  link-local адрес на сетевом интерфейсе автоматически. В FreeBSD 9.0-RELEASE, эта настройка изменяется для каждого интерфейса через ifconfig inet6 auto_linklocal. Хотя sysctl переменная по-прежнему доступна в FreeBSD 9.0-RELEASE, теперь она определяет, будет ли этот параметр  установлен по умолчанию для каждого интерфейса. Значение по умолчанию 1 (создания link-local адреса автоматически).

Функциональность ipv6_ifconfig_IF_alias0 интегрирована в ifconfig_IF_alias0. Обратите внимание, что указание протокола обязательно:

ifconfig_em0_alias0 = "инет 192.168.2.10 маска 255.255.255.255"
ifconfig_em0_alias1 = "inet6 2001: db8: 1:: 1 prefixlen 64

Переменная ipv6_ifconfig_IF_aliasN до сих пор используется в FreeBSD 9.0, но только для обратной совместимости.

Также добавлена новая переменная ipv6_activate_all_interfaces. Если эта переменная установлена ​​в YES, опция IFDISABLED не будет добавлен, даже если ifconfig_IF_ipv6 переменные не определены. Это может предотвратить IFDISABLED на динамически создаваемых интерфейсах, таких как PPP  или ng_iface, где определить ifconfig_IF_ipv6 заранее трудно.