Получить ipv6 адрес linux

Настрой себе IPv6 в Debian и Ubuntu

Настраивать будем Debian Squeeze. В Ubuntu в принципе то же самое.

Шаг 1. Регистрируем туннель

Заходим на сайт Hurricane Electric, регистрируемся. Логинимся на сайте, и создаём туннель: вписываем свой IPv4 адрес и выбираем сервер поближе. Нам выделяют одну /64 подсеть, в которой будут находиться сервер и клиент как конечные точки туннеля.

В подсети /64 туннеля первый адрес — адрес сервера, второй — адрес клиента (то есть, наш).

Если у вас есть локальная сеть и вы хотите чтобы все машины в ней тоже получили IPv6 адреса, то запрашиваем ещё одну /64 подсеть («routed /64»). Если у вас 2 или более локальных сети за роутером, то запрашиваем /48 подсеть («routed /48»), которую будем нарезать на нужное количество /64. Все выделенные нам подсети будут маршрутизироваться через наш сервер.

Шаг 2. Настраиваем IPv6

Настраиваем туннель — интерфейс he-ipv6. Здесь используем подсеть /64 для туннеля. Вместо «переменных» вводим то, что получили на первом шаге.

Дописываем в конец /etc/network/interfaces

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address $CLIENT_IPv6
netmask 64
endpoint $SERVER_IPv4
local $CLIENT_IPv4
gateway $SERVER_IPv6
ttl 64

Включаем и проверяем:
# ifup he-ipv6
# ping -n ipv6.google.com

Шаг 3. DNS и Google

К сожалению, ipv6.google.com — единственная DNS запись Google, которая резолвится в IPv6 для всех. Google решил пока не резолвить все сервисы в IPv6 из-за того, что на довольно большом числе машин он неправильно настроен или неправильно отключен, в связи с чем пользователь может увидеть задержку пока браузер пытается соединиться с сервером по IPv6, а на самом деле IPv6 соединения нет.

Таким образом, Google решил включать IPv6 в DNS в масштабе отдельных провайдеров. Hurricane Electric относится как раз к таким провайдерам. Они предоставляют DNS сервер 2001:470:20::2, через который все домены сервисов Google резолвятся в том числе и в IPv6 адреса.

Можно сразу вписать в /etc/resolv.conf этот сервер, а можно поднять локальный кеширующий bind и немного выиграть в скорости.

Есть два способа настройки: можно резолвить через этот сервер только адреса Google (но нужно знать их список), а можно резолвить вообще всё (и не использовать DNS серверы провайдера вообще). Предлагаю второй способ, он проще, и к тому же у меня нет списка всех адресов сервисов Google.

Читайте также:  Writing linux image to usb

Правим файл /etc/bind/named.conf.options

acl mynetworks localhost;
192.168.0.0/16; // наша локальная сеть, если есть
2001:XXXX:XXXX:XXXX::/64; // наша IPv6 /64
2001:XXXX:XXXX::/48; // наша IPv6 /48, если есть
>;

options directory «/var/cache/bind»;

Проверяем:
# dig +short google.com @::1 AAAA
2a00:1450:8003::63
2a00:1450:8003::67
2a00:1450:8003::68
2a00:1450:8003::69
2a00:1450:8003::6a
2a00:1450:8003::93

Если всё хорошо, то можно использовать. Вписываем в /etc/resolv.conf

Если нет локальной сети — то всё готово 🙂

Шаг 4. Маршрутизация

Для настройки машин в локальной сети предлагаю использовать stateless autoconfiguration. Это чем-то напоминает DHCP, но разница в том, что этот протокол staleless, то есть, сервер не хранит список выданных адресов. Принцип работы следующий: серверу выделяется одна /64, из которой он раздаёт адреса клиентам. Уникальность полученного IPv6-адреса обеспечивается тем, что в него включается MAC адрес клиента (немного преобразованный).

Пусть у нас на eth0 локальная сеть, а на eth1 — провайдер. Пока что IPv6 настроен только на интерфейсе he-ipv6. Поэтому eth0, смотрящий в локальную сеть должен получить статический IPv6-адрес для установки соединений с клиентами. Но мы не может назначить eth0 адрес из нашей туннельной /64, так как тогда получится что два интерфейса смотрят в одну и ту же подсеть. Можно разбить нашу /64 на две, но тогда не будет работать stateless autoconfiguration. Поэтому мы взяли себе ещё одну /64, из которой будем раздавать адреса в локальную сеть (важно подчеркнуть: это настоящие внешние IPv6 адреса). Пусть нам выдали 2001:XXXX:YYYY:ZZZZ::/64.

Если у нас несколько сетей за маршрутизатором, то мы взяли себе ещё и /48, из которой будем использовать необходимое количество подсетей /64. Пусть нам выдали 2001:XXXX:YYYY::/48. Дописываем ещё номер сети — будет занимать целых 2 байта и получаем: 2001:XXXX:YYYY:1::/64. Таким образом, у нас могло бы быть аж 65536 разных сетей. Адресом сервера будет 2001:XXXX:YYYY:1::1. Дальше пример с несколькими сетями не развиваю, думаю что довольно просто обобщить конфигурационные файлы на случай нескольких сетей.

Итак, у нас одна сеть за маршрутизатором, 2001:XXXX:YYYY:ZZZZ::/64. Дописываем в конец /etc/network/interfaces

Устанавливаем демона для stateless autoconfiguration:
# apt-get install radvd

interface eth0
AdvSendAdvert on;
MaxRtrAdvInterval 30;

prefix 2001:XXXX:YYYY:ZZZZ::1/64
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
AdvValidLifetime 300;
AdvPreferredLifetime 120;
>;
>;

Включаем форвардинг:
/etc/sysctl.conf

# sysctl -w net.ipv6.conf.default.forwarding=1
# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

Перезапускаем radvd:
# invoke-rc.d radvd restart

Теперь все компьютеры из локальной сети должны автоматически получить IPv6 адреса и адрес шлюз. За процессом можно следить на сервере при помощи команды radvdump, а на клиентах проверять наличие адреса при помощи ip -6 a.

DNS-сервер придётся прописать клиентам вручную, stateless autoconfiguration этого не умеет.

Шаг 5. Avahi

Так как адреса клиентов основываются на MAC адресах, то в результате получаются адреса вида: 2001:528d:d4b6:1:215:f2ff:fe55:2d85. Работать с этим довольно тяжело, запомнить — невозможно. На помощь приходит multicast dns и его реализация в виде Avahi.

Читайте также:  Линукс и интернет эксплорер

# apt-get install avahi-daemon avahi-utils

Проверяем наличие в /etc/avahi/avahi-daemon.conf строк:

Теперь все компьютеры в локальной сети получат имена вида hostname.local. Эти имена будут резолвиться по умолчанию в IPv4 адреса. Чтобы они резолвились по умолчанию в IPv6, правим строчку в /etc/nsswitch.conf.

Теперь можно использовать имена hostname.local и по умолчанию будут устанавливаться IPv6 соединения.

Шаг 6. Squid + IPv6

Держите кеширующий прокси в локальной сети? Небольшая проблема: Squid получил полноценную поддержку IPv6 только в версии 3.1.0.x, которая сейчас находится в репозитории experimental. На самом деле ничего особо экспериментального, у меня нормально работает уже 4 месяца.

Устанавливаем squid3, в разрешающий ACL вписываем наши сети /64 и /48.

UPD. На linuxforum заметили, что Hurricane Electric выдаёт две /64, поэтому запрашивать /48 с одной локальной сетью не нужно. Обновил топик.

UPD2. В связи с появившимися копипастами напомнимаю, что перепечатка разрешена только с моего разрешения.

Источник

IPv6 on Linux | The Definitive Guide

PALLAS DIGITAL

Let’s have a look at IPv6 support and some history for Microsoft Windows, Apple MacOS and Linux implementations of our new Internet Protocol.

IPv6 in Linux

In 1996 – after the first Draft of the IPv6 Specification from December 1995 in RFC1883 the first IPv6 code was included in Linux Kernel 2.1.8.

In 2000 – the Japanese USAGI project sets a goal to fully implement IPv6 on Linux.

In 2008 – the IPv6 implementation in Linux was nearly complete in Kernel 2.6.

Please watch my following video with an introduction to IPv6 for the different operating systems, including Linux:

