1

Тема: Быстрый курс IPv6 в Linux

Возможно вы привыкли к IPv4, однако нравится вам это или нет, постепенно наступает эра IP шестой версии. Засучите рукава, поплюйте на ладони и приготовьтесь поработать. Ядро, начиная с версии 2.1, обладает поддержкой IPv6, так что вам ничего не нужно доустанавливать. Убедитесь лишь, что в вашей системе  установлены программы ping6, ip и ifconfig. И давайте сразу договоримся: здесь мы говорим не об «IP», а об «IP-адресах». IP — это Internet Protocol, а никак не IP-адреса. Как говорит моя бабушка, небрежность в разговоре равносильна небрежности в делах, что ни к чему хорошему не приводит.


Преимущества IPv6


Итак, чем же IPv6 лучше своего предшественника? Кроме того, что мы избавляемся от проблем в IPv4-адресацией, у нас теперь есть:

отсутствие головной боли с частными подсетями;

использование NAT скорее исключение, чем правило;

упрощённая маршрутизация;

говорим «прощай» DHCP.


Основным недостатком IPv6 можно назвать длинные адреса в шестнадцатиричном виде. Четыре фрагмента адреса IPv4, разделённые точками, легки для запоминания, а вот восемь кусков шестнадцатиричных чисел запомнить куда труднее.

Моя система поддерживает IPv6?


Как узнать, включена ли поддержка IPv6 в вашем Linux? Очень просто:

$ cat /proc/net/if_inet6

000000000000000000000000000000 01 01 80 10 80       lo

fe80000000000000020b6afffeef7e 8d 02 40 20 80     eth0



Если вы увидите в своей системе вывод, подобный этому — значит всё отлично, поддержка IPv6 в вашей системе включёна. Вообще, все современные Linux-дистрибутивы поддерживают IPv6 «из коробки».

Пинг IPv6


Если вам нужно выполнить пинг IPv6-системы, вам понадобится утилита ping6. Следующая команда отправляет два пакета к localhost:

$ ping6 -c2 ::1

PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.043 ms
64 bytes from ::1: icmp_seq=2 ttl=64 time=0.054 ms

--- ::1 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 999ms

rtt min/avg/max/mdev = 0.043/0.048/0.054/0.008 ms



::1 — это сокращение от 0000:0000:0000:0000:0000:0000:0000:0001. Любая непрерывная последовательность нулей может быть заменена на пару двоеточий, а любая четвёрка, состоящая из нулей, может быть заменена на один ноль. Для нашего примера это 0.0.0.0.0.0.0.1.

Исследование сети
Хотите узнать, есть ли кто-то в вашей сети, кто имеет поддержку IPv6? Легко!

$ ping6 -c4 -I eth0 ff02::1

PING FF02:0:0:0:0:0:0:1(ff02::1) from fe80::20d:b9ff:fe05:25b4 eth0: 56 data bytes

64 bytes from fe80::20d:b9ff:fe05:25b4: icmp_seq=1 ttl=64 time=0.301 ms

64 bytes from fe80::20b:6aff:feef:7e8d: icmp_seq=1 ttl=64 time=3.69 ms (DUP!)

64 bytes from fe80::221:97ff:feed:ef01: icmp_seq=1 ttl=64 time=8.91 ms (DUP!)

[snip duplicate lines]

--- FF02:0:0:0:0:0:0:1 ping statistics ---

4 packets transmitted, 4 received, +6 duplicates, 0% packet loss, time 3000ms

rtt min/avg/max/mdev = 0.254/1.698/8.911/2.593 ms



Представленный в примере вывод команды ping6 говорит что да, есть два: fe80::20b:6aff:feef:7e8d и fe80::221:97ff:feed:ef01. Обратите внимание, что вы обязательно должнеы указать имя интерфейса программе ping6, даже если этот интерфейс в вашей системе один-единственный. ff02::1 — это сокращенный вариант адреса ff02:0:0:0:0:0:0:1, который является специальным мультикаст-адресом, предназначенным для отправки пакетов всем link-local хостам.


