Адреса IPv4 заканчиваются. По состоянию на 30 ноября в мире их осталось 2.73% и это количество закончится через 3 месяца. Пора готовиться к переходу на IPv6. Мои мысли по этому вопросу вы можете почитать в статье «IPv6: что год грядущий нам готовит».
Крайне маловероятно, что ваш провайдер предлагает подключение на адресах IPv6. Да и ресурсов IPv6 достаточно мало. Начать эксперименты можно, построив бесплатный туннель на брокера туннелей IPv6
Минус в том, что туннель строится с заранее описанного в заявке адреса, и если он динамический, то для построения туннеля вам придётся каждый раз обновлять конфигурацию на HE. К счастью, это можно делать автоматически перед запуском туннеля, но нужно писать скрипт.
Туннель может работать через NAT, производимый Airport Express/Extreme/Time Capsule, и, возможно другими маршрутизаторами.
Для начала нужно зарегистрироваться на
После регистрации создаём туннель («Create Regular Tunnel»):
В поле «IPv4 endpoint (your side of the tunnel)» нужно указать внешний адрес, с которого будет устанавливаться туннель. Например, на внешнем интерфейсе Time Capsule у меня стоит постоянный адрес 94.45.55.146, а Mac, с которого я строю туннель, имеет адрес 192.168.98.10. В этом поле нужно указать 94.45.55.146, а не 192.168.98.10.
Для подсказки в поле «You are viewing from IP» показывается ваш внешний адрес. У меня там стоит 2001:470:1f14:fee::2, так как я пишу статью c уже настроенным IPv6.
Ещё из списка «Which Server Is Closest to you» нужно выбрать сервер, к которому время отклика лучше. Географическая близость не при чём. Для примера, если вы находитесь в Киеве, то необязательно сервер из Киева будет ближе сервера из Франкфурта. Ваш провайдер может иметь каналы в Германию, но не иметь пиринга с UA-IX. Позапускайте ping на указанные сервера и выберите лучший для вас.
Я получил такой туннель:
Для получения конфигурации из выпадающего списка «Example IPv6 Tunnel Configurations by OS» выберите NetBSD/Mac OS X (если вы дочитали до этого момента, то вы и так знаете, что Mac OS X построена на базе BSD):
Я использую слегка модифицированную версию (подставьте ваши значения из конфигурации туннеля):
$ sudo ifconfig gif0 tunnel Client_IPv4_address Server_IPv4_address $ sudo ifconfig gif0 inet6 Client_IPv6_address alias $ sudo ifconfig gif0 inet6 Client_IPv6_address Server_IPv6_address prefixlen /64 $ sudo route -n add -inet6 default Server_IPv6_address
Эта конфигурация рассчитана на прямое подключение, когда на интерфейсе вашего компьютера прописан внешний IP-адрес, который вы указали при создании туннеля. В моём случае ноутбук ходит через NAT и на интерфейсе стоит адрес 192.168.98.10. Поэтому я изменил первую команду. Моя конфигурация такова:
$ sudo ifconfig gif0 tunnel 192.168.98.10 216.66.84.46 $ sudo ifconfig gif0 inet6 2001:470:1f14:fee::2 alias $ sudo ifconfig gif0 inet6 2001:470:1f14:fee::2 2001:470:1f14:fee::1 prefixlen /64 $ sudo route -n add -inet6 default 2001:470:1f14:fee::1
Если всё прошло без ошибок, то интерфейс gif0 у вас будет в состоянии UP:
$ ifconfig gif0 gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280 tunnel inet 192.168.98.10 --> 216.66.84.46 inet6 fe80::225:bcff:fedc:ddae%gif0 prefixlen 64 scopeid 0x2 inet6 2001:470:1f14:fee::2 --> 2001:470:1f14:fee::1 prefixlen 128
Дефолтовый маршрут IPv6 будет идти через gif0:
$ netstat -rn -f inet6 default 2001:470:1f14:fee::1 UGSc gif0
Обратите внимание на то, что два стека (IPv4 и IPv6) работают независимо. К ресурсам IPv4 вы будете обращаться через IPv4 default route, а к ресурсам IPv6 — через IPv6 default route. При поднятом туннеле IPv6 вы будете полноценно работать со всеми привычными сайтами и протоколами.
Проверяем (не забудьте, что нужно использовать ping6/traceroute6, а не ping/tracecoute):
$ ping6 ipv6.google.com PING6(56=40+8+8 bytes) 2001:470:1f14:fee::2 --> 2a00:1450:8007::68 16 bytes from 2a00:1450:8007::68, icmp_seq=0 hlim=57 time=53.959 ms 16 bytes from 2a00:1450:8007::68, icmp_seq=1 hlim=57 time=53.507 ms
Трасса:
$ traceroute6 ipv6.google.com traceroute6 to ipv6.l.google.com (2a00:1450:8007::63) from 2001:470:1f14:fee::2, 64 hops max, 12 byte packets 1 ctrld-2.tunnel.tserv11.ams1.ipv6.he.net 51.220 ms 48.980 ms 48.551 ms 2 gige-g2-20.core1.ams1.he.net 42.653 ms 43.184 ms 50.666 ms 3 pr61.ams04.net.google.com 43.669 ms 45.181 ms 77.431 ms 4 2001:4860::1:0:8 44.318 ms 50.518 ms 43.950 ms 5 2001:4860::1:0:11 113.400 ms 2001:4860::1:0:10 57.398 ms 58.136 ms 6 2001:4860::2:0:48d 56.788 ms 2001:4860::2:0:48c 51.554 ms 2001:4860::2:0:48d 53.205 ms 7 2001:4860:0:1::c7 57.076 ms 51.348 ms 2001:4860:0:1::c9 59.842 ms 8 2a00:1450:8007::63 51.139 ms 51.923 ms 51.441 ms
Для вас может стать сюрпризом, что при доступе через IPv4 DNS
$ dig @8.8.8.8 google.com aaaa ;; AUTHORITY SECTION: google.com. 600 IN SOA ns1.google.com. dns-admin.google.com. 1435074 7200 1800 1209600 300
А если то же самое запросить через IPv6, то ответ будет получен:
$ dig @2001:470:20::2 google.com aaaa ;; ANSWER SECTION: google.com. 300 IN AAAA 2a00:1450:8005::68
Это логично, так как популярные операционные системы могут запрашивать запись AAAA даже при отсутствии подключения IPv6 и, получив правильный ответ, не смогут подсоединится к ресурсу. Доказать предметно я не могу, нужно исследовать вопрос, но факт есть факт. Можно почитать статью “
Поэтому для завершения настроек нужно сконфигурировать резолвинг через DNS-сервер IPv6, который указан в информации по туннелю.
$ sudo vim /etc/resolv.conf nameserver 2001:470:20::2 # nameserver 8.8.8.8
Это не совсем правильный метод. Во-первых при любом изменении сетевой конфигурации resolv.conf перетрётся и там снова будет DNS, указанный в настройках через GUI или же адрес, полученный по DHCP. А во-вторых при опускании туннеля IPv6 система будет использовать указанный адрес, через IPv4 он будет недоступен, и вы окажетесь без Интернет. Поэтому помните об этой особенности и при необходимости подправьте resolv.conf.
Кстати, мой блог The Apple Geek работает и на IPv6:
$ traceroute6 high-sale.ru traceroute6 to high-sale.ru (2001:470:1f08:1120::2) from 2001:470:1f14:fee::2, 64 hops max, 12 byte packets 1 ctrld-2.tunnel.tserv11.ams1.ipv6.he.net 51.299 ms 49.283 ms 49.060 ms 2 gige-g2-20.core1.ams1.he.net 42.792 ms 44.847 ms 42.974 ms 3 10gigabitethernet1-4.core1.lon1.he.net 50.552 ms 51.724 ms 50.053 ms 4 gige-gbge0.tserv5.lon1.ipv6.he.net 55.614 ms 55.965 ms 57.411 ms 5 ctrld-1-pt.tunnel.tserv5.lon1.ipv6.he.net 50.898 ms 56.757 ms 51.128 ms
Пока тяжело назвать это стабильным решением, за сутки туннель на мой сервер один раз падал и пришлось его подымать вручную. Но «дорогу осилит идущий».
Полезные ресурсы
Продолжить изучение IPv6 можно например, чтением «
Узнать свой IPv6-адрес можно на сайте
Если вы зайдёте на сайт
Посмотреть текущее состояние IPv6 по миру можно в отчёте «
В заключение
Я показал, как строить туннель вручную командами в терминале для случая постоянного IP-адреса. Автоматический старт рассмотрю в отдельной статье.
Если у вас динамический адрес, то перед подключением вам нужно зайти в настройки туннеля и поменять клиентский адрес:
Для определения внешнего адреса можно зайти на
$ vim .bashrc alias myip="dig +short myip.opendns.com @resolver1.opendns.com" $ myip 94.45.55.146
Для автоматизации изменения динамического адреса пригодится информация:
Please use the format: https://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=$IPV4ADDR&pass=$MD5PASS&user_id=$USERID&tunnel_id=$GTUNID WHERE: $IPV4ADDR = The new IPv4 Endpoint 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 manually provide the address. $MD5PASS = The MD5 Hash of your password Try echo -n 'yourpassword' | md5sum if you need to produce the MD5 Hash of your password $USERID = The UserID from the main page of the tunnelbroker (not your username) $GTUNID = The Global Tunnel ID from the tunnel_details page Your IPv4 endpoint must be pingable. If you are blocking ICMP, please allow 66.220.2.74 through your firewall.
P.S. Кто там говорил про то, что я ударился в популизм в ущерб гиковости? ;-)