My Traceroute mtr IPv6 output

You know what traceroute is and why it is so helpful. The Linux utility My Traceroute (mtr), which is also available for MacOS via homebrew, does a kind of a live traceroute and sends packets every second. You are able to see live where packet loss happens or latency increases. I love this tool and highly recommend you try it out, for IPv6 and IPv4!

How to disable IPv6 on Linux

I cannot recommend disabling IPv6 on Linux and recommend learning enough about it so you can configure and enjoy it. Disabling IPv6 might also break some things that are dependent on it. Still, in some cases you might want or even need to disable it.

First, disable IPv6 in runtime on your Linux machine:

$ sudo sysctl -w net.ipv6.conf.​default.disable_ipv6=1 $ sudo sysctl -w net.ipv6.conf.​lo.disable_ipv6=1 $ sudo sysctl -w net.ipv6.conf.​all.disable_ipv6=1

And depending on your Linux distribution you might need to make sure this is reboot safe by writing it into /etc/sysctl.conf:

net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.all.disable_ipv6 = 1

Now you can reboot your Linux machine into an IPv6 free state.

Читайте также:  Linux console zip folder

If you had enough of life without IPv6, read on:

How to enable IPv6 on Linux

I’m glad you want to (re-) enable IPv6 on your Linux machine. This should be quick and easy.

First, enable IPv6 in runtime on your Linux machine:

$ sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0
$ sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0
$ sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0

And depending on your Linux distribution you might need to make sure this is reboot safe by writing it into /etc/sysctl.conf:

net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.all.disable_ipv6 = 0

Now you can reboot your Linux machine to be back on full IPv6 support. In case you need to do more configuration, follow the previous steps on how to configure addresses and routing and how you troubleshoot your Linux IPv6 implementation.

Troubleshooting IPv6 on Linux

Watch my video on troubleshooting IPv6 on Linux:

IPv6 Address Planning

IPv6 Fundamentals

DNS & Bind on IPv6

This concludes IPv6 Foundation Part 8: IPv6 on Linux of the original IPv6 Foundation Master Class.

Источник

How do I get the pingable IPv6 address of my machine?

when I try: $ ip -6 addr I get something like: inet6 fe80::d773:9cf0:b0fd:572d/64 scope link if I try to ping that from the machine itself:

$ ping6 fe80::d773:9cf0:b0fd:572d/64 unknown host $ ping6 fe80::d773:9cf0:b0fd:572d connect: Invalid argument 

2 Answers 2

Any IPv6 address that starts with fe80: is the equivalent of IPv4 169.254.*.* address, i.e. it’s a link-local address, reachable only in the network segment it’s directly connected to, using the NIC that connects to that segment specifically. Unlike IPv4, however, it is perfectly normal for a NIC to have both the link-local IPv6 address and one or more global IPv6 addresses simultaneously.

Since a fe80: IPv6 address is link-local, you must specify the network interface you want to use when pinging it.

$ ping6 fe80::beae:c5ff:febe:a742 connect: Invalid argument $ ping6 -I eth0 fe80::beae:c5ff:febe:a742 PING fe80::beae:c5ff:febe:a742(fe80::beae:c5ff:febe:a742) from fe80::beae:c5ff:febe:a742%eth0 eth0: 56 data bytes 64 bytes from fe80::beae:c5ff:febe:a742%eth0: icmp_seq=1 ttl=64 time=0.182 ms 64 bytes from fe80::beae:c5ff:febe:a742%eth0: icmp_seq=2 ttl=64 time=0.167 ms . 

You can also append the interface at the end of the address by using the % sign: ping6 fe80::beae:c5ff:febe:a742%eth0 .

This requirement is only for link-local IPv6 addresses: you can ping globally routable IPv6 addresses without specifying the interface.

$ ping6 2a00:1450:400f:80a::200e # that's ipv6.google.com PING 2a00:1450:400f:80a::200e(2a00:1450:400f:80a::200e) 56 data bytes 64 bytes from 2a00:1450:400f:80a::200e: icmp_seq=1 ttl=55 time=17.6 ms 64 bytes from 2a00:1450:400f:80a::200e: icmp_seq=2 ttl=55 time=19.6 ms . 

Источник

Оцените статью
Adblock
detector