Адреса link-local — это все адреса в диапазоне fe80::/10, который по смыслу эквивалентен диапазону 169.254.0.0/16 в IPv4. Любой адрес из этого диапазона предназначен для автоконфигурирования ОС и пакеты, отправленные с такого адреса не пропустит ни один маршрутизатор, ограничивая их существование в пределах сегмента локальной сети. Протокол IPv6 спроектирован так, что интерфейс обязан иметь link-local адрес, даже если у него есть другой



После того, как ваш хост обменялся данными с другими хостами по IPv6, адреса последних попадут в таблицу окружения (neighbor table) IPv6 (это что-то вроде ARP-таблицы). Содержимое neighbor table вы можете просмотреть при помощи утилиты ip:

$ ip -6 neigh show

fe80::221:97ff:feed:ef01 dev eth0 lladdr 00:21:97:ed:ef:01 nud reachable

fe80::20b:6aff:feef:7e8d dev eth0 lladdr 00:0b:6a:ef:7e:8d nud reachable



Здесь «nud reachable» означает «статус network unreachability detection установлен в состояние reachable», то есть сетевой хост доступен. Каждая запись в neighbor table временная и хранится в течение нескольких минут после последней сетевой активности в направлении хоста.
Использование сетевых имён


Оставим пока «правильные» сисадминовские методы настройки соответствия имён хостов их IP-адресам, а сейчас воспользуемся старым добрым /etc/hosts. Представим, у вас есть три хоста в одном физическом сегменте сети, имеющие имена fatfreddy, phineas, и franklin. Создадим на каждом из хостов записи в /etc/hosts:

fe80::20b:6aff:feef:7e8d  fatfreddy
fe80::221:97ff:feed:ef01  phineas
fe80::3f1:4baf:a7dd:ba4f  franklin


Теперь можно пинговать системы по имени:
$ ping6 -I eth0 phineas

PING phineas(phineas) from fe80::221:97ff:feed:ef01 eth0: 56 data bytes
64 bytes from phineas: icmp_seq=1 ttl=64 time=17.3 ms

SSH и SCP



SSH и SCP умеют работать c IPv6. Внимание, при передаче параметров этим утилитам из командной строки, имеются определённые синтаксические особенности, так что будьте внимательны! Если у вас настроено корректное разрешение имён IPv6-хостов, то разницы при вызове утилит вообще никакой. Вы таким же образом можете подключаться к удалённой оболочке:

$ ssh user@remotehost



и копировать файлы:

$ scp filename user@remotehost:/home/username/directory/.



А вот в случае использования IPv6-адресов всё чуток сложнее. Установка SSH-сессии:
$ ssh phineas@fe80::221:97ff:feed:ef01%eth0


И опять же, если вы используете link-local адрес, то вы должны указать имя интерфейса с которого будете осуществлять подключение. Как показано выше, делается это путём добавления знака процента и имени интерфейса. Вызов scp имеет ещё более дурацкий синтаксис:

$ scp test.txt phineas@\[fe80::221:97ff:feed:ef01%eth0\]:
phineas@fe80::221:97ff:feed: ef01%eth0's password:
test.txt 100%   19     0.0KB/s   00:00


IPv6-адрес вместе именем интерфейса необходимо заключать в квадратные скобки, а квадратные скобки в свою очередь экранировать, чтобы оболочка не узрела в них спецсимволов.

Какой у меня IPv6-адрес?



Команда 'ifconfig -a' выводит информацию обо всех сетевых интерфейсах, находящихся в системе: как о физических, так и о виртуальных. Получив информацию по конкретному интерфейсу вы можете воспользоваться grep, чтобы отфильтровать информацию об IPv6-адресе интерфейса:

$ ifconfig eth0 | grep "inet6 addr:"

          inet6 addr: fe80::20d:b9ff:fe05:25b4/64 Scope:Link

Интернет



Работа в сегменте локальной сети — это, конечно, хорошо, но как обстоят дела в работой IPv6 в глобальной сети? Для того, чтобы воспользоваться IPv6 в интернет, ваш провайдер должен выдать вам «чистый» IPv6-адрес.  Таких провайдеров сегодня очень мало. Свою первую IPv6-сеть автор настроила в 2004 году и если бы вы сказали ей, что спустя семь лет ситуация с IPv6 останется почти такой же, она бы вам не поверила. Да, 2011-й в этом плане не очень-то отличается от 2004-го. Тем временем, вы можете воспользоваться IPv6-over-IPv4 tunnel broker-ами (как, впрочем, вы могли это сделать и в 2004-м!), такими как SixXS или Hurricane Electric.



