Есть роутер Cisco, на соответствующем интерфейсе включен ipv6. Надо убедиться, что роутер
не позволяет хостам из этой сети автоматически получать адрес ipv6 при помощи механизма SLAAC (Stateless Address Autoconfiguration).
Отключить выдачу адресов ipv6 по запросу на автоконфигурирование:
interface Vlan66
ipv6 nd prefix default 300 300 no-autoconfig
!
Запретить отправку объявлений о том, что мы роутер (Router Advertisements — RA):
interface Vlan66
ipv6 nd ra suppress all
!
Если на роутере запрещёна отправка RA, то хост не сможет получить префикс сети от роутера и, соответственно, назначить себе «реальный» адрес, т.е. хост шлёт запросы Router Solicitation, но не получает ответа от роутера, в котором и должен быть передан префикс сети и прочие данные.
Если отправка RA не запрещена, но запрещено автоконфигурирование, то протокол Neighbor Discovery работает, соседи видны, но только по локальным адресам (link-local), например:
cs#sh ipv6 neighbors
IPv6 Address Age Link-layer Addr State Interface
FE80::21D:FFF:FEBE:AF12 1 001d.0fbe.af12 DELAY Vl66
Если хост получил от роутера префикс сети, то он назначает себе адрес на основе полученного префикса и своего MAC-адреса. И мы можем увидеть его на роутере:
cs#sh ipv6 neighbors
IPv6 Address Age Link-layer Addr State Interface
FE80::21D:FFF:FEBE:AF12 0 001d.0fbe.af12 REACH Vl66
2001:db8::21D:FFF:FEBE:AF12 0 001d.0fbe.af12 REACH Vl66
Короче говоря, чтобы работало автоконфигурирование нужно чтобы на циске были разрешены и автоконфигурирование и RA.
Даже если отключить на роутере RA уже после получения хостом адреса, связь через некоторое время пропадает. По крайней мере у меня так происходит между циской и CentOS 6.5. Обнаружение соседей (Neighbor Discovery) при этом работает. CentOS при попытке пингануть роутер ругается «Network is unreachable».
Дополнение
Прочитал где-то, что RA отключать нельзя в любом случае, а отключать SLAAC нужно опциями на интерфейсе, которые указывают хостам получать адреса и прочие настройки по DHCP:
ipv6 nd managed-config-flag
ipv6 nd other-config-flag
При просмотре информации о IPv6 для этого интерфейса видим:
cs#sh ipv6 int vl66
...
Hosts use DHCP to obtain routable addresses.
Hosts use DHCP to obtain other configuration.
...
Однако, у меня при этом хосты всё равно получали адреса по SLAAC.
Дополнение 2
Ещё одна опция в попытке отключить раздачу SLAAC роутером:
interface Vlan66
ipv6 nd prefix default no-advertise
Роутер будет отправлять RA, но в них не будет указан префикс сети, т.е. хосты не смогут «создать» адрес.
Т.к. мне до сих непонятно можно ли полностью отключать RA, я попытался сохранить эти анонсы и включил три другие опции:
interface Vlan66
ipv6 nd prefix default no-advertise
ipv6 nd managed-config-flag
ipv6 nd other-config-flag
Проверил с Windows 7 и CentOS — адрес не получаю, но при просмотре списка соседей на этом интерфейсе вижу, что появились SLAAC-адреса других хостов:
cs#sh ipv6 neighbors vl66
...
2001:db8:C:0:211:32FF:FE90:7C23 133 0011.3290.7c23 STALE Vl66
2001:db8:C:0:21D:FFF:FEBE:AF12 219 001d.0fbe.af12 STALE Vl66
...
Возможно, хосты просто сохранили полученные ранее через SLAAC адреса.
Кстати, можно удалить всех соседей на интерфейсе или конкретный адрес одного соседа:
cs#clear ipv6 neighbors vlan66
cs#clear ipv6 neighbors vlan66 2001:db8:C:0:211:32FF:FE90:7C23
При этом надо было осторожным, если вы подключились к роутеру по IPv6 и потом удалили свой адрес из списка соседей, то скорее всего вы потеряете доступ к роутеру.