2009-09-02

ipv6 туннели

Настроил - потом забыл как. Пол часа на ветер вспоминая.
Для того и нужны блоги - чтобы таких ошибок не повторять.

Итак. Как пробить ipv6 туннель на свои компы.
Имеем - две убунты 8.04, разделённые ipv4 сеткой провайдера. Напрямую пингуются.
И есть openvpn туннель между ними. Чтобы не нервировать провайдера :)
Вот через openvpn будем пробрасывать ipv6.
Прямую поддержку openvpn вроде пока не даёт - но это пока не сильно напрягает.

Небольшой рисунок что есть:
NET -- mine -- zyxel == [CTC] == dlink -- bridge
-- ethernet 100/MB
== adsl ~1/MB
[CTC] - интернет провайдер
mine <-> bridge соединены openvpn туннелем.


Хотим чтобы NET была представлена в "глобальной" ipv6 сети - но через bridge.

роутер zyxel - adsl модем.
внутренний адрес 192.168.19.1 - отправляет всё на main.
внешний адрес динамический A.B.0.0/17 + dyndns

сервер mine - интернет сервер локалки предприятия.
eth0 ipv4=192.168.16.16 - смотрит в локалку
eth1 ipv4=192.168.19.2 - внешняя сетка - подключена к модему
tun0 ipv4=10.8.0.1 - openvpn сервер.

хост-роутер bridge.
eth0 ipv4=192.168.1.33 - смотрит в домашнюю сетку
tun0 ipv4=10.8.0.6 - openvpn туннуль на main

роутер dlink - adsl модем+роутер.
внутренний адрес 192.168.1.1 - отправляет всё на bridge
внешний адрес динамический A.B.0.0/17 - привязан через dyndns

Не забываем на всех задействованных серверах поднимать модуль:
modprobe ipv6

Поднимаем туннель в ipv6 на bridge.
Начальная часть сделана по аналогии с этим примером.

Регистрируемся на freenet6.net - ставим пакет
apt-get install tspc
Редактируем /etc/tsp/tspc.conf
Вводим пароль и адрес из письма при регистрации
Сервер "из письма" не заработал - потому сразу выбираем сервер amsterdam.
userid=XXX
passwd=YYY
server=amsterdam.freenet6.net
# нужна подсеть - раскомментируем строки:
host_type=router
if_prefix=eth0
prefixlen=64

Остальное оставляем без изменений.

/etc/init.d/tspc stop
/etc/init.d/tspc start

Заметил, что restart в tspc сделан криво и не всегда срабатывает.

Проверяем наличие строчки:
inet6 addr: 2001:X:Y:Z::1/64 Диапазон:Общий
ifconfig eth0 | grep ipv6
Значит всё здорово. Если не здорово - смотрим логи tspc, tcpdump.
Запоминаем адрес подсетки что нам дали. 2001:X:Y:Z - будут браться отсюда.
Это наша внешняя подсетка. Может быть на всю жизнь :)

Опыт показывает что tspc достаточно не надёжный туннель. Из-за того что adsl соединение рвётся -
туннель обрывается и не восстанавливается. Что крайне плохо. Для экспериментов сойдёт. Но..
Вариант - регистрируемся на Hurricane Electric
Желательно наличие статического белого ipv4 адреса - но редко меняющийся динамический белый
сойдёт. Можно сделать 4 туннеля в одном аккаунте - даже /48 :)
После того как туннель выделили - можно получить команды для запуска туннеля - прямо на сайте.

Итак. bridge у нас теперь находится в ipv6 сети и даже может роутить /64 подсетку.

Проверяем:
ping6 -n ipv6.google.com
Внешние ipv6 хосты видим - и они нас видят. Пляшем дикие танцы :)

Поднимаем туннель в локалку на mine:
ip tunnel add sit1 ttl 4 mode sit remote 10.8.0.1 local 10.8.0.6
Не забываем запустить интерфейс туннеля:
ifconfig sit1 up
или:
ip link set dev sit1 up
Добавляем роутинг:
ip -6 route add 2001:X:Y:Z::/64 dev sit1

tspc автоматически разрешает форвардинг ipv6 - для других способов не забываем его разрешить:
sysctl net.ipv6.conf.all.forwarding=1
(и добавляем строчку в /etc/sysctl.conf)

С bridge закончили.
Переходим к mine.

Добавляем придуманный статический ipv6 адрес:
ifconfig eth0 add 2001:X:Y:Z:1::16
или:
ip -6 addr add 2001:X:Y:Z:1::16 dev eth0

Так. Теперь поднимаем туннель на bridge:
ip tunnel add sit1 ttl 4 mode sit remote 10.8.0.6 local 10.8.0.1
ifconfig sit1 up
ip -6 route add ::/0 dev sit1
sysctl net.ipv6.conf.all.forwarding=1


Проверяем:
ping6 -c4 2001:X:Y:Z::1
ping6 -c4 -n ipv6.google.com


Поднимаем интерфейс на какой-то другой машине сети:
ifconfig eth0 add 2001:X:Y:Z:1::22/80
ip -6 route add default via 2001:X:Y:Z:1::16
ping6 -n ipv6.google.com

Проверяем с bridge:
ping6 -n 2001:X:Y:Z:1::16
ping6 -n 2001:X:Y:Z:1::22

Можно проверить из какого-нибудь бесплатного ipv6 сетевого сервиса доступность своих хостов :)

Осталось настроить DHCPv6 - мы же не хотим терять контроль над сетью -
и значит самоуправства ipv6 мы не позволим? Но и вручную хосты настраивать это уже фанатизм.
Настроить rDNS - в tspc не понятно как, а Hurricane Electric даёт возможность это сделать.
Настроить DNS - ну это уже проще при наличии DHCPv6.
Ну и новые настройки iptables6

У нас есть ipv6-готовая сетка. Осталось дождаться когда провайдер сподобится раздавать ipv6 адреса. 2-3 года осталось ждать - все там будем. Но тестировать и жить можно уже сейчас :)

Чтобы не забыть - сразу добавим настройки в /etc/network/interface
(старые настройки для ipv4 не трогаем - ipv6 им не мешают)

auto eth0
# ipv4 настройки локального адреса:
iface eth0 inet static
address 192.168.16.16
netmask 255.255.255.0
network 192.168.16.0
broadcast 192.168.16.255

iface eth0 inet6 static
pre-up modprobe ipv6
address 2001:X:Y:Z:1::16
netmask 80
gateway 2001:X:Y:Z::1

# "Внешний" интерфейс до модема:
auto eth1
iface eth1 inet static
address 192.168.19.2
netmask 255.255.255.0
network 192.168.19.0
broadcast 192.168.19.255
gateway 192.168.19.1

Осталось придумать как туннели сюда вписать..

Комментариев нет: