Pull to refresh

VPN с возможностью прохождения через файрвол/NAT

Reading time2 min
Views5.4K
NAT (Network Address Translation) обладает массой достоинств, но и не лишен недостатков, например, необходимости конфигурировать проброс портов (port forwarding) в случае если мы хотим иметь доступ к серверу, который находится за NAT раутером. Существует несколько способов прохождения через NAT (NAT traversal). В данной статье я попробую рассмотреть один из них, который основан на UDP hole punching (буквально — пробитие дырки с помощью UDP, прошу прощения за кучу терминов на английском, но я просто не знаю как их благозвучно воспроизвести по-русски).

UDP hole punching

Многие встречали или работали с сервисами типа Hamachi, Skype или TeamViewer. Их работа как раз и основана на алгоритме пробивания дыры с помощью UDP пакетов.

Принцип работы UDP hole punching довольно прост и вот, например, как работает Hamachi:

PC A и Notebook B — два компьютера, находящиеся каждый за частной сети (private network), Hamachi сервис — сервер, доступный по public IP адресу.
  1. A и B устанавливают UDP соединение с сервером Hamachi, раутеры назначают внешние порты каждому соединению и при этом создается как бы «туннель» (дыру) в раутере
  2. Hamachi сервер сообщает A и B public IP адреса и порты друг друга
  3. A и B, используя информацию полученную от сервера, устанавливают соединение друг с другом

Данная техника основана на том, что в UDP пакете содержится только IP адрес и порт, в отличие от TCP пакета.

N2N

N2N представляет собой виртуальную частную сеть (VPN) с возможностью прхождения через файрвол/NAT c защищенным соединением. Архитекура N2N основана на двух компонентах:
  • edge node (удаленный узел): приложение, установленное на компьютере пользователя, которое позволяет построить виртуальную частную сеть. Каждый узел создает виртуальную сетевую карту, которая и используется для создания сети.
  • supernode (супер узел): сервер с public IP адресом, который используется для установки соединения между удаленными узлами, а также используется как раутер пакетов между узлами, которые не могут общаться напрямую.




Удаленные узлы общаются друг с другом через виртуальные сетевые интерфейсы (tap interfaces). Каждый компьютер может принадлежать множеству виртуальных сетей (по одному виртуальному сетевому интерфейсу на виртуальную частную сеть).


Установка и использование N2N

  • Скачать n2n:
    svn co svn.ntop.org/svn/ntop/trunk/n2n
  • Собрать:
    make
  • Запустить супер узел на компьютере с public IP, или за NAT, но там где можно сконфигурировать проброс портов:
    supernode$ supernode -l xyw
    где xyw — порт, на котором суперузел ожидает соединение
  • Запустить два узла на разных компьютерах за NAT:
    node-1$ edge -a 10.1.2.1 -c mynetwork -k encryptme -l a.b.c.d:xyw
    node-2$ edge -a 10.1.2.2 -c mynetwork -k encryptme -l a.b.c.d:xyw
    где mynetwork — название VPN, encryptme — пароль для доступа в VPN, a.b.c.d:xyw — public IP адрес и порт супер узла
  • Проверить как работает VPN:
    node-1$ ping 10.1.2.2 и
    node-2$ ping 10.1.2.2


Мелочи

Для OS X надо установить tap устройство, я ставил вот это — TUNTAP.

Собрать n2n под винды тоже довольно легко, файл проекта находится в исходных текстах, но 1) в проекте пути не правильные, надо будет скопировать файлы в поддиректорию и 2) отсутствует файл version.c, можно просто создать пустой и вставить туда:
char *version = "2.03";
char *osName = "Windows";
char *buildDate = "today";
Tags:
Hubs:
+9
Comments9

Articles

Change theme settings