8 июня 2011 года — мировой день IPv6. В этот день Google, Comcast, Facebook, Yahoo!, Akamai и Limelight Networks, а также ещё некоторые провайдеры включат доступ к своим хостам по IPv6 на 24 часа. Убедитесь в том, что вы готовы принять участие в тестировании и узнайте больше на test-ipv6.com.



Так же, как и в случае с IPv4, ваш провайдер должен выделить вам блок адресов IPv6. Адреса из этого блока являются глобальными адресами, находящимися в диапазоне 2000::/3. Давайте в качестве эксперимента попробуем присвоить какому-нибудь сетевому интерфейсу адрес из этого диапазона:

# ip -6 addr add 2001::1/64 dev eth0



Теперь взглянем, что у нас получилось:

$ ifconfig eth0 |grep "inet6 addr:"

          inet6 addr: 2001::1/64  Scope:Global
          inet6 addr: fe80::20b:6aff:feef:7e8d/64 Scope:Link

Удалить назначенный адрес можно при помощи всё той же утилиты ip:

# ip -6 addr del 2001::1/64 dev eth0

В реальной жизни вам будут выделять большой блок адресов, например 256 или больше, так что вам нужно будет настроить сервер для их автоматической раздачи вашим хостам. В следующей части статьи мы с вами рассмотрим, как это делается. Также рассмотрим, как необходимо настроить файрволл и службу имён для работы с IPv6.

Ну как то так....

2

Re: Быстрый курс IPv6 в Linux

Быстрый курс IPv6 в Linux. Продолжение
23 апреля 2011Сетьip, IPv4, IPv6, radvd, rdnssd   

Продолжая начатую ранее тему об IPv6, сегодня мы поговорим о глобальных IPv6-адресах, маршрутизации, раздаче адресов и службе имён. Всё, о чём пойдёт речь в этой статье, вы можете свободно тестировать в своей локальной сети между двумя хостами, не мешая при этом нормальному функционированию IPv4.


Предотвращение утечки IPv6

В своих экспериментах мы будем использовать глобальные IPv6-адреса из диапазона, предназначенного для использования в Интернет. Сегодня, когда провайдеры не поддерживают и не выдают IPv6-адреса своим клиентам, такие эксперименты не должны вызвать каких-либо проблем. Однако на всякий случай, всё же заблокируйте на вашем маршрутизаторе пропуск IPv6-пакетов наружу. Если ваш роутер работает под управлением Linux, то вы можете заблокировать весь IPv6-трафик следующими командами:

# ip6tables -P OUTPUT DROP
# ip6tables -p INPUT DROP
# ip6tables -p FORWARD DROP

Присваивание глобальных IPv6-адресов

Адреса link-local, которыми мы пользовались в первой статье довольно ограничены в применении. В реальной жизни нам понадобятся глобальные unicast-адреса. Такими адресами являются адреса из области 2000::/3. Любознательные люди могут знать, что адреса из области 2001:0DB8::/32 предназначены для использования в экспериментах, так что их мы и будем использовать. Давайте присвоим реальный IP-v6-адрес сетевому интерфейсу eth0:

# ip -6 addr add 2001:0db8::1/64 dev eth0
1
   
# ip -6 addr add 2001:0db8::1/64 dev eth0

Обратите внимание: /64 — это не CIDR-нотация, это количество бит префикса. Следующая диаграмма поможет понять о чём идёт речь:

2001:db8:0000:0000:0000:0000:0000:0001
_____________|____|___________________
Network ID   Subnet  Interface ID
   
Network ID определяется провайдером, когда он выдаёт блок IPv6-адресов. Вы же можете управлять значением Subnet и Interface ID. Таким образом, в нашем случае 64 бита отведены под Network ID + Subnet и 64 бита под Inetrface ID. Вспомните, что в IPv4 для адреса в целом отводилось 32 бита, так что выделенного такого размера блока адресов вам хватит очень надолго!

