А вот захотелось мне поработать с ipv6, дабы понять, что это за зверь, и какое нас с этим зверем может ждать будущее. Провайдер мой такое счастие сам не дает, поэтому будем пользоваться услугами сторонних ресурсов, а именно
GoGoNet. О том, что представляет из себя шестая версия IP протокола, также известная как IP Next Generation (IPng), распространяться не буду, ибо, во-первых, сам еще слабо прощупал эту тему, а во-вторых, материала для "прощупывания" в Сети немало. Начать можно с
Википедии, и дальше по ссылкам.
Заиметь IPv6 адрес сегодня можно, по сути, четырьмя способами:
1) прямым, то есть получив адрес от провайдера;
2) 6to4, интересен при наличии IPv4 статики;
3) туннельным, то есть с помощью так называемых "туннельных брокеров";
4) teredo, протокол, инкапсулирующий ipv6трафик в UDP-датаграммы ipv4.
Краткое описание указанных способо, а также перечисление основых плюсов-минусов использования того или иного из них можно поглядеть
здесь.
В данной заметке речь пойдет о туннельном брокере gogonet. Чтобы получить доступ к его сервисам, следует
зарегиться. Так как это социальная сеть, то при регистрации спрашивается куча всякой хрени ;). Внутри этой соцсети есть сервис Freenet6, который и предоставляет доступ к ipv6-вселенной. С ним можно работать и анонимно, и авторизованно. Разница вся в том, что при анонимном подключении ipv6 вашего туннеля будет новым при каждом подключении. А, согласитесь, динамический ipv6 - это даже не смешно. Фичей "авторизованного" туннеля является выдача в перманентное пользование одного и того же адреса. Итак, регаемся во Freenet6 -
тут. После успешной регистрации на мыло свалится письмо, где будут указаны userid/password, которые были вбиты при sign up процедуре. Они нам еще пригодятся ;)
Далее.
Отсюда грузим доку по конфигурации клиента и сам клиент. В доке много полезного, так что она обязательна к прочтению, или хотя бы к пролистыванию. Почему то сорцы клиента отдаются в виде файла gw6c-6_0-RELEASE-src.exe, однако на самом деле это обычный .tgz, так что
mv gw6c-6_0-RELEASE-src.exe gw6c-6_0-RELEASE-src.tgz
tar -xvf gw6c-6_0-RELEASE-src.tgz
cd gw6c-6_0_1/
В файле INSTALL имеются необходимые указания к сборке. Если кратко, то нужно иметь dev-версии некоторых пакетов (у меня, к примеру, потребовалось доустановить лишь libssl-dev), а собирать/устанавливать такой командой:
make ostype=linux installdir=/usr/local/bin/gw6/ install
Так как configure-скрипт недоступен, то понять, что не хватает каких-либо исходников, можно по ошибке компиляции и ругани вроде
bufaux.c:54:24: error: openssl/bn.h: Нет такого файла или каталога
А где его взять? Все просто:
wajig find-file bn.h
libssl-dev: /usr/include/openssl/bn.h
wajig install libssl-dev
Итак, софтина скомпилировалась и установилась. Если использовать анонимное соединение, то уже можно запускать /usr/local/gw6/bin/gw6c. Она сама распочухает, как вы получаете инет, и поднимет sit или tun интерфейс в зависимости от типа соединения.
А мы же пойдем настраивать /usr/local/gw6/bin/gw6c.conf
Вырез
72;в все лишнее, настройки вышли такие:
userid=delayer
passwd=ss21113a
server=amsterdam.freenet6.net
auth_method=any
host_type=host
prefixlen=64
if_prefix=
dns_server=
gw6_dir=/usr/local/gw6
auto_retry_connect=yes
retry_delay=30
retry_delay_max=300
keepalive=yes
keepalive_interval=30
tunnel_mode=v6anyv4
if_tunnel_v6v4=sit1
if_tunnel_v6udpv4=tun0
if_tunnel_v4v6=sit0
client_v4=auto
client_v6=auto
template=linux
proxy_client=no
broker_list=tsp-broker-list.txt
last_server=tsp-last-server.txt
always_use_same_server=no
log_file=0
log_filename=/var/log/gw6.log
log_rotation=yes
log_rotation_size=32
log_rotation_delete=no
Вообще, конфигурационный файл неплохо комментирован, да и в доке каждый параметр детально описан, так что проблем с конфигурацией возникнуть не должно. Пара комментариев:
Директива server выставленая согласно этой
ссылке. Если выставить, согласно документации, authenticated.freenet6.net, то клиент отыщет наиболее оптимальный сервер из имеющегося пула, запишет его в tsp-last-server.txt, и будет ходить за ним при каждом запуске туда. Так что можно облегчить ему жизнь.
Опция dns_server, если я правильно понял, позволяет указать адрес сервера, который обеспечивает для данного адреса reverse DNS. Это интересно, когда есть свой домен, и имеется возможность рулить IPv6-записями dns-сервера.
Ну и log_file лучше для первого запуска вывести в 3, дабы видеть, что происходит, и получать информацию для анализа в случае проблем.
Итак, первый запуск:
Built on ///Linux inspire 2.6.31-1-686 #1 SMP Sun Nov 15 20:39:33 UTC 2009 i686 GNU/Linux///.Received a TSP redirection message from Gateway6 authenticated.freenet6.net (1200 Redirection) The Gateway6 redirection list is [ taipei.freenet6.net, sydney.freenet6.net, amsterdam.freenet6.net, montreal.freenet6.net ]. The optimized Gateway6 redirection list is [ amsterdam.freenet6.net, montreal.freenet6.net, sydney.freenet6.net, taipei.freenet6.net ]. amsterdam.freenet6.net is an unknown host, do you want to add its key?? (Y/N) y
Согласившись, мы получаем публичный ключ удаленного сервера и устанавливаем с ним соединение:
Перезапустив для верности клиента, смотрим лог:
cat /var/log/gw6.log | grep IPv6
2010/01/24 19:37:24 I gw6c: Checking for Linux IPv6 support...
2010/01/24 19:37:24 I gw6c: IPv6 support found.
2010/01/24 19:37:24 I gw6c: Your IPv6 address is 2001:05c0:1400:000b:0000:0000:0000:5d07.
Соединение установлено, адрес получен, ifconfig tun0 радует своим выводом:
root@inspire:~/download# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet6 addr: 2001:5c0:1400:b::5d07/128 Scope:Global
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1280 Metric:1
RX packets:613 errors:0 dropped:0 overruns:0 frame:0
TX packets:602 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:547393 (534.5 KiB) TX bytes:61258 (59.8 KiB)
Осталось лишь проверить работоспособность:
ping6 ipv6.google.com
PING ipv6.google.com(2a00:1450:8001::63) 56 data bytes
64 bytes from 2a00:1450:8001::63: icmp_seq=1 ttl=55 time=91.9 ms
Если зайти на сайт
KAME, то мы увидим танцующую черепашку (работает в iceweasel, chrome, konqueror), что говорит об ipv6-соединении ;)
Для автоматизации запуска добавим в /etc/rc.local до строчки exit 0
if [ -x /usr/local/gw6/bin/gw6c ]; then
cd /usr/local/gw6/bin/
./gw6c
fi