IPv6 и Доступ из интернет в домашнюю сеть
Зачем?
Вы на работе, или в поездке и вам нужны файлы, которые находятся у вас дома. Вам нужно посмотреть, что происходит у вас на даче, или в гараже. Возможно, вы оставили ребёнка с няней, и хочется посмотреть, чем они занимаются. Бывает, что нужно показать клиентам как что-то работает и лучше всего устроить демонстрацию через интернет. К тому же, это может быть целый поток клиентов. Нужно, чтобы клиенты могли не только посмотреть, но и что-то изменить и сделать это без вашей помощи. Кто-то скажет, что для решения таких задач нужен другой подход. Домашняя или локальная сеть может показаться кому-то неуместной. Для таких случаев больше подошёл бы хостинг. Почти соглашусь, тем более, что внешние сервисы мы тоже будем использовать, но доступ в локальную сеть при этом всё равно может быть необходим, особенно если вы используете камеры и/или другие устройства, которые не могут быть размещены на удалённом сервере. Ну и никуда не деться от популярной в последнее время темы «Умного дома» – вы ещё в дороге, но хотите уже сейчас что-то увидеть или включить у себя дома. Ответов на вопрос «Зачем?» может быть ещё много. В нашем случае основной задачей будет предоставление контроллеру «Умного дома» i-Tone выделенного IP адреса для доступа к нему из внешней сети Интернет. Решив её, мы сможем решить и остальные задачи. Через некоторое время после того, как мы сделаем доступ извне в свою локальную сеть, мы уже не будем задаваться вопросом «Зачем?». Возможно, это будет нас смешить.
Честно говоря, задачка так себе – мало интересного. Решить её можно миллионом способов. Это так, но всё же, рассмотрим проблему, хотя бы для того, чтобы не объяснять всё в сотый раз своим друзьям и знакомым, которым это нужно (иногда они даже не знают об этом). Просто, скажем – иди почитай и если где-то не получится, я посмотрю.
Настроим всё, используя IPv6.
Почему IPv6?
Если у вас уже есть белый IPv4, который не меняется и нет никакого NAT, или IPv4 вы можете получить у провайдера, пусть даже придётся платить за этот IPv4 какие-то скромные деньги, то возможно вам будет интересно прочитать Почему я не могу подключиться к контроллеру из сети. Но в рамках статьи мы расширим задачу для себя, считая что нам мало одного IP. Нет, можно обойтись и одним, но если их много, это просто удобнее. Каждому устройству в локальной сети дадим белый IP.
Возможно, у вас ещё нет IPv4, но вы уверены, что можете его легко купить у своего провайдера рублей за 150 в месяц. Часто такая уверенность возникает со слов самого провайдера. Иногда получить IPv4 может оказаться немного сложнее чем, вы ожидали. Известен случай, когда провайдер предоставляющий интернет по всей стране, пообещал выдать постоянный IPv4 в течение 10! дней и не сделал этого до сих пор (прошло 2 месяца). Могу предложить потратить эти деньги с большей пользой – на них можно взять VPS/VDS. Хостеры часто предоставляют тестовый период, так что вы получите свой IPv4 раньше, чем успеете что-то оплатить. И ваши траты могут оказаться меньше, чем 150 руб./мес. Кроме белого IPv4 вы получите целый сервер с приличным количеством интернет-трафика. Как правило, вам могут дать при этом (возможно за символическую дополнительную плату в 1 руб./адрес) некоторое количество IPv6. Что делать с сервером – решайте сами. Ну, запустите на нём бесплатный игровой сервер Garry’s mod, или то, что вам больше понравится, если он вам совсем не нужен. Пусть подростки порадуются.
Железо.
Возможно эта информация будет для вас лишней, но я собираюсь настроить всё на древнем ноуте с Win Xp с выходом в сеть через 3G модем. Такой выбор железа гарантирует нам, что повторить наши эксперименты сможет почти каждый. К тому же такую конфигурацию можно разместить где угодно. Например, на даче (если есть перебои с электричеством, выручит аккумулятор ноута, и даже если сопрут – не жалко). В квартире, в которой идёт ремонт и надо постоянно давать ценные указюльки рабочим. При этом у нас есть ещё свои дела, и находиться там, где идёт ремонт, всё время мы не хотим. Даже в машине, если захочется. Ни что не помешает настроить это всё для Mac OS или Linux. Когда наиграемся и почувствуем себя уверенно, можно попробовать запустить всё на каком-нибудь китайском планшете с Android. Можно даже на телефоне, но у планшета экран побольше. Для «Умного дома» планшет кажется более подходящим. Про то, что можно просто и роутер настроить говорить не буду – кто хочет, пусть настраивает.
Где получить IPv6?
В общем случае начать можно со своего провайдера. Возможно, получить IPv6 можно у него. Если не получается, то есть ещё несколько способов. Все рассматривать не будем. Остановимся на туннельном брокере gogo6 ( комментарии автора: к сожалению, данный сервис прекратил свою работу с 2016 года. Так что придется поискать альтернативный сервис ;-) ) из-за удобного клиента под Windows.
Чтобы получить клиент нужно пройти регистрацию. Скачиваем и устанавливаем тот, что соответствует разрядности нашей операционной системы. Для Win 8 придётся устанавливать программу в режиме совместимости. Ну, и нам нужен вариант с HomeAccess. Видим, что доступен клиент для Linux/Unix/MacOS/BSD. К тому же в этих ОС возможна установка из пакетов. Перед тем, как мы получим возможность скачать клиент, нам будет предложено сделать пожертвование. Сердито ставим $ 0, и приступаем к скачиванию. Можно было бы и пожертвовать какую-то сумму, но если у нас есть лишние $10, то на них мы чуть позже приобретём pro Account. Ещё нужно будет заполнить profile.
Устанавливаем клиент. После установки, если вы специально не сняли галочку, клиент запустится.
Скриншот сделал для тех кто еще сомневается в своих силах, там все просто – на первой странице буквально три поля, доступных для заполнения, два из которых мы заполнить не можем так, как username и password мы получим позже. Ну а сейчас используем «Connect Anonymously» и нажмём «connect». После того, как соединение установится, откроем браузер и зайдём на какой-либо сайт, который покажет нам, как у нас теперь обстоят дела с IPv6. Например, на test-ipv6.com. Кстати, там будет вкладка «Other IPv6 sites» – можете выбрать что-то, что возможно больше вам подойдёт. Делать скриншот, опять же, большого смысла нет. Внизу страницы будет надпись «Ваши результаты готовности». Должно быть 10/10. Если это не так, разбираемся почему. Подсказки получим на этом же сайте.
Запускаем cmd или powershell любым привычным для нас способом. Можно нажать win + r и ввести cmd. Вводим команду:
ping ipv6.google.com
У меня получилось среднее время пинга 329 мсек. Просто на google.com пинг получился на 100 мсек больше (436 мсек). Играть в игры с таким пингом будет не комфортно. Наш ping сейчас идёт через Монреаль (или Амстердам, у кого как получилось). И будет ещё больше, когда мы сделаем трансляцию IPv6->IPv4. Если нужен короткий ping, то придётся арендовать VDS у российского провайдера и настраивать всё через него. Если в клиенте сделать «disconnect» и пропинговать google.com, то задержка должна существенно сократиться. У меня среднее получилось 98 мсек. Тоже не мало, но учитывая, что это 3G, удивляться нечему.
Для офиса со скоростью интернета 25 Мбит/сек картинка получилась несколько иной :
В этом случае скорость доступа у IPv6 оказалась хуже чем у IPv4, это связанно с тем что трафик по IPv6 шел через сервера gogo6.
Что мы получили?
У нас серый (т.е. меняется) IPv6, но уже нет NAT, никакого проброса портов. К нашему компьютеру уже можно подключаться извне. Если вам быстренько что-то нужно показать клиенту, то вы уже можете это сделать, сообщив ему свой IP. Конечно, при этом у клиента должна быть поддержка IPv6.
Выше скорость скачивания торрентов, за счёт пиров с IPv6.
Возможно, будет выше скорость доступа к сайтам, доступ к которым возможен по IPv6 (например, youtube), хотя это надо бы проверить т.к. весь наш трафик идёт через брокера. Скорость по IPv6 через туннель в любом случае будет ниже. К тому же может ограничиваться брокером. Проверить можно на http://ipv6-test.com/speedtest/ . Мои результаты меня совсем не порадовали. Для IPv4 у меня получилось 5,30 Mbit/s, а IPv6 показал только 380 Kbit/s (это данные для 3G). Брокер явно режет скорость. Для наших экспериментов скорости нам хватит, но для себя отметим второй недостаток выбранного нами брокера – нам режут скорость. О том, как этого избежать, я уже сказал – свой VDS.
Что-то мы уже получили, но динамический IPv6 можно было настроить просто средствами операционной системы, не заморачиваясь с какой-то регистрацией и установкой клиента на свой компьютер. Скорость при этом упала бы на несколько процентов, а не в разы.
Читайте продолжение на следующей неделе 18 ноября:
Но нам нужен постоянный IP
Идем на http://www.gogo6.com/freenet6/account и регистрируемся уже на сервере Freenet6. До недавнего времени регистрация была бесплатной. Нужно было только разместить сообщение в одном из предлагаемых сервисов. Например, в twitter. Но теперь, похоже, нужно единовременно оплатить $ 10 (и это уже третий недостаток), чтобы получить 56 постоянных IPv6.
Получили Username и Password? Вас можно поздравить! Теперь у вас есть 56 статических IP! Не то, чтобы эта цифра поражала воображение, но на первое время должно хватить.
Кстати, уже сейчас к вашей сети есть доступ по IPv4 через адрес http://<username>.broker.freenet6.net/. На этом можно было бы и закончить, но мы посмотрим, как сделать трансляцию IPv6->IPv4 другим способом и сделаем привязку другого домена к нашему серверу. Ещё мы создадим приложение, чтобы отдать клиентам изображение с видеокамеры.
Можно ещё посмотреть вот это video. На всякий случай добавлю, что оно снято 3 гoда назад журналом Хакер.
Приложение.
Начнём с того, что создадим демонстрационное приложение, которое будет получать доступ к нашей камере. Затем функционал можно будет расширить под ваши конкретные задачи. Можно, например, показать на странице несколько камер, даже находящихся совершенно в разных местах. Если нужно, на разных континентах. Можно добавить панель с каким-то табло и кнопками. На табло можно вывести какую-то информацию. Например, температуру или даже показания домовых счётчиков. На кнопки можно вывести управление подключенными к компьютеру устройствами. Обычно это выключатели чего-либо, например света. Ну и обязательно нужно будет добавить авторизацию на вашем сервере, иначе каждый сможет что-то там переключать. Эта часть наиболее творческая и каждый может решить её наиболее удобным способом. Я покажу как это сделать при помощи node.js.
Идём на сайт http://nodejs.org/ и устанавливаем nodejs, если он ещё у вас не установлен. Всё очень просто. В сети полно руководств как это сделать и ещё раз описывать установку смысла большого нет, тем более, что описывать особенно нечего. Кроме самого node должен установиться и менеджер пакетов к нему – npm. Как работать с пакетами описывать тоже не буду – в сети есть хорошие описания.
Код я взял вот отсюда: http://habrahabr.ru/post/198632/ . Там есть подробное его описание. Я подправил его совсем чуть-чуть, чтобы сервер работал на IPv6. То, что у меня получилось, можно посмотреть, скачав архив webcam.zip. У меня эта папка лежит в C:/javascript/ так, что в итоге должно выглядеть как C:/javascript/webcam. Вы можете разместить содержимое папки там, где посчитаете нужным. Должно работать из любого места. В gogoCLIENT на вкладке HomeWeb в строчке «Published Document Root» можно прописать путь к приложению (у меня, как я уже сказал, это C:/javascript/webcam) и поставить галочку «Enable Home Web». В этом случае запустится сервер apache. Но это не наш случай. Мы будем запускать сервер nodejs. Поэтому галочку на «Enable Home Web» не ставим. Вместо этого в командной строке (кто забыл: win + r, cmd) переходим в папку с нашим приложением:
cd C:/javascript/webcam
и запускаем сервер:
node server.js
Должно работать.
В дальнейшем, через npm можно подключить модуль, который позволит нам через наше приложение управлять внешними устройствами. Обычно внешние устройства подключаются через USB, иногда Bluetooth. При этом в системе появляется один или несколько портов UART, через которые и происходит всё управление. Идём на https://www.npmjs.org/. В строке поиска набираем «uart» и выбираем модуль, который нам больше всего понравится. С его помощью реализуем то, что нам нужно.
Для «Умного дома» на этом можно было бы остановиться. Если речь действительно о «Умном доме», то нам вполне достаточно возможности подключаться к нему через http://<username>.broker.freenet6.net/, либо просто по IP адресу. Но посмотрим, как нам подключить к нашему серверу другое доменное имя.
Доменное имя.
Получаем обычным способом – нового тут ничего нет. Напомню только, что получить доменное имя можно и бесплатно. Возможно это как раз лучший вариант для такого решения как наше. Речь о dot.tk. Регистрируемся, получаем, можно несколько.
IPv6->IPv4.
Теперь осталось совсем немного. Мы настроим трансляцию IPv6->IPv4. Этот механизм будет работать не только с gogo6 (как раз там какая-то трансляция уже есть). Для этого воспользуемся Сloudflare. Нам нужно зарегистрироваться. В разделе Websites нужно добавить домен. В DNS Settings для домена нужно удалить все A-записи. Для AAAAукажем наш статический IPv6. Выглядеть должно примерно так:
Вверху видим адреса двух DNS-серверов («Your Nameservers»). Используем их для парковки своего доменного имени. Подтверждаем, что мы закончили с записямиDNS. Переходим в «CloudFlare Settings». Находим строчку «Automatic IPv6», устанавливаем в «Full». На этом всё. Убеждаемся в том, что всё работает.