Pull to refresh

Настройка IPv6 или IPv6 в массы

System administration *IPv6 *
image

UPDATE: Так как все это писалось давно, то смысл использовать скрипты сильно теряется, осталось ради истории.
Все можно и наверно лучше настроить через inadyn.
Синтаксис файла конфигурации примерно такой:

dyndns_system ipv6tb@he.net
username es1125cc87b23bfe1f3ba8923ca7f2ee
password PASS-WORD
alias 10220

На Habrahabr уже существуют статьи по настройке IPv6, например тут и тут. и тут
Сам я рекомендую почитать version6, там примеры зачем это надо.

Я же решил сделать процесс поднятие туннеля более универсальным и автоматизированным…
Для этого я написал два простых скрипта, но ..., давайте по порядку.

В качестве туннельного брокера я использую Hurricane Electric.

Hurricane Electric позволяет, создавать до 5 туннелей и
умеет автоматически генерировать готовые примеры команд, для поднятие туннеля на разных ОС
Позволяет по URL обновить ваш IPv4 адрес. (пример)
Имеет свой ДНС сервер.

Если бы у меня был прямой статический ip, я бы наверно не стал писать скрипты, а просто поднял бы интерфейсы и радовался.
Но увы, как и у большинства людей у меня прямой динамический ip и нет возможности купить прямой статический (провайдер их не продает), а значит возникает еще две задачи.

1) При замене IPv4, надо будет обновить IPv4 и на конце поднятого туннеля
2) При замене IPv4, надо сообщить брокеру, о его изменении.

ну и еще одна задача, сделать поднятие туннеля и обновление в случае изменения IPv4 универсальным для разных linux систем, а то различные конфигурации сетевых настроек в разных системах — меня утомляют.

Комментарии в скрипте я оставил специально на ENG.

Первый скрипт создает или удаляет туннель IPv6. (используется команды start/stop)

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

-----------------Описание-переменных-для-ipv6tunnel----------------------------------------------------------

#Name Tunnel — Имя вашего туннеля. Может быть любым.
HE_IPv6=«he-ipv6»

#Server IPv4 address: — IP-адрес туннельного сервера.
IPV4_S=«216.66.80.90»

#Client IPv6 address: — IPv6-адрес вашего конца туннеля.
IPV6_C=«2001:470:aaaa:ccc::2/64»

#Интерфейс с прямым ip
INT_WAN=«ppp0»

-----------------начало-скрипта-ipv6tunnel------------------------------------------------------------------------
#!/bin/bash
# Create 6in4 tunnel endpoint script
# for use with http://www.tunnelbroker.com (Hurricane Electric)
# C 2010  icCE aka TuLiss (tuliss@gmail.com)
# Distributed under the terms of the GNU General Public License v3

#Name Tunnel
HE_IPv6="he-ipv6"

#Server IPv4 address:
IPV4_S=""

#Client IPv6 address:
IPV6_C=""

#Interface Wan
INT_WAN="ppp0"

#Tunel ttl
TUN_TTL="255"

DESC="6in4"

#WAN IP
WAN_IP=$(ip addr show $INT_WAN | awk '/inet/ {print $2}')

case "$1" in
 start)
        echo "Starting $DESC tunnel"
        ifconfig $HE_IPv6 &>/dev/null
        if [ $? -eq 0 ]; then
         echo "Tunnel $HE_IPv6 already exists"
        exit 1
        fi

        ip tunnel add $HE_IPv6 mode sit remote $IPV4_S local $WAN_IP ttl $TUN_TTL
        ip link set $HE_IPv6 up
        ip addr add $IPV6_C dev $HE_IPv6
        ip route add ::/0 dev $HE_IPv6
        ;;

 stop)
        echo "Stopping $DESC tunnel"
        ifconfig $HE_IPv6 &>/dev/null
        if [ $? -ne 0 ]; then
         echo "Tunnel $HE_IPv6 does not exist"
        exit 1
        fi

        ip link set $HE_IPv6 down
        ip tunnel del $HE_IPv6
        ;;

        *)
          echo "Usage: $0 {start|stop}" >&2
         exit 1
esac
exit 0


-----------------конец-скрипта-ipv6tunnel------------------------------------------------------------------------

Второй скрипт, который позволяет передать новый IPv4 адрес брокеру и обновить его на конце вашего туннеля.

-----------------Описание-переменных-для-ipv6update----------------------------------------------------------

IPV4ADDR — так как у нас динамический ip, то оставляем AUTO

MD5PASS — ваш пароль, который используется при входе на вашу страницу брокера в виде md5.
Для преобразования пароля в md5 выполните команду:
echo -n 'yourpassword' | md5sum, полученное значение и будет ваш пароль в md5.

USERID — ID пользователя, не путайте его с логином пользователя для входа на сайт брокера. ID представляет из себя длинную последовательность цифр и букв, посмотреть его можно на странице , сразу после <Name:>

GTUNID — ID туннеля, указан на странице настройки туннеля в поле «Global Tunnel ID»

INT_WAN — Интерфейс с прямым ip.

#Name Tunnel — Имя вашего туннеля. Может быть любым. Должно совпадать с именем в первом скрипте.
HE_IPv6=«he-ipv6»

