Уровень сложности конфигурации – 4,5 из 5. / Время на прочтение и реализацию – 1-2 часа.
Иногда бывает нужно обеспечить выход в Интернет для всех своих устройств через единую точку. Например, домашний маршрутизатор.
Для чего?
Во-первых, в этом случае, вы сможете контролировать трафик своих устройств на одном маршрутизаторе. Сможете создавать единые правила в одном месте.
Во-вторых, для тех, кто интересуется вашим IP адресом, ситуацию будет запутана. Ваш трафик всегда будет исходить из домашней сети. Как будто вы дома.
В-третьих, вы сможете пользоваться услугами вашего домашнего провайдера так, как будто находитесь в его сети. И вам могут удаленно стать доступны его услуги, которые обычно доступны только из дома – всякие игровые серверы, серверы SIP телефонии и прочее.
Для этого нам предстоит сделать следующее:
Представим себе следующую схему – у вас есть подключение к домашнему провайдеру и туннель к VPNKI, установленный с домашнего маршрутизатора.
Второй туннель у вас установлен с компьютера или смартфона Android. Допустим с них вы хотите выходить в Интернет через домашний маршрутизатор.
Самое важное в этой схеме - показать где и как должны быть настроены «маршруты по умолчанию». Вот они – выделены красным цветом.
Что же, начнем ...
Отключите все соединения.
В разделе «Мои настройки» - «Дополнительно» - «Маршрут по умолчанию» выберите туннель, который будет вести к вашему домашнему маршрутизатору. Речь идет о туннеле user101. Теперь этот туннель будет являться «маршрутом по умолчанию» для всего вашего трафика сети VPN. Эта установка будет применяться на сервере VPNKI в тот момент, когда туннель user101 будет подключаться. Эта настройка будет удаляться с сервера VPNKI тогда, когда туннель user101 разрвет свое соединение.
После выбора «маршрута по умолчанию» на сайте VPNKI установите VPN соединение с вашего домашнего маршрутизатора. Затем зайдите на страницу «Инструменты» - «Инструменты» и нажмите там кнопку «Таблица маршрутов».
Вы должны будете увидеть новый маршрут, который звучит как default via 172.16.100.100 dev ppp143. Этот маршрут прописывается в системе автоматически, как только осуществляется подключение указанного туннеля.
Что же, теперь весь «неизвестный» трафик пойдет в этот туннель.
Под словом «неизвестный» мы имеем ввиду «явно не указанный» в таблице маршрутов сервера VPNKI. Это означает, что весь трафик, направляющийся внутри ваших туннелей в сеть Интернет, будет смаршрутизирован в ваш домашний туннель user101.
Теперь давайте перейдем к настройке вашего домашнего устройства.
Мы будем использовать подключение OpenVPN и здесь вам нужно будет сделать две вещи.
Скачайте файл-профиль .ovpn со страницы сайта VPNKI и настроить соединение. Это можнос делать по основной инструкции настройки соединения OpenVPN. Однако, предстоит внести некоторые коррективы в этот файл для того чтобы.
- настроить VPN туннель как «маршрут по умолчанию» для вашего устройства.
- так как мы планируем выходить в Интернет через этот VPN туннель, то необходимо указать новые адреса DNS серверов для разрешения доменных имен.
Для этого внесите две новые строки в файл .ovpn и добавьте туда две строки непосредственно перед тегом <cа>.
dhcp-option DNS 8.8.8.8 redirect-gateway autolocal
Первая строка заставит ваше устройство обращаться к DNS серверу Google для разрешения имени сайта. Вторая строка указывает на создание маршрута по умолчанию при поднятии туннеля к VPNKI.
Теперь давайте проверим. Установите соединение с Android и … у вас должен будет пропасть доступ в Интернет. Точнее, теперь ваш смартфон будет искать Интернет внутри сети VPNKI. Однако это будет неуспешно, так как мы не выполнили шаг №3.
В дополнение, вы можете выполнить команду traceroute 8.8.8.8 с вашего Андроида и увидеть, что пакеты доходят лишь до адреса 172.16.0.1 (сервер VPNKI). Или (см.схему в начале статьи) до адреса 172.16.100.100, который принадлежит вашему домашнему маршрутизатору.
Теперь можно приступить к шагу №3 – выпустить трафик из туннеля VPN через домашний маршрутизатор к вашему провайдеру. Это, пожалуй, самый сложный шаг.
Реализация этого пункта существенно зависит от типа вашего домашнего маршрутизатора.
В статье я покажу реализацию функционала на примере устройства Dlink DIR-825 (c утилитами busybox). Этот маршрутизатор один из множества, но я уверен, что вы справитесь с любым, если поймете оcновные принципы.
Начать стоит с сохранения конфигурации устройства на локальный компьютер. Ведь мы будем вносить существенные изменения и необходимость отката назад вполне вероятна.
Если вы настраиваете Dlink, то сохраните "Резервную копию" на компьютер в разделе «Конфигурация».
Итак, сделать нам нужно три вещи:
Давайте подробнее пройдем по этим пунктам.
На самом деле, вероятнее всего, все маршруты уже есть в вашем домашнем маршрутизаторе... Ведь ваше устройство работает.
Нужно только проверить.
Домашняя сеть – на WiFi или на проводном интерфейсе.
VPN сеть VPNKI – на интерфейсе PPTP, L2TP или Tun (в зависимости от протокола подключения – PPTP, L2TP, OpenVPN).
Соединение к провайдеру и «маршрут по умолчанию» у вас ведут к Интернет провайдеру.
Необходимо убедиться, что все эти маршруты имеются и двигаться дальше.
Как убедиться?
Подключитесь при помощи telnet на адрес Dlink. Порт стандартный - 23. Логин и пароль, такие же, как и на Web интерфейсе.
Выполните команду ifconfig. В ней вы увидите длинное перечисление всех сетевых интерфейсов устройства. По их адресам вы вполне поймете назначение. В моем случае.
Теперь выполните команду ip route и просто посмотрите на маршруты в вашем устройстве. При корректной настройке соединения к VPNKI у вас должен быть маршрут к адресу 172.16.0.1 (первая строка) и маршрут к сети 172.16.0.0/32 (предпоследняя строка). Оба эти маршрута должны вести в туннельный интерфейс ppp0.
Это непростой пункт, но, с другой стороны, может быть ничего и не потребуется делать.
Тем не менее, сначала нужно кое-что пояснить.
Вероятнее всего, в вашем домашнем маршрутизаторе функционирует какая-то версия *nix системы. Наиболее часто встречается busybox – максимально обрезанный линукс. Он заточен под задачи маршрутизации. Обычно, в таких системах функцию межсетевого экрана выполняет программа iptables. Это мощное и гибкое средство, однако, для новичка это сущий ужас. Увы, нам без него никак не обойтись, но я постараюсь изложить очень немного и максимально просто.
Немного про iptables.
Когда ваше устройство получает сетевой пакет на любом из интерфейсов, то в дело вступает iptables. Очень приблизительно схема его работы приведена здесь.
Входящий пакет обрабатывается правилами PREROUTING.
Затем, если пакет должен быть смаршрутизирован, то его отдают в набор правил под названием FORWARD. Затем пакет обрабатывается правилами POSTROUTING и выходит в сетевой интерфейс. Уже обработанным так, как нам надо.
Если пакет должен быть обработан какой-либо программой самого устройства. Например какая-то локальная служба или сервис, то пакет поступает в набор правил INPUT. Затем пакет поступает приложению, а на выходе обрабатывается правилами OUTPUT.
В реальности все немного сложнее, да и наборов правил может быть больше. Однако для наших целей этого знания достаточно.
Стоит отметить, что пакет, подвергаемый обработке NAT на приеме (например, когда вы «выставляете наружу порты устройства»), называется Destination NAT (Destination IP address translation), эта функция транслирует адрес и порт получателя (адрес провайдера на внешнем интерфейсе вашего маршрутизатора) в ваш внутренний адрес и порт. Это осуществляется в наборе правил PREROUTING.
А в трафике, выходящем к провайдеру, обычно транслируется адрес источника – он заменяется на адрес провайдерского интерфейса. Эта процедура называется SNAT (Source IP address translation) и выполняется она в наборе правил POSTROUTING.
Теперь давайте посмотрим, как все это устроено в вашем маршрутизаторе.
Для этого подключимся к Dlink по telnet и выполнить команду:
iptables -n -L -v --line-numbers
В выводе вы увидите много различных строк. В частности, там будут фигурировать ранее перечисленные нами группы правил INPUT, PREROUTING, FORWARD, POSTROUTING и куча других. На данный момент времени нас будет интересовать группа правил FORWARD. Давайте выведем только их командой.
iptables -L FORWARD -v --line-numbers
В результате мы увидим следующую картину:
Здесь важны два момента.
Первый момент, это режим работы (политика) группы правил, именуемый policy. Этот режим может быть ACCEPT, а может быть DROP. В нашем случае, во второй строке картинки мы видим policy ACCEPT, что означает, что трафик, который не попал ни в одно из описанных в группе правил, будет пропущен. Если бы policy был бы DROP, то трафик, не описанный правилами ниже, будет сброшен. Ну и стоит отдельно упомянуть, что правила применяются к пакету по порядку, начиная с самого верхнего правила.
В качестве примера, давайте взглянем на самое первое правило с номером 1.
В нем сказано:
Небольшой комментарий. Как мы помним, интерфейс br0 это общий интерфейс домашней сети (bridge0). В нее входит ваше проводное подключение и ваш домашний WiFi. То есть фактически, это правило сбросит трафик если вы, находясь в домашней сети, наберете в строке браузера http://192.0.2.1 .
Ну и обратите внимание на счетчики трафика. В первом правиле счетчики пакетов равны 0, что означает, что межсетевой экран не зафиксировал трафик, который бы попадал под это правило.
Надеюсь, что вам стало понятнее.
Второй момент касается правила №3. Это правило, которое мешает нашему DLink быть настоящим маршрутизатором. В нем счетчик пакетов равен 76 и это означает, что это правило уже что-то не пропустило через себя. Вот что в нем написано:
То есть это правило говорит о том, что трафик, идущий из сети провайдера (eth1) попадет в домашнюю сеть (br0), но НЕ попадет в интерфейс ppp0. Вот какая засада. Это дело нужно исправить.
Нужно удалить это правило. Если его удалить, то вроде бы никакие правила ниже не должны влиять на прохождение трафика между интерфейсами ppp0, br0 и eth1. А как мы помним, если никакие правила трафику не мешают, то согласно политике ACCEPT для всей группы, трафик будет передан.
Удаляем это чудесное правило №3 командой.
iptables -D FORWARD 3
И вновь посмотрим на результат:
iptables -L FORWARD -v --line-numbers
Что же, теперь старое правило 3 исчезло. Хочется верить, что все заработает, но остался последний пункт нашей настройки.
Это самый последний пункт. Дело в том, что ваш маршрутизатор настроен так, чтобы делать трансляцию адресов домашней сети. Это его базовый функционал и, вероятнее, всего он делает это при помощи того же самого функционала iptables. На этот раз, подобная функция будет называться MASQUERADE (маскарадинг). Маскарадинг делает трансляцию адресов источника (SNAT) в адрес внешнего интерфейса к провайдеру. Только вот для трафика от каких адресов это происходит? Это происходит для трафика с адресов домашней сети. Но будет ли это происходить для трафика с адресов сети VPNKI?
Давайте посмотрим, как трансляция настроена у нас.
iptables -v -t nat -L POSTROUTING --line-numbers
О чудо, вторая строка говорит о том, что:
То есть наш трафик, который идет из домашней сети br0 или из интерфейса VPNKI ppp0 будет подвергаться трансляции адресов и уходить в Интернет.
Зайдите на сайт VPNKI в раздел «Инструменты» - «Инструменты» и выполните пинг адреса 87.250.250.242 (ya.ru) . Если все настроено верно, то вы увидите успешный пинг, который теперь идет через ваш домашний маршрутизатор.
Выполните подключение со смартфона Android при помощи соединения OpenVPN и зайдите на сайт https://www.whatismyip.com/.
Вы должны увидеть, что сейчас ваш IP адрес - это адрес вашего домашнего провайдера услуг Интернет.
Ура, я надеюсь, что у вас все получилось.
Если что-то не получилось или что-то неверно описано, то задавайте вопросы на форуме https://vpnki.ru/questions/support-forum/blog-news.