FastNetMon

Показаны сообщения с ярлыком 6to4. Показать все сообщения
Показаны сообщения с ярлыком 6to4. Показать все сообщения

воскресенье, 19 сентября 2010 г.

Доступ к IPv6 изнутри OpenVZ контейнера без поддержки IPv6 провайдером

Итак, у нас есть OpenVZ VPS, тяга ко всему новому и ленивый хостер, который ну никак не хочет подключать нэтивную поддержку IPv6, итак, что делать? Упросить хостера включить две фичи для контейнера, а длее действовать самому :)

Для начала для контейнера необходимо включить (это требуется сделать Вашему хостеру, как его упросить - решать Вам) поддержку sit (механизм инкапсуляции IPv6 пакетов в IPv4), на уровне ноды это делается так:
vzctl set 106 --features sit:on --save

А также поддержку опции net_admin:
vzctl set 106 --capability net_admin:on --save

После этого необходимо перезагрузить контейнер:
vzctl restart 106

После этого внутри контейнера появится новый интерфейс sit:
ifconfig sit
sit0 Link encap:IPv6-in-IPv4
NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Теперь просто настраиваем его по инструкции из моего блога: http://phpsuxx.blogspot.com/2010/09/ipv6-debian-6to4.html (разве что с поправкой, что echo "ipv6" >> /etc/modules; modprobe ipv6 делать не нужно!)

Если делать по моему мануалу и забыть подключить net_admin, то получим нечто вот такое:
/etc/init.d/networking restart
Reconfiguring network interfaces...if-up.d/mountnfs[venet0]: waiting for interface venet0:0 before doing NFS mounts (warning).
if-up.d/mountnfs[venet0]: waiting for interface sit0 before doing NFS mounts (warning).
if-up.d/mountnfs[venet0:0]: waiting for interface sit0 before doing NFS mounts (warning).
SIOCADDRT: Operation not permitted
Failed to bring up sit0.
done.

А если все нормально, то вуаля:
ping6 ipv6.google.com
PING ipv6.google.com(2a00:1450:8004::6a) 56 data bytes
64 bytes from 2a00:1450:8004::6a: icmp_seq=1 ttl=56 time=60.0 ms
64 bytes from 2a00:1450:8004::6a: icmp_seq=2 ttl=56 time=59.8 ms
64 bytes from 2a00:1450:8004::6a: icmp_seq=3 ttl=56 time=50.6 ms
64 bytes from 2a00:1450:8004::6a: icmp_seq=4 ttl=56 time=50.1 ms

--- ipv6.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 50.118/55.155/60.026/4.784 ms

У мануала имеется баг - дело в том, что OpenVZ с ноды при каждой перезагрузке переписывает /etc/network/interfaces заново, таким образом всем наши старания оттуда будут тщательно стерты (если пробовать добавлять конфигурацию в /etc/network/interfaces.template, то ничего не происходит, а разбираться влом).

Настройка IPv6 на Debian узле посредством 6to4 (не требуется поддержка хостера)

Как я уже говорил ранее, есть такая прекрасная технология как 6to4, которая позволяет подключаться к IPv6 сетям даже в том случае, если провайдер/хостер не имеет поддержки IPv6 вообще и все их возможности ограничены IPv4.

Эта технология отличается тем, что настроить ее очень легко. Давайте рассмотрим это на примере выделенного сервера на Debian 5 Lenny.

Сейчас нам нужен наш локальный внешний айпи, допустим, это 188.40.135.23, теперь для него необходимо узнать IPv6 6to4 адрес, соответствующий ему, для этого воспользуемся инструкцией. В результате работа утилиты получился префикс: 2002:bc28:8717::, то есть, первый IP будет: 2002:bc28:8717::1

Добавляем загрузку поддержки IPv6 при запуске системы:
echo "ipv6" >> /etc/modules; modprobe ipv6

Открываем конфиг сети:
vi /etc/network/interfaces

И вписываем там следующее:
auto sit0
iface sit0 inet6 static
address 2002:bc28:8717::1 # 6to4 address for our IPv4
netmask 16
gateway ::192.88.99.1

Перезапускаем сеть:
/etc/init.d/networking restart

Вуаля, мы в IPv6 Интернете:
ping6 ipv6.google.com
PING ipv6.google.com(2a00:1450:8004::67) 56 data bytes
64 bytes from 2a00:1450:8004::67: icmp_seq=1 ttl=56 time=58.4 ms
64 bytes from 2a00:1450:8004::67: icmp_seq=2 ttl=56 time=58.7 ms
64 bytes from 2a00:1450:8004::67: icmp_seq=3 ttl=56 time=58.7 ms
64 bytes from 2a00:1450:8004::67: icmp_seq=4 ttl=56 time=58.8 ms
^C
--- ipv6.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3012ms
rtt min/avg/max/mdev = 58.455/58.704/58.893/0.233 ms

Подготовленный читатель быстро сделает замечание, что такой подход к подключению к IPv6 раза в 2 "медленнее" (по пингам 60 мс против 21 в нэтив), чем нэтивный IPv6 линк: http://phpsuxx.blogspot.com/2010/09/ipv6-debian-5-lenny-fastvpsru.html

Источник:
http://wiki.debian.org/DebianIPv6#IPv66to4Configuration и http://www.mrdbs.com/setting-up-a-6to4-tunnel-in-debian.html

Как рассчитать 6to4 IPv6 адрес, соответствующий IPv4 адресу?

Для этого есть специальная утилита ipv6calc, устанавливаем ее:
apt-get install -y ipv6calc

Теперь, допустим, у нас есть IPv4 адрес 74.125.232.19 (ага, Google), как его преобразовать в IPv6 представление для 6to4? Вот так:
ipv6calc --quiet --action conv6to4 74.125.232.19

Вот такой результат работы команды будет:
2002:4a7d:e813::

Источник: http://wiki.debian.org/DebianIPv6#IPv66to4Configuration

Подключение к IPv6 сетям посредством протокола 6to4

6to4 - это механизм позволяющий передавать IPv6 поверх IPv4 без явного создания туннелей (для этого используются специальные серверы-ретрансляторы).

Задачи 6to4 заключаются в следующем:
1) Он выделяет каждому владельцу IPv4 адреса блок IPv6 адресов (то есть, если у Вас уже есть IPv4 адрес, то у Вас автоматически есть и огромный блок IPv6 адресов). Такие адреса начинаются с 2002::/16 и называются "6to4 adresses".
2) Инкапсулирует IPv6 вовнутрь пакетов IPv4.
3) Маршрутизирует трафик между IPv4 и IPv6 сетями.

Чтобы разрешить хосту с 6to4 адресом общаться с настоящим IPv6 необходимо установить его шлюзом IPv4 адрес ближайшего сервера-ретранслятора, записанный в виде :192.88.99.1. Этот адрес постоянен вне зависимости от того, где находился клиент (это сделано для удобства), и занимается тем, что передает все данные полученные по IPv4 в IPv6 сеть.

Источник: http://en.wikipedia.org/wiki/6to4