-----------------начало-скрипта-ipv6update-----------------------------------------------------------------------
  
#!/bin/bash
# 6in4 tunnel endpoint update script
# for use with http://www.tunnelbroker.com (Hurricane Electric)
# C 2010  icCE aka TuLiss (tuliss@gmail.com)
# Distributed under the terms of the GNU General Public License v3

#IPV4ADDR WHERE:
#    * set ipv4b='AUTO' if you want to set the variable to the requesting client's IP address.
#    * set ipv4b='your_public_ipv4_address' if you want to manully provide the address.
IPV4ADDR="AUTO"

#The MD5 Hash of your password
# * Try echo -n 'yourpassword' | md5sum if you need to produce the MD5 Hash of your password
MD5PASS=""

#The UserID from the main page of the tunnelbroker (not your username)
USERID=""

#The Global Tunnel ID from the tunnel_details page
GTUNID=""

#Name IPV6 tunnel
HE_IPv6="he-ipv6"

#Interface Wan
INT_WAN="ppp0"

WAN_IP=$(ip addr show $INT_WAN | awk '/inet/ {print $2}')

output=$(curl -ksSm30 "https://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=$IPV4ADDR&pass=$MD5PASS&user_id=$USERID&tunnel_id=$GTUNID")

if [ "$output" == "That IPv4 endpoint is already in use." ]; then
   echo "That IPv4 endpoint is already in use. $WAN_IP"
  elif [ "$output" == "Your tunnel endpoint has been updated to: $WAN_IP" ]; then
   ip tunnel change $HE_IPv6 local $WAN_IP
   echo "$output"
  else
   echo "Houston, We've Got a Problem!"
fi


-----------------конец-скрипта-ipv6update-----------------------------------------------------------------------

Сохраняем скрипты и делаем их исполняемыми.

Запускаем первый скрипт:
# ./ipv6tunnel start

Если все хорошо, то увидим:
Starting 6in4 tunnel.

ifconfig смотрим появился ли he-ipv6 туннель.

he-ipv6 Link encap:IPv6-in-IPv4
inet6 addr: fe80::xxxx:yyyy/128 Диапазон: Ссылка
inet6 addr: 2001:470:aaaa:ccc::2/64 Диапазон: Общий

Теперь обновим IPv4, выполнив второй скрипт
# ./ipv6update
Your tunnel endpoint has been updated to: ваш_IP

Если IPv4 не изменился то получим:
That IPv4 endpoint is already in use. ваш_IP

Пробуем сделать пинг.

ping6 ipv6.google.com или ping6 freebsd.org

Должен получится ответ:

PING ipv6.google.com(2a00:1450:8001::63) 56 data bytes
64 bytes from 2a00:1450:8001::63: icmp_seq=1 ttl=55 time=74.2 ms
64 bytes from 2a00:1450:8001::63: icmp_seq=2 ttl=55 time=73.1 ms

Теперь скрипт ipv6tunnel можно добавить в загрузку, а ipv6update ставить в cron и радоваться.
От себя скажу, что правильнее всего, написать скрипт который будет мониторить изменения ip адреса и запускать ipv6update.

>>>>>>>>>>>>>>>>>>>>Bonus<<<<<<<<<<<<<<<<<<<<

Раздача IPv6 в локальную сеть.

По умолчанию, туннельный брокер Hurricane Electric предоставляет нам две подсети с маской /64: одна используется для связи между вашим роутером и туннельным сервером брокера, а вторая (с адресом, отличающимся на единичку в середине, он выделены жирным цветом) предназначена для использования компьютерами в вашей локальной сети, и называется в веб-интерфейсе «Routed /64».

Ради простоты примеров, предположим, что вашей Routed-подсетью оказалась 2001:470:aaab:ccc::/64, а интерфейсом, к которому подключена локальная сеть, является eth1. Так же учтем, что файрвол выключен.

Включаем маршрутизацию IPv6, для этого в /etc/sysctl.conf находим,

net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1

если их нет то прописываем руками.

Далее загрузим настройки sysctl из файла /etc/sysctl.conf

# sysctl -p

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

ip addr add 2001:470:aaab:ccc::1/64 dev eth1

Теперь настроем клиентский компьютер.

Добавим к интерфейсу eth0 IPv6, пусть он будет ::2

ip addr add 2001:470:aaab:ccc::2/64 dev eth0

Добавим маршрут по умолчанию, для IPv6 сети.

ip -6 ro add ::/0 via 2001:470:aaab:ccc::1 dev eth0

Пробуем сделать пинг шлюза, а потом какого либо сервиса в интернете.

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

route -A inet6 -n или ip -6 ro sh

Для Windows 7 достаточно будет указать адреса в параметрах сетевого соединения <Протокол Интернета версия 6>

Так же можно проверить работу IPv6 посетив сайт HART

Для упращение процедуры выдачи IPv6 в локальной сети, можно использовать radvd или dhcpv6.
В Интернете достаточно материала по их настройки.

Если у вас есть вопросы, вы можете задать их на канале #ipv6-ru (Жмите, дополнительных клиентов не надо ставить)
Отдельное спасибо все на канале #gentoo-ru
Tags:
Hubs:
Total votes 5: ↑4 and ↓1 +3
Views 41K
Comments Comments 8