Меню Рубрики

Установка vpn между двумя компьютерами

Прямой VPN-туннель между двумя компьютерами находящимися за NAT провайдеров с использованием UDP hole punching

Введение

Теория

Я давно задумался о решении по организации канала передачи данных непосредственно от узла к узлу, которые находятся за NATом провайдеров, без использования серверов-посредников. Перебрав некоторое количество статей о различных технологиях типа GRE-туннелей, IPsec, UDP Hole Punching, OpenVPN и прочего, я понял, что узлы должны пробивать соединение навстречу друг другу, то есть посылать пакеты на IP и порт удаленного узла. Поставил несколько опытов по организации GRE-туннеля через NAT, передачу сообщения при помощи NetCat навстречу друг другу, иногда это работало, иногда нет, всё зависело от типа используемого провайдером NAT. Не так давно попалась на глаза интересная статья, в которой было описание организации работы OpenVPN соединения между двумя компьютерами (далее узлами). Я прочитал, проверил и заработало, но при условии, что локальный порт узла и внешний порт будут совпадать, то есть мой провайдер будет использовать Cone NAT. Мне же стало интересно организовать туннель между двумя компьютерами при условии, что оба будут находятся за любым типом (Cone или Symmetric) NAT, то есть локальный порт может не совпадать с внешним портом. Задача уперлась в невозможность определения текущего порта внешнего интерфейса без внешней помощи. Если внешний IP-адрес хоть как-то можно узнать (например: curl ifconfig.me), а вот с определением текущего внешнего порта возникла трудность.

Практика

Для решения этой задачи пришлось использовать VPS (S-синий овал), на нем я поднял скрипт который выполнял роль «Соединителя», что-то типа STUN-сервера: при помощи утилиты TCPDump получал UDP-пакет (далее везде используется UDP протокол) на определенный интерфейс и порт, парсил содержимое пакета, определял IP-адрес/порт источника и отвечал утилитой NetCat возвращая текущие параметры (IP-адрес и порт) соединения, а так же параметры (IP-адрес и порт) удаленного узла к которому нужно подключиться, если эти данные были доступны, иначе ждал пока они не появятся. Все это дело сопоставлялось с идентификатором (ID) соединения, так как несколько соединений могли мешать друг другу, при использовании ID все решалось. Также была проблема того, что узел получал свои же старые данные и пытался по ним подключиться и это решилось с помощью хеша Hostname.

На узлах A и B я использовал скрипт и сгенерированный заранее ключ для авторизации VPN-соединения, работало это так: запускался скрипт, случайно выбирался локальный порт в диапазоне от 20000 до 65000 и с этого порта отправлялся пакет на VPS, который содержал в себе >
Схема прямого VPN-туннеля и передачи данных между узлами, без участия сервера
Внимание: скрипты написаны и проверены на ОС Ubuntu 18.04 и Debian 9

Читайте также:  Установка бортовых камней конструкция

Запускается автоматически строкой в /etc/rc.local

где 13013 — это порт который нужно слушать, /var/log/connector2.log — лог.

Скрипт на узлах: # cat vpn7.sh

Скопировать скрипт в буфер и вставить в тектовый редактор, например:

Сделать скрипт исполняемым:

Для первого запуска сгенерируем ключ авторизации secret.key, на удаленной стороне генерировать не надо, нужно скопировать его:

Запустим скрипт, например так:

Ключ 517vA0051smB4dE сгенерировал на strongpasswordgenerator.com

Запускается автоматически строкой в /etc/rc.local

где >
Если все настроено правильно, то будет работать как часы: включил и через пару минут у тебя есть связь с удаленным узлом. В скриптах используются бесконечные циклы и временные задержки, то есть скрипт работает пока включен узел и при потере связи будет пытаться восстановить её. Скрипты не идеальные но, сам факт того что эта технология работает дает мне массу новых идей, например:

  • использовать узел для хранения особо важных данных, и иметь к ним доступ, допустим, в случае утери ноутбука все данные будут на узле
  • использовать на ноутбуке удаленный рабочий стол компьютера
  • организовать связи с компьютером друга и поиграть в сетевую игру
  • иметь доступ к домашней камере видеонаблюдения с рабочего компьютера или просмотреть веб-камеру ноутбука

Приемущества:

  • простота в настройке и использовании
  • трафик идет напрямую
  • трафик шифруется и защищен от перехвата
  • нет необходимости пробрасывать порты
  • скрипт запускается автоматически

Недостатки:

  • главный недостаток это использования VPS как источника данных для соединения, но я думаю над этим
  • некоторые провайдеры блокируют трафик между другими провайдерами (замечено у сотовых операторов)
  • при использовании с обоих сторон одного провадера может не сработать, зависит от типа NAT
  • при использовании провадером «жесткого» NAT может не сработать

В планах дальнейшее развитие скрипта до какой-нибудь системы, минимизировать время ожидания ответов, прикрутить шифрование передаваемых данных, адаптировать его к ОС Windows и Android, научить работать через Proxy и тому подобное.

Думаю на фоне дефицита белых IPv4 адресов моё решение будет актуально, ровно до тех пор, пока в каждый дом не придет IPv6.

Обновлено 11.12.2019, добавлено:

  • команда активации защиты от подмены адресов, уязвимость CVE-2019-14899
  • команды завершающие зависшие процессы NC, ускоряется процесс установки соединения
  • внутренние IP-адреса генерируются при первом запуске и их составляющие хранятся в vpn.cfg
Читайте также:  Установка ворд без регистрации