Теперь вы можете пинговать интерфейс в пределах локальной системы по назначенному ему IPv6-адресу. Здесь я только для примера ввожу длинный IPv6-адрес в полном формате, чтобы вы увидели, как программа ping6 автоматически сократит его:

$ ping6 2001:db8:0:0:0:0:0:1
PING 2001:db8:0:0:0:0:0:1(2001:db8::1) 56 data bytes
64 bytes from 2001:db8::1: icmp_seq=1 ttl=64 time=0.043 ms

Однако пинг с другого хоста у вас не пройдёт, поскольку для этого, так же как и с IPv4 нам понадобится роутер.
Добавление адресов

Вы можете добавлять сколько угодно адресов интерфейсам ваших систем. Просто считайте в шестнадцатиричной системе по порядку: 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, 10, 11 и так далее, получая таким образом новые адреса:

2001:db8::1
2001:db8::2
2001:db8::3
...
2001:db8::18
2001:db8::19
2001:db8::1a
2001:db8::1b

Маршрутизация

Само-собой разумеется, ваш роутер должен поддерживать IPv6. Если вашим роутером является Linux-система, то включить маршрутизацию можно следующей командой:

# sysctl -w net.ipv6.conf.all.forwarding=1
1
   
Проверить, включена ли маршрутизация IPv6, можно командой:

# cat /proc/sys/net/ipv6/conf/eth0/forwarding
1
   

«1» означает, что всё хорошо и в вашем устройстве маршрутизация шестой версии IP включена. Теперь установите radvd — router advertiser daemon и в его файле конфигурации /etc/radvd.conf поместите следующее, изменив имя интерфейса eth0, если нужно:

interface eth0
{
   AdvSendAdvert on;
   prefix 2001:db8::/64
   {
   };
};
interface eth0
{
   AdvSendAdvert on;
   prefix 2001:db8::/64
   {
   };
};

Теперь добавьте интерфейсу вашего роутера IPv6-адрес:

# ip address add 2001:db8::1a/64 dev eth0

Проверьте, всё ли у вас получилось так, как нужно, при помощи команд

$ ifconfig eth0 | grep inet6
          inet6 addr: 2001:db8::1a/64 Scope:Global
          inet6 addr: fe80::20e:2eff:feb9:cbad/64 Scope:Link
   

$ ip -6 route show
2001:db8::/64 dev eth0  metric 1024  mtu 1500 advmss 1440 hoplimit 0
fe80::/64 dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440 hoplimit 0
   
И теперь можно запустит radvd:

# /etc/init.d/radvd start

Теперь вы должны без проблем пинговать интерфейс вашего роутера. обратите внимание, что в случае с глобальным адресом, в отличие от link-local, вам не нужно указывать имя интерфейса:

$ ping6 2001:0db8::1a
PING 2001:db8::1a(2001:db8::1a) 56 data bytes
64 bytes from 2001:db8::1a: icmp_seq=1 ttl=64 time=1.73 ms

$ ping6 2001:0db8::1a
PING 2001:db8::1a(2001:db8::1a) 56 data bytes
64 bytes from 2001:db8::1a: icmp_seq=1 ttl=64 time=1.73 ms

Все компьютеры, находящиеся на одном свитче с маршрутизатором должны теперь автоматически получить адреса из диапазона 2001:0db8::/64. Чтобы добавить в таблицу маршрутизации ваших хостов роутер по-умолчанию воспользуйтесь командой:

# ip -6 route add default via 2001:db8::1a

Можно избавиться от ручного добавления этой записи в таблицы маршрутизации хостов, немного дополнив конфигурацию вашего radvd:

interface eth0
{
  AdvSendAdvert on;

  prefix 2001:db8::/64
  {
    AdvOnLink on;
    AdvAutonomous on;
  };
  route ::/0
  {
  };
}

   
interface eth0
{
  AdvSendAdvert on;

  prefix 2001:db8::/64
  {
    AdvOnLink on;
    AdvAutonomous on;
  };
  route ::/0
  {
  };
}

