Развертывание IPV6

1. Разбиение ipv6 на подсети
----------------------------------------------------------------------------------------
Мы получили блок 2a03:1800::/32
Согласно каким-то там рекомендациям каждому клиенту надо выделять подсеть /64.
Так же всякие автоконфигурации интерфейсов (есть такое удобство ipv6) в windows и unix тоже привыкли иметь дело c /64.
Очень много ipv6-адресов помещается в подсети /64, если не ошибаюсь - 2^64, т.е. 65535*65535. 
Пусть это не кажется расточительным.

Короче - каждому клиенту - /64.

Внутри сети /32 помещается 65536*65536 сетей /64. Нумеруем их так:

2a03:1800:x:y::

где x=0....ffff
    y=0....ffff

в общем блока /32 хватит на всех.

Пример.
2a03:1:2::/64 - подсеть
2a03:1:2::1/64 - шлюз
2a03:1:2::2 - клиент
2a03:1:2::3 - тоже клиент:)
2a03:1:2:3:4:3::10 - тоже клиент, и тоже все в той же подсети 2a03:1:2::/64

2a03:1:3::/64 - другая подсеть

loopback в ipv6 будет иметь адрес с маской /128, т.е. это как /32 в ipv4.

2. Конфигурация cisco
----------------------------------------------------------------------------------------

Роутинг
conf t
ipv6 unicast-routing

Секьюрность

ipv6 access-list deny-any
 deny ipv6 any any

line vty 0 4
 ipv6 access-class deny-any in


Интерфейсы

interface Loopback6
 no ip address
 ipv6 address 2A03:1800:1:1::1/128
 ipv6 enable

interface Vlan23
 description Uplink, AS8359, Comstar-Direct (MTU)
 ip address 195.34.38.98 255.255.255.252
 ip access-group Garbage-Excl-Private in
 no ip redirects
 no ip unreachables
 no ip proxy-arp
 ip flow ingress
 load-interval 60
 ipv6 address 2A02:28:1:2::23:2/112
 ipv6 enable
 hold-queue 4096 in
 hold-queue 4096 out

BGP
ipv6 route 2A03:1800::/32 Null0
ipv6 prefix-list me-v6 seq 5 permit 2A03:1800::/32

route-map to-mtu6 permit 10
 match ipv6 address prefix-list me-v6

router bgp 25308
neighbor 2A02:28:1:2::24:1 description MTUv6
address-family ipv4
 no neighbor 2A02:28:1:2::24:1 activate
address-family ipv6
 network 2A03:1800::/32
 neighbor 2A02:28:1:2::24:1 activate
 neighbor 2A02:28:1:2::24:1 send-community
 neighbor 2A02:28:1:2::24:1 soft-reconfiguration inbound
 neighbor 2A02:28:1:2::24:1 route-map to-mtu6 out

Как смотреть:

sh ip bgp ipv6 uni su
sh ip bgp ipv6 u n 2A02:28:1:2::24:1 ro
cle ip bgp ipv6 u 8359 soft out  #вместо ip нейбора указывается as-ка


3. Клиенты
---------------------------------------------------------------------------
1) linux
Как только на интерфейсе роутера появился ipv6 из сетки /64, клиентские
компы словят себе ipv6 адрес, который генерится на основе ipv6 интерфейса
роутера и MAC-адреса клиента.

Например:
eth0.2    Link encap:Ethernet  HWaddr 00:17:31:b4:8d:55  
          inet addr:172.16.10.12  Bcast:172.16.10.255  Mask:255.255.255.0
          inet6 addr: 2a03:1800:1:4:217:31ff:feb4:8d55/64 Scope:Global
          inet6 addr: fe80::217:31ff:feb4:8d55/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3222533 errors:0 dropped:0 overruns:0 frame:0
          TX packets:433391 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:534246967 (509.4 MiB)  TX bytes:145408314 (138.6 MiB)

тут  fe80::217... какая-то несущественная байда, про которую более подробно сказано в
википедии.

Если в компе с юниксом не включен ipv6 форвардинг, то дефолт тоже словится
автоматом.

Посмотреть таблицу маршрутизации можно так:

ip -6 ro li
или
route -A inet6

Принудительно назначить какой-то ipv6 на интерфейс:
/sbin/ifconfig vlan18 inet6 add 2A03:1800:1:3::4/64 up

Если форвардинг включен, можно ручками добавить дефолт:
/sbin/route -A inet6 add default gw 2a03:1800:1:3::2

Включить форвардинг, если комп будет ipv6-роутером:
sysctl -w net.ipv6.conf.all.forwarding=1

Так же есть команды ping6 и traceroute6

2) windows
Если в виндах не установлен протокол tcp/ip версии 6, надо это сделать.
После чего винда чудесно сама ловит себе ipv6, как и линукс.
Но вот если протокол был добавлен до того, как у винды повилась возможность
получить native ipv6, она начинает включать всякие туннели через всякие
тунельброкреы.
В XP по умолчанию ipv6 выключен.
В vista и win7 - включен, поэтому там как правило уже работает тунель. Надо
избавляться:).

Как избавиться от этих автоматических наворотов в winXP:
http://social.technet.microsoft.com/Forums/ru-RU/xpru/thread/8716e8e7-1223-4e53-87ae-25086943b452
http://www.twibble.org/Articles/IPv6/ipv6-for-xp
http://www.fir3net.com/Windows/XP/how-do-i-configure-ipv6-in-windows-xp.html

Простой метод назначения ipv6 в XP:

ipv6 install
ipv6 if  # эта команда выведет список сетевых интерфейсов и из номера
ipv6 adu 5/2a03:1800:1:6::2  # тут 5 - номер интерфейса, которому назначается ipv6 адрес 2a03:1800:1:6::2
ipv6 rtu ::/0 5/2a03:1800:1:6::1 pub life 1800 # прописываем дефолт через 2a03:1800:1:6::1


Обычные команды винды ping и tracert спокойно работают с ipv6 адресами.


Узнать, есть ли у сайта ipv6 связность можно командой юникса host:
host www.citylan.ru
www.citylan.ru has address 212.118.32.74
www.citylan.ru has IPv6 address 2a03:1800:1:3::4


4. ДНС
---------------------------------------------------------------------------------------
1) Прямая зона:
Просто вместо А для ipv6 пишем АААА:

www             IN      A       212.118.32.74
                IN      AAAA    2a03:1800:1:3::4

2) обратная зона: используйте http://www.fpsn.net/


5. МАК-адреса и ARP'ы
------------------------------------------------------------------------------------------
В ipv6 нет ARP-запросов. Есть там что-то другое, читайте в википедии.
Практически это значит, что в линуксе нет ipv6 в выводе arp.
Зато есть в выводе команды 
ip neighbors 
вместе с ipv4'мы арпами.
Так же я иногда привязваю ipv6 к маку статически:
/sbin/ip neigh add 2a03:1800:1:3::4 lladdr 00:16:76:D2:C1:7C nud permanent dev vlan18


6. Туннели
----------------------------------------------------------------------------------------

Есть 2 вида туннелей ipv6 через ipv4:
- 6to4 (использует блок 2002::/16)
- Teredo (2001::/32)

оба поддерживаются windows, для teredo на юниксе есть софт miredo, для 6to4
разные фичи в ядре, типа tun6to4. 

Напомню, в windows vista и windows7 по-умолчанию включен ipv6. Т.к. native ipv6 вы
своим клиентам еще не дали :) то винда автоматически сконфигурила один из
туннелей и получила ipv6-связность через туннель.

1) 6to4 очень прост, к 2002: добавляется ipv4 в 16-ричном виде. Запаковывается
у клиента и распаковывается где угодно на хосте с ip 192.88.99.1/24. Т.е. 
192.88.99.1 - такой специальный адрес, который анонсируют многие провайдеры,
кто-то глобально, кто-то только на локальных точках обмена трафиком, кто-то
только своим клиентам. Хост, на котором рабтает туннель 6to4, посылает весь
ipv6 трафик через ipv4 на 192.88.99.1. Если вы посмотрите свой netflow, то
обнаружите, что трафик к 192.88.99.1 имеет место быть. Сделаете трейс на
192.88.99.1 и скорее всего это будет какой-то хост в европе. Т.е. кто-то из ваших
клиентов даже на российские ресурсы ipv6 ходит через европу. 
Поэтому лучше если 192.88.99.1 будет на вашей циске, а не на чужой. Делаем так:

interface Loopback4
 description 6to4 Anycast Relay Service
 
 ip address 192.88.99.1 255.255.255.0 secondary
 ip address 212.118.33.44 255.255.255.255
 no ip redirects
 ipv6 address 2002:D476:212C::1/128
 ipv6 enable
 ipv6 mtu 1280
 no ipv6 redirects  


2002:D476:212C::1/128 - это преобразованный 212.118.33.44 из вашей сети ipv4
(D4 это 212 , 76 это 118 и т.д.)

interface Tunnel2002
 description anycast 6to4 Relay Interface
 no ip address  
 no ip redirects
 ipv6 address 2002:C058:6301::/128 anycast
 ipv6 unnumbered Loopback4
 ipv6 mtu 1280
 tunnel source Loopback4
 tunnel mode ipv6ip 6to4
 tunnel path-mtu-discovery


ipv6 route 2002::/16 Tunnel2002

теперь покрайней мере часть ваших клиентов с туннелями 6to4 будет работать
чуть быстрее ;)

(Практика показала, что таким методом (cisco обрабатывает этот туннель CPU)
много трафика не пропустишь, а вот консоль тупить будет. Так что use unix.
Но и у юниксовых решений есть проблема с производительностью. Т.е. похоже
дело в количестве пакетов. Юниксовый бокс спокойно обслуживает десяток
туннелей на любых скоростях, но как только клиентов становится по-настоящему
много (скажем, вы анонсировали туннельный префикс на точке обмена трафиком),
то даже очень производительные сервера под юниксом начинают затыкаться.
Проблема актуальна и для решений 6to4, и для teredo. Посему мы (и не только
мы) анонсируем туннельные префиксы только своим клиентам.)


2) Teredo

чисто виндовый протокол, который однако описан в RFC4380  и реализован в unix
в софте miredo: http://www.remlab.net/miredo/
Миредо может работать в режиме клиента или режиме сервера.
По умолчанию все teredo клиенты с виндов коннектятся на
teredo.ipv6.microsoft.com, после чего получают ipv6 из блока 2001::/32
Этот блок анонсируют многие провайдеры от имени своих AS'ок, так же как и
192.88.99.0/24. Что происходит дальше описано в rfc4380. 

7. Полезные ссылки
---------------------------------------------------------------------------------------------
http://www.ripe.net/meetings/regional/moscow-2010/presentations/ripe-ncc-rm-2010-comstar.pdf
http://www.getipv6.info/index.php/Main_Page