Другая моя реализация VPN-туннеля, без использования VPS, с использованием STUN и Яндекс.Диска опубликована тут

источник

Настройка VPN-подключения средствами ОС Windows

Частная виртуальная сеть (VPN) хороша тем, что предоставляет пользователю защищенный или доверительный канал с другим ПК без необходимости предоставления выделенного канала связи. Её создают поверх другой сети — Интернет, например.

Windows имеет встроенные инструменты для налаживания VPN-подключения между компьютерами, размещенными на больших расстояниях. Наладим VPN-туннель между двумя ПК, которые управляются средой Windows.

Создадим серверную часть

Подсоединение удаленных клиентов к VPN-сети организовывается через специальный сервер доступа. От входящего подключения он может потребовать прохождения процедур идентификации и аутентификации. Он знает, какие пользователи обладают доступом к виртуальной сети. Также, он располагает данными о разрешенных IP-адресах.

Для налаживания VPN-сервера доступа в центре управления сетями надо открыть апплет изменений параметров адаптеров. Если главное меню апплета не отображается, нажмите кнопочку «Alt». В верхней части апплета должно появиться главное меню, в котором следует найти пункт «Файл», а затем выбрать «Новое входящее подключение». Рассмотрим более подробнее.

В панели управления пройдем «Сеть и Интернет».

На следующем шаге откроем сетевой центр.

Далее, понадобится пройти по ссылке, на которую указывает стрелка.

Создадим новое входящее соединение.

Появившееся окошко предложит выбрать из существующих пользователей или определить нового, которым будет разрешено подсоединяться к данному ПК.

При добавлении нового «юзера» нужно указать имя и пароль, с которыми ему дозволено будет соединяться с VPN-сервером доступа.

На следующем шаге мастер настройки частной сети спросит, как будут подключаться пользователи.

Надо указать, что делать они это будут поверх Интернет, поэтому отметим флажком требуемую опцию.

Следующий шаг связан с налаживанием сетевых приложений, которые должны принимать входящие подключения. Среди них есть компонент «Интернет-протокол версии 4(TCP/IPv4)». Понадобится открыть его свойства и вручную ввести диапазон IP-адресов, которым дозволен доступ к серверу.

Иначе, предоставьте это дело DHCP-серверу для автоматического определения «айпишников». В нашем случае понадобилось вручную их определять.

После выполнения процесса обработки введенных данных, сервер доступа получит требуемую информацию для предоставления необходимых разрешений авторизующимся пользователям. Одновременно система подскажет имя компьютера, которое понадобится в будущем.

В итоге, мы получим такой результат. Подключенных клиентов еще нет.

Настроим клиента

Современные сети чаще всего выстраиваются по клиент-серверной архитектуре. Она позволяет выделить главный компьютер в сетевом окружении. Клиенты инициируют запросы к серверу и делают первыми попытку подключения к серверу.

Читайте также:  Установка задних брызговиков лада калина

Серверную часть этой архитектуры мы уже настроили. Теперь осталось наладить работу клиентской части. В качестве клиента должен выступать другой компьютер.

В сетевом центре другого ПК (клиента) наладим новое подключение.

Нам надо подсоединяться напрямую к рабочему месту.

Опять же обратимся в сетевой центр Windows только теперь другого ПК. Выберем опцию настройки нового подсоединения. Появившийся апплет предложит несколько вариантов на выбор, однако нам понадобится опция подключения к рабочему месту. Мастер спросит, как выполнять подсоединение. Нам же надо остановить свой выбор на настройке подсоединения к Интернету (VPN).

Мастер попросит на следующем шаге указать IP-адрес VPN-сервера доступа и назначить имя местоназначения. IP-адрес сервера доступа можно узнать на первом нашем компьютере, введя в командной строке команду ipconfig. IP-адрес Ethernet-сети и будет искомым адресом.

Далее, для клиента мы должны определить его имя и указать пароль, которые мы определяли на сервере, когда добавляли нового пользователя.

Затем, система применит все введенные настройки.

Выполним подключение

Временем X для нашего эксперимента является выполнение подсоединения клиента к серверной части нашей сети. В сетевом центре выберем опцию «Подключиться к сети». В появившемся окошке кликнем VPN-Test (мы указали местоназначение именно с данным именем) и кликнем кнопочку подключиться.

Так, мы откроем апплет соединения с VPN-Test. В текстовых полях укажем имя и пароль «юзера» для осуществления авторизации на сервере доступа. Если все пройдет успешно и наш пользователь не только зарегистрируется в сети, но и сможет полностью подсоединиться к серверу доступа, то на противоположной стороне появится обозначение подключившегося «юзера».

Но иногда, может случиться ошибка такого рода. VPN-сервер не отвечает.

Кликнем ярлычок входящих соединений.

На отмеченной вкладке откроем свойства протокола IP.

Установим опцию указывать IP адреса явным образом и пропишем, какие «айпишники» надо обслуживать.

Когда же повторно подключимся, то увидим такую картину. Система нам показывает, что подключен один клиент и этот клиент vpn(SimpleUser).

Итак, для налаживания VPN-сети между двумя ПК понадобится определиться с тем, какой из них должен стать «главным» и играть роль сервера. Остальные ПК должны подсоединяться к нему через систему авторизации. В Windows есть средства, обеспечивающие создание серверной части для нашей сети. Она настраивается через создание нового входящего соединения, указания пользователя, а также приложений, которые должны принимать соединение. Клиента настраивают через установление соединения к рабочему месту, указывая пользователя и данные сервера, к которому этот пользователь должен подключаться.

источник

Добавить комментарий

Adblock
detector