Теперь в таблицах маршрутизации IPv6 ваших хостов вы будете видеть следующее:

$ ip -6 route show
...
default via 2001:db8::1a dev eth0 metric 1024 mtu 1500 advmss 1440 hoplimit 0
...
   
$ ip -6 route show
...
default via 2001:db8::1a dev eth0 metric 1024 mtu 1500 advmss 1440 hoplimit 0
...

Что делать, если вам не нужно, чтобы radvd раздавал IPv6-адреса всем подряд в вашей сети? Про перечислите в файле конфигурации демона link-local адреса тех станций, которым вы хотите выдавать адрес, а запросы от остальных будут просто проигнорированы:

interface eth0
{
  AdvSendAdvert on;

  prefix 2001:db8::/64
  {
    AdvOnLink on;
    AdvAutonomous on;
  };
  route ::/0
  {
  };

  clients
  {
    fe80::20d:b9ff:fe05:25b4;
    fe80::20b:6aff:feef:7e8d;
    fe80::221:97ff:feed:ef01;
  };
};
   
interface eth0
{
  AdvSendAdvert on;

  prefix 2001:db8::/64
  {
    AdvOnLink on;
    AdvAutonomous on;
  };
  route ::/0
  {
  };

  clients
  {
    fe80::20d:b9ff:fe05:25b4;
    fe80::20b:6aff:feef:7e8d;
    fe80::221:97ff:feed:ef01;
  };
};

Калькулятор IPv6-адресов

Понимание двоичной арифметики очень важно для понимания принципов адресации в IP. Вычисления адресов вручную бывают довольно утомительными и нередко приводят к ошибкам. Почему бы не возложить эти вычисления на плечи компьютера? Существует масса онлайн-утилит для этого, выбирайте себе любую! Также в большинстве дистрибутивов вы найдёте в репозиториях утилиту ipv6calc, которая пригодится для локального пользования.
Службы имён

Вообще, настройка DNS для IPv6 — тема достаточно объёмной статьи, однако я надеюсь что некоторые описанные здесь моменты дадут вам нужное направление.

Идея, лежащая в основе автоконфигурации сетевых IPv6 интерфейсов (link-local адреса и router advertisements), призвана избавить от необходимости держать DHCP-сервер, однако вам всё ещё нужно поддерживать DNS-сервер, чтобы хосты могли выполнять преобразование имён в IP-адреса и обратно. BIND9 уже поддерживает IPv6, но как всегда в случае с BIND, вам придётся потрудиться, перелопатив несколько конфиг-файлов, расположенных в разных местах. В других DNS-демонах от вас понадобилось бы меньше усилий, однако ещё никакой из них не поддерживает IPv6 в полном объёме. Если вас заинтересовала тема настройки IPv6 в BIND, вы может обратить к руководству по BIND.

В предыдущей статье мы рассматривали вариант использования старого-доброго /etc/hosts. Как вариант, вы можете использовать Dnsmasq, который является моим любимым средством организации DNS в локальных сетях. Он поддерживает IPv6-DNS и TFTP, однако в нём нет DHCP, что не позволяет ему быть универсальным решением. Dnsmasq делает содержимое /etc/hosts доступным по сети, используя DNS-протокол. Сперва настройте IPv6-интерфейсы ваших хостов на использование  статических адресов, а затем разместите соответствие адресов именам в файле /etc/hosts вашего Dnsmasq-сервера и перезапустите демон Dnsmasq. Далее установите rdnssd — recursive DNS server discovery daemon на том же хосте, где у вас установлен radvd, затем добавьте в файл конфигурации /etc/radvd.conf строку, указывающую адрес вашего Dnsmasq-сервера:

RDNSS 2001:0db8::1b

Перезапустите radvd. Проекты radvd и rdnssd находятся в стадии разработки, поэтому не исключено, что вы можете столкнуться с какими-нибудь проблемами, хотя на моих Debian-системах они работают отлично.

Источник: linux.com

Ну как то так....

3

Re: Быстрый курс IPv6 в Linux

Лезем на https://6to4.ru/
и получаем ipv6
или
https://tunnelbroker.net/
и там пройти регистрацию ...

Ну как то так....