Решил и я написать о IPv6 тоннеле… Что ж, друзья… Вы на просторах интернета пишите очень интересно. Один предлагает повключать шестой на всех интерфейсах (ipv6_enable=”YES”), другой пробует напихать кучу параметров в rc.conf, да не просто напихать, а бездумно. К примеру для обычного десктопа советчики пишут невозмутимо про ipv6_router_enable=”YES”. Иные как-то умудряются поднять прямо на физическом интерфейсе дополнительный IP. Мне же нужен всего-лишь интернет адрес с интернет шлюзом. Не более. Я решил сделать не на глазок это дело, а как всегда: чтобы не возвращаться более к таким вопросам. Строить буду тоже на псевдоустройстве GIF. В результате у меня получился интерфейс, который поднимается только когда нужен для интернета. Все остальные интерфейсы мой вариант не трогает. Конечно я реализовал для своего любимого MPD, но думаю не составит большого труда адаптировать скрипты и фанатам PPPD.
Итак, в этом посте я преследую 3 вещи:
1. Установить себе IPv6 тоннель (мои провайдеры очень плачевные в этом плане, академики же все).
2. Обновлять динамический IP при страрте MPD5 для тоннеля (а не так как пишут в интернетах, что засираются в-шестым все интерфейсы).
3. Обновлять IPv4 на DNS хостинге CloudFlare (а IP, как я уже написал, у меня динамический).
Что ж. Начинаю по порядку.
1. Регистрируюсь на IPv6 Tunnel Broker
Регистрация на IPv6 Tunnel Broker от Hurricane Electric (большое им спасибо, кстати, за их работу) не занимает много времени и не высасывает мозг. Если раньше пользовались сервисами Hurricane Electric, то можно смело вводить те же логин и пароль. Далее при помощи пункта меню Create Regular Tunnel я создал тоннель. Сервер конечно лучше брать который географически находится поближе.
2. Регистрируюсь на DNS хостинге CloudFlare
Всё элементарно, но есть куча плюсов: никто Вас (по крайней мере пока) не собирается банить, сервис гибкий и удобный и самое главное есть защита от мелких атак, спамботов и прочей нечисти. Минус для новичков интернета – нужен свой домен (по крайней мере указать днсы). Здесь у меня тоже есть свой подход. Я не пользуюсь их ddclient’ом, потому что он уныл. Не хочу я зависеть от этой безделушки и всё тут. Тем более, что у CloudFlare есть свой простой API.
3. Соединяю всё скриптами при поднятии/опускании MPD-интерфейса.
Поясняю почему: всё, что я нашёл в интернете претендует конечно на победу, но зачем мне для единственного IPv6 интерфейса громоздить ipv6_enable=”YES” в rc.conf? Ответа нет? Отлично! Значит у меня этим будет заведовать демон интернет подключений!
Итак, я прописываю в мпд старт/стоп скрипты:
1 2 3 4 5 | pppoe_client1: create bundle static B2 #set iface route default set iface up-script /usr/local/etc/mpd5/up_inet.sh set iface down-script /usr/local/etc/mpd5/down_inet.sh |
Соответственно вот сами скрипты:
up_inet.sh
1 2 3 4 5 6 | #!/bin/sh /sbin/route delete default /sbin/route add default -iface ng0 /usr/local/etc/mpd5/up_dnsactual.sh /usr/local/etc/mpd5/up_ipv6.sh |
down_inet.sh
1 2 3 4 5 | #!/bin/sh /usr/local/etc/mpd5/down_ipv6.sh /sbin/route delete default /sbin/route add default 192.168.30.1 |
Далее при поднятии интерфейса работает скрипт up_dnsactual.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #!/bin/sh # # CloudFlare CFPATH=/etc/freedns CFUSER=mailuser_at_example.com CFHOST=dynamicuser.example.com CFTOKN=длинный API ключ, брать здесь: https://www.cloudflare.com/my-account.html if test ! -d $CFPATH then mkdir -p $CFPATH fi if test -f $CFPATH/ip.txt then CACHEIP=$(cat $CFPATH/ip.txt) fi echo Cached ip is $CACHEIP CURRENTIP=$(/sbin/ifconfig ng0 | /usr/bin/grep inet | /usr/bin/awk '{print $2}') if [ "$CURRENTIP" = "$CACHEIP" ] then # Both IP are equal echo "Update not required..." else # The IP has changed # Updating CloudFlare echo "Updating CloudFlare with " $CURRENTIP fetch -q -o - "https://www.cloudflare.com/api.html?a=DIUP&ip=$CURRENTIP&u=${CFUSER}&tkn=${CFTOKN}&hosts=${CFHOST}" echo `date` "Updating log with IP " $CURRENTIP >> $CFPATH/ip.log fi rm -f $CFPATH/ip.txt echo $CURRENTIP > $CFPATH/ip.txt |
И последнее приготовление: скрипты для управления тоннелями:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/bin/sh # # TunnelBroker (IPv6) CURRENTIP=$(/sbin/ifconfig ng0 | /usr/bin/grep inet | /usr/bin/awk '{print $2}') TUNNELBROKER=Здесь вписать Server IPv4 Address USERID=имя_пользователя в TunnelBroker PASSWORD=пароль в TunnelBroker TUNNELID=идентификатор тоннеля в TunnelBroker BROKERGW="2001:000:1ы12:ящп::1 (нужно вписать Server IPv6 Address без /64)" BROKERIP="2001:000:1ы12:ящп::2 (нужно вписать Client IPv6 Address без /64)" /sbin/ifconfig gif0 create /sbin/ifconfig gif0 tunnel $CURRENTIP $TUNNELBROKER /sbin/ifconfig gif0 inet6 $BROKERIP $BROKERGW prefixlen 128 /sbin/route -n add -inet6 default $BROKERGW /sbin/ifconfig gif0 up /usr/bin/fetch -q -o - "https://${USERID}:${PASSWORD}@ipv4.tunnelbroker.net/ipv4_end.php?ip=${CURRENTIP}&tunnel_id=${TUNNELID}" echo |
И так же невозмутимо интерфейс ликвидируется при потере связи, смене IP, короче рассоединении:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/bin/sh # # TunnelBroker (IPv6) CURRENTIP=$(/sbin/ifconfig ng0 | /usr/bin/grep inet | /usr/bin/awk '{print $2}') TUNNELBROKER=Здесь вписать Server IPv4 Address BROKERGW="2001:000:1ы12:ящп::1 (нужно вписать Server IPv6 Address без /64)" BROKERIP="2001:000:1ы12:ящп::2 (нужно вписать Client IPv6 Address без /64)" /sbin/ifconfig gif0 down /sbin/route -n delete -inet6 default $BROKERGW /sbin/ifconfig gif0 inet6 $BROKERIP $BROKERGW delete /sbin/ifconfig gif0 -tunnel $CURRENTIP $TUNNELBROKER /sbin/ifconfig gif0 inet $CURRENTIP delete /sbin/ifconfig gif0 destroy |
Итого: при наличии связи у меня появился IPv6 интерфейс, и соответственно всё прекрасно исчезает, когда интерфейс не нужен.
1 2 3 | $ host smallcms.sokoltele.com smallcms.sokoltele.com has address 178.121.91.64 smallcms.sokoltele.com has IPv6 address 2001:470:1f12:bdc::2 |
Протестировать IPv6 тоннель можно здесь: http://test-ipv6.com/, http://ipv6.google.com/, http://v6.testmyipv6.com/.
Пора обновлять, ipv6_enable=”YES” уже же не моден :) да и HE стал баловаться и тот же IRC трафик по дефолту фильтрует и даёт включить только после прохождения сертификации, хоть она у них конечно скорее развлечение :)
Да, забыл написать. Вся затея-то была торрентов (читай: прона) ради. :)
А я себе на шлюзе настроил и теперь дома просто дуалстек :)
Недавно как раз долго голову ломал почему же фря не хочет сама RA принимать и этот самый IPv6 подхватывать, оказалось как раз против такого IPv6 for all в rc.conf теперь своеобразная защита :)