Vpn мост в локальную сеть windows

Прочитал топик habrahabr.ru/blogs/linux/67209 и решил выложить сюда свою статью, которая была до этого видна только в закрытой корпоративной Wiki. Обычно, при с...

Прочитал топик habrahabr.ru/blogs/linux/67209 и решил выложить сюда свою статью, которая была до этого видна только в закрытой корпоративной Wiki.

Обычно, при создании VPN, используется подключение типа точка-точка к некоторому серверу, либо установка ethernet-туннеля с некоторым сервером, при котором туннелю назначается определённая подсеть. Сервер VPN при этом выполняет функции маршрутизации и фильтрования трафика для доступа к локальной сети через VPN.

Данная статья рассматривает другой подход к созданию виртуальной сети, при котором удалённые системы включаются в уже существующую локальную подсеть, а сервер VPN выполняет роль Ethernet-шлюза. При использовании такого подхода мы всё ещё имеем возможность фильтровать трафик на основании способа подключения (например, использовать для локальной сети и для удалённых пользователей разные фильтры), но исключается необходимость настройки маршрутизации, а удалённые машины включаются прямо в локальную сеть, видят ресурсы, даже способны использовать широковещательные посылки вообще без дополнительной настройки. Через такой VPN у них отображаются все компьютеры локальной сети Windows, все доступные XDMCP-серверы при XDMCP broadcast и т. д.

Структура сети и настройка сервера

Предположим, что имеется офис с локальной сетью, используется IP-подсеть 192.168.168.0/24. В эту локальную сеть мы включим домашних пользователей, то есть они будут иметь адрес из этой же самой подсети. Необходимо убедиться, что у них «дома» не встречается данная подсеть, и что никакие системы в локальной сети не имеют адресов из диапазона, который мы выделим для удалённых пользователей.

Поддержка моста в ядре

Для работы такой техники нам нужны некоторые ядерные драйвера. Это универсальный драйвер виртуальных сетевых интерфейсов tun, и драйвер ethernet-моста bridge. Можно включить их в ядро, или собрать модулями:

    -> Networking
      -> Networking support (NET [=y])
        -> Networking options
          <*> 802.1d Ethenet Bridging (BRIDGE [=y])
    -> Device Drivers
      -> Network device support (NETDEVICES [=y])
        <*> Universal TUN/TAP device driver support (TUN [=y])

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

Программное обеспечение

Для сервера потребуется OpenVPN и утилиты для обслуживания моста. В Gentoo они собираются следующим образом:

  emerge net-misc/bridge-utils net-misc/openvpn

При использовании >=sys-apps/baselayout-1.12.6 этого достаточно, для более старых версий потребуются специальные утилиты для обслуживания tun/tap-устройств:

  emerge sys-apps/usermode-utilities

Настройка сети

Положим, eth2 — интерфейс, к которому подключена локальная сеть, с назначенным адресом 192.168.168.254. Его настройка выглядела примерно так:

  config_eth2=( "192.168.168.254/24" )

Поскольку он будет участвовать в мосте, ему не нужно назначать адреса. Также, в мосте участвует вновь создаваемый виртуальный интерфейс tap0, которому тоже не назначается никакого адреса. Адрес, который использовался eth2, назначается теперь мосту br0:

  config_eth2=( "null" )
  
  tuntap_tap0="tap"
  config_tap0=( "null" )
  
  depend_br0() {
    need net.tap0 net.eth2
  }
  
  # указываем существующие интерфейсы, объединяя их в мост
  bridge_br0="eth2 tap0"
  # либо, можно динамически подключать туда вновь появляющиеся интерфейсы
  #bridge_add_eth2="br0"
  
  config_br0=( "192.168.168.254/24" )

Также нужно создать настроечные скрипты для указанных интерфейсов:

  cd /etc/init.d
  ln -s net.lo net.eth2
  ln -s net.lo net.tap0
  ln -s net.lo net.br0

Достаточно автоматически загружать только интерфейс br0. depend_br0() автоматически поднимет все остальные необходимые ему для работы:

  rc-update add net.br0 default
  /etc/init.d/net.eth2 stop
  /etc/init.d/net.br0 start

Создание ключей OpenVPN

Мы будем авторизовывать клиентов посредством RSA-ключей OpenSSL. Для упрощения процесса, для нас приготовили несколько init-скриптов:

  cd /usr/share/openvpn/easy-rsa/

Там есть файл vars, в который мы занесём общие значения:

  nano vars

Внизу этого файла мы заполняем наши переменные:

  export KEY_COUNTRY="RU"
  export KEY_PROVINCE="Voronezh oblast"
  export KEY_CITY="Boguchar"
  export KEY_ORG="OrganiZationnAme"
  export KEY_EMAIL="root@oza.ru"

Загружаем переменные из этого файла и строим CA (Certificate Authority):

  source ./vars
  ./clean-all
  ./build-ca
Ключ сервера

Для генерации ключа сервера с именем office, используем следующую команду:

  ./build-key-server office

На вопрос «Common Name» нужно ответить именем сервера (в нашем случае, office). На два вопроса в конце «Sign the certificate? [y/n]» и «1 out of 1 certificate requests certified, commit? [y/n]» отвечаем «y».

При необходимости, можно будет создать дополнительные ключи серверов. Например, это могут быть резервные серверы доступа для повышения надёжности системы. Они создаются той же командой, перед ней нужно выполнить source ./vars.

Параметры Диффи-Хеллмана

Здесь ничего дополнительно делать не придётся, но придётся подождать.

  ./build-dh

Этот файл нужен только на сервере.

Ключи клиентов

Каждому клиенту необходимо выдать свой ключ. Для клиента с именем client ключ создаётся командой

  ./build-key client

На вопрос о «Common Name» отвечаем именем клиента (в данном случае, client). На два вопроса в конце отвечаем согласием.

Сгенерированные ключи и сертификаты передаём клиентам через защищённый канал. При необходимости, можно создавать ещё ключи той же командой. Перед её запуском, необходимо загрузить окружение — выполнить source ./vars.

Настройка и запуск сервиса OpenVPN

Для запуска следует использовать следующую конфигурацию сервера (файл /etc/openvpn/openvpn.conf):

  # Этот порт рекомендован IANA для OpenVPN. Можно перевесить на другой порт, но секретность не повысится - он всё равно первым делом признаётся, что он - OpenPVN.
  port 1194
  
  # OpenVPN может использовать tcp и udp в качестве транспортного протокола, udp - предпочтительнее
  proto udp
  
  # Виртуальный интерфейс, который мы включили в мост, непременно типа tap (через tun нельзя эмулировать Ethernet)
  dev tap0
  
  # Корневой самоподписанный сертификат CA
  ca /etc/openvpn/keys/ca.crt
  
  # Сертификат и секретный ключ сервера. crt должен иметь режимы 644, key - 600
  cert /etc/openvpn/keys/office.crt
  key /etc/openvpn/keys/office.key
  
  # Файл с параметрами Диффи-Хеллмана. Если у вас другая длина ключей, исправьте имя :)
  dh /etc/openvpn/keys/dh1024.pem
  
  # Раздавать удалённым клиентам адреса в этой подсети, из этого диапазона (обратите внимание - подсеть задаётся ВСЯ, как в конфиге сетевухи, а диапазон - часть подсети)
  server-bridge 192.168.168.254 255.255.255.0 192.168.168.128 192.168.168.159
  
  # Разрешить взаимодействие клиентов друг с другом (иначе только с сервером и сегментом сети "за мостом")
  client-to-client
  
  # Это позволит выдать клиенту тот же самый адрес, какой выдавали раньше, если не занят
  ifconfig-pool-persist /etc/openvpn/ipp.txt
  
  # Если вы не хотите через DHCP передавать также и адрес DNS-сервера, можно убрать следующую строку
  push "dhcp-option DNS 192.168.168.254"
  
  # Компрессия
  comp-lzo
  # Максимальное число клиентов - имеет смысл сделать меньше или равно числу адресов в диапазоне server-bridge
  max-clients 32

  # Подробности относительно этих ключей - в документации OpenVPN
  keepalive 10 120

  # Не переинициализировать tun и не перечитывать ключ при переподключениях; если работаем не как root, а как nobody, то нам это и не позволят, поэтому либо все эти опции, либо ни одну из них
  user nobody
  group nobody
  persist-key
  persist-tun

  # Каждую минуту OpenVPN сбрасывает сюда текущее состояние (список клиентов, маршруты и т. д.)
  status /tmp/openvpn-status.log
  
  # Очень шумный лог, нормальная работа - verb 2
  verb 6
  log-append  /var/log/openvpn.log

Ключ office.key должен иметь режим 600 (доступ только владельцу). Файлы office.crt и dh1024.pem имеют режим 644.

Настройка фильтрования

Поскольку мы используем мост, есть несколько особенностей организации фильтрования пакетов. Например, не все проходящие пакеты могут вообще оказаться IPv4. Для настройки работы моста в ядре существует несколько параметров:

Переменные этой группы сохраняются в файлах директории /proc/sys/net/bridge/. Их можно также настраивать в /etc/sysctl.conf, тогда они все получат префикс «net.brigde.»

  • bridge-nf-call-arptables
    Логическая переменная bridge-nf-call-arptables управляет передачей трафика ARP в цепочку FORWARD пакетного фильтра arptables. Установленное по умолчанию значение 1 разрешает передачу пакетов фильтрам, 0 – запрещает.
  • bridge-nf-call-iptables
    Логическая переменная bridge-nf-call-iptables управляет передачей проходящего через мост трафика IPv4 в цепочки iptables. Используемое по умолчанию значение 1 разрешает передачу пакетов для фильтрации, 0 – запрещает.
  • bridge-nf-call-ip6tables
    Действие аналогично предыдущему, только оно настраивает передачу трафика IPv6 для фильтрования в цепочки ip6tables.
  • bridge-nf-filter-vlan-tagged
    Логическая переменная bridge-nf-filter-vlan-tagged определяет возможность передачи трафика IP/ARP с тегами VLAN программам фильтрации пакетов (arptables/iptables). Значение 1 (установлено по умолчанию) разрешает передачу пакетов с тегами VLAN программам фильтрации, 0 – запрещает.

Для фильтрования пакетов, проходящих через мост, используется соответствие physdev, которое различает, с какого и на какой порт моста следует пакет. Включаем его в ядре:

-> Networking
  -> Networking support (NET [=y])
    -> Networking options
      -> Network packet filtering framework (Netfilter) (NETFILTER [=y])
        -> Core Netfilter Configuration
          -> Netfilter Xtables support (required for ip_tables) (NETFILTER_XTABLES [=y])
            -> "physdev" match support (NETFILTER_XT_MATCH_PHYSDEV [=y])

Кроме этого, конфигурация ядра должна разрешать передачу пакетов на фильтрацию iptables, т.е. bridge-nf-call-iptables=1 и bridge-nf-call-ip6tables=1 (если вы используете IPv6).
После можете использовать, например, такие правила для фильтрования:

  iptables -A FORWARD -p tcp --dport 22 -m physdev --physdev-in eth1 --physdev-out eth0 -j ACCEPT

Поподробнее про настройку фильтрации между портами поста можно почитать в статье Building bridges with Linux

Если вы не хотите делать никаких различий между пользователями LAN и пользователями bridged VPN, вы можете просто выключить эти параметры в ядре (они включены по умолчанию):

  echo "net.bridge.bridge-nf-call-iptables = 0" >> /etc/sysctl.conf
  echo "net.bridge.bridge-nf-call-ip6tables = 0" >> /etc/sysctl.conf

Клиенты

На клиенте необходимо создать конфигурационный файл OpenVPN следующего содержания:

  client
  nobind
  dev tap
  proto udp
  # Куда подключаться. Можно указать несколько опций remote - будет использоваться первый доступный сервер. Если для server.example.net имеется несколько A-записей, между ними выбор производится случайно.
  remote server.example.net 1194
  # Никогда не сдаваться, пытаться подключаться бесконечно.
  resolv-retry infinite
  # Либо все опции вместе, либо ни одна из них
  persist-key
  persist-tun
  user nobody
  group nogroup
  comp-lzo
  ns-cert-type server
  ca ca.crt
  cert client.crt
  key client.key

Если сервер подключен через несколько провайдеров, можно повысить устойчивость сети к отказам. Для этого клиенту нужно прописать несколько опций remote, по одной на сервер, в порядке «сначала предпочтительные».

Имена файлов, указанные в параметрах ca, cert и key — это файлы, переданные через защищённый канал. Права доступа к файлу key должны быть установлены в 600.

Linux

Необходим universal tun/tap driver в ядре, либо модулем, но загруженный.

Gentoo

При установке net-misc/openvpn создаётся скрипт /etc/init.d/openvpn. Этот скрипт запускает openvpn с конфигурационным файлом /etc/openvpn/openvpn.conf. Мы, однако, можем поддерживать несколько конфигураций OpenVPN одновременно, если сделаем симлинки вида /etc/init.d/openvpn.network-name -> /etc/init.d/openvpn — каждый такой скрипт запускает OpenVPN с конфигурационным файлом /etc/openvpn/network-name.conf.

Соответственно, помещаем туда вышеприведённый конфиг, создаём симлинк и кладём скрипты в поддиректорию в /etc/openvpn/. В конфиге прописываем полный путь к ключу и сертификатам. Следите, чтобы имена файлов в конфиге не пересекались, во избежание неприятных эффектов!

Запуск и останов сети производятся через управление сервисом /etc/openvpn.network-name.

Windows

Конфигурационный файл помещается в директорию «C:Program FilesOpenVPNconfig» с именем вроде «office.ovpn», туда же помещаются остальные файлы — ключи и сертификаты. Если мы их помещаем в поддиректорию (например, хотим использовать несколько виртуальных сетей и все они предоставили файлы с одинаковым именем ca.crt), указываем полные пути к файлам.

Для запуска сетей можно либо запустить сервис OpenVPN (тогда будут запущены все конфигурации *.ovpn, найденные в config), либо по отдельности — щёлкаем по файлу .ovpn правой кнопкой и выбираем «Запустить OpenVPN с этой конфигурацией».

Возможные проблемы

Проверить доступность сервера, если он запущен на TCP, можно обычным telnetом.

Windows

Нет свободного виртуального адаптера TAP

Wed Dec 31 10:43:51 2008 TCP connection established with 88.83.201.253:1194 
Wed Dec 31 10:43:51 2008 TCPv4_CLIENT link local: [undef] 
Wed Dec 31 10:43:51 2008 TCPv4_CLIENT link remote: 88.83.201.253:1194 
Wed Dec 31 10:44:51 2008 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) 
Wed Dec 31 10:44:51 2008 TLS Error: TLS handshake failed 
Wed Dec 31 10:44:51 2008 Fatal TLS error (check_tls_errors_co), restarting 
Wed Dec 31 10:44:51 2008 SIGUSR1[soft,tls-error] received, process restarting 
Wed Dec 31 10:44:56 2008 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA.  OpenVPN 2.0-beta16 and earlier used 5000 as the default port. 
Wed Dec 31 10:44:56 2008 Re-using SSL/TLS context 
Wed Dec 31 10:44:56 2008 LZO compression initialized 
Wed Dec 31 10:44:56 2008 Attempting to establish TCP connection with 88.83.201.253:1194 
Wed Dec 31 10:44:56 2008 TCP connection established with 88.83.201.253:1194 
Wed Dec 31 10:44:56 2008 TCPv4_CLIENT link local: [undef] 
Wed Dec 31 10:44:56 2008 TCPv4_CLIENT link remote: 88.83.201.253:1194 
Wed Dec 31 10:45:11 2008 [office] Peer Connection Initiated with 88.83.201.253:1194 
Wed Dec 31 10:45:13 2008 All TAP-Win32 adapters on this system are currently in use. 
Wed Dec 31 10:45:13 2008 Exiting 
Press any key to continue...

По логу OpenVPN видно, что клиент успешно присоединился к серверу, авторизовался, но не смог привязать виртуальную сеть к виртуальному адаптеру. Скорее всего, какие-то другие процессы уже задествовали все имеющиеся в системе адаптеры TAP-Win32. Это мог быть и сам OpenVPN, повисший и не отдавший адаптер.

Лечится перезагрузкой или выяснением, какие бы это могли быть процессы и принудительным их убиванием.

Ссылки

При написании данной статьи, использовались следующие источники:

  1. Gentoo Linux Wiki — HOWTO OpenVPN Server for Ethenet Bridging with Server Certificates (Есть копия этой страницы, по адресу: http://www.gentoo-wiki.info/HOWTO_OpenVPN_Server_for_Ethernet_Bridging_with_Server_Certificates. Спасибо hexes за ссылку!)
  2. Gentoo Linux Wiki — HOWTO OpenVPN Linux Server Windows Client
  3. OpenVPN Documentation — HOWTO
  4. Энциклопедия сетевых протоколов — параметры sysctl для стека IP
  5. Building bridges with Linux

P.S. Некоторые источники почили. Ссылки я убирать не буду, но стоит иметь ввиду.

Существует два способа объединить сети при помощи SoftEther VPN.
1) Соединение мостом, при этом сети объединяются в один сегмент Ethernet. Этот вариант неудобен, т.к. если в обеих сетях есть сервисы, требующие работы в единственном экземпляре, то это приведет к конфликтам (например, DHCP). Кроме того, если узлов в сети много, то произойдет увеличение широковещательного трафика.
2) Второй способ основывается на первом. Но здесь создается виртуальный коммутатор третьего уровня OSI, который управляет трафиком между сетями. Также создается дополнительный виртуальный хаб (концентратор), к которому подключается удаленная сеть. Из минусов: не поддерживаются протоколы динамической маршрутизации, не поддерживается протокол IGMP, на узлах с общими ресурсами необходимо прописывать статические маршруты.

В данной статье рассматривается второй способ.

Топология сети

Преимущество данной схемы в том, что ненужно тратиться на дорогие роутеры с VPN, а параноикам использовать дырявый протокол PPTP. Включил ПК — и связь автоматически поднялась, если на другом конце ПК тоже включен. Производительность связи упирается в скорость вашего интернет-канала (включая производительность маршрутизации роутера) и мощность процессора ПК, т.к. шифрование трафика осуществляется именно им.

Топология сети

Имеем две сети, с центральными узлами в виде маршрутизатора с DHCP сервером и WAN. На ПК в одной сети необходимо установить SoftEther VPN Server, а в другой сети SoftEther VPN Bridge.

Установка VPN сервера на Windows

Установка SoftEther VPN Server достаточно проста. Проиллюстрирую ее картинками с небольшими комментариями. Скачиваем дистрибутив SoftEther VPN Server c официального сайта и запускаем.
Выбираем вариант установки — VPN Server и жмем «Далее».

Установка SoftEther VPN Server

Затем принимаем условия соглашения и выбираем стандартную установку.

Установка SoftEther VPN Server

После запуска VPN сервера появится окно администрирования, нажимаем кнопку «Connect». Задаем пароль администратора сервера.

Пароль SoftEther VPN Server

Указываем тип сервера — Site-to-Site VPN Server. (Center)

SoftEther VPN Server конфигурация

Далее необходимо указать имя виртуального хаба.

Пароль SoftEther VPN Server

Затем идет настройка функции dynamic DNS, жмем Exit. Позже её можно отключить, изменив в файле конфигурации строку на: “declare DDnsClient { bool Disabled true “ .

Настройка Dynamic DNS

Далее необходимо указать физическую сетевую карту для соединения виртуального хаба с локальной сетью. Соединение осуществляется на канальном уровне OSI, поэтому виртуальный хаб не получает никакого IP адреса в сети. Однако некоторые роутеры могут заметить в локальной сети появление IP адреса подсети 172.31.0.0/16. Этот адрес используется для отслеживания соответствия ARP записей IP адресам или чего-то подобного.

Выбор сетевой карты

Далее предлагается настроить доступ по L2TP и включить Azure VPN. Пропустим эти шаги, т.к. в этой схеме они не участвуют. Azure VPN можно отключить, если у вас белый IP. Если адрес серый, то не отключайте и используйте доменный адрес Azure VPN вместо IP.

Настройка VPN сервера

По окончании первичной настройки попадаем в окно администрирования сервера. Первым делом, удалим ненужные порты (все, кроме 5555 — он используется для подключения к панели администрирования). Задаем какой-нибудь нестандартный TCP порт для прослушивания, например, 7710. Если у Вас нет белого IP адреса, то для использования Azure VPN необходимо слушать 443 порт.
Теперь необходимо создать второй виртуальный хаб, к которому будет подключаться удаленная сеть. Чтобы создать второй хаб, кликаем кнопку «Create a Virtual Hub». Назовем его, например, по номеру удаленной сети — 12. В этом виртуальном хабе создавать Local Bridge ненужно.

Панель администратора

Далее, выбираем 12 хаб и нажимаем «Mange Virtual Hub», затем «Manage Users» создаем пользователя для удаленной сети. Назовем его «Network 12», вместо пароля будем использовать самоподписанный сертификат с тайным ключом.

Создание учетной записи пользователя

Кликаем «Create Certificate» и заполняем строчку “Common name”.

Создание сертификата

Выбираем формат сертификата — X509 (сертификат отдельно, тайный ключ отдельно).

Формат сертификата

Сохраненный сертификат и тайный ключ необходимо будет загрузить в клиент SoftEther VPN Bridge.
Далее необходимо открыть порт в роутере — тот самый, который слушает сервер, и настроить трансляцию порта на ПК с сервером. Подробнее о том, как открывать порты, можно прочитать в этой статье.
Например, в pfSense правило для открытия порта выглядит примерно так. pfSense — при создании правила для NAT, автоматически создает правило и для Firewall. Другие роутеры могут этого не делать, поэтому надо создавать оба правила ручками.

Правило межсетевого экрана

Также, в межсетевом экране на обоих роутерах необходимо разрешить прохождение трафика между сетями. Для разрешения прохождения любого трафика правило будет выглядеть так:

Настройки Firewall

Если на компьютерах включен брандмауэр, то там тоже необходимо разрешить прохождение трафика для нужной сети.
Далее необходимо создать виртуальный роутер. Кликаем кнопку «Layer 3 Switch Settings», создаем новый виртуальный роутер и кликаем кнопку «Edit». Затем, необходимо создать виртуальные интерфейсы для каждого хаба. Для хаба с именем 10 создаем интерфейс с адресом 192.168.10.100, для хаба с именем 12 — 192.168.12.100. Адреса можно придумать свои, главное, чтобы они не были заняты и принадлежали каждый к своей подсети. Разработчики уверяют, что маршруты добавлять необязательно, но лучше на всякий случай добавить. Для запуска роутера нажимаем кнопку «Start».

Виртуальный маршрутизатор

Настройка VPN клиента

Запускаем установку SoftEther VPN Server, при этом выбираем вариант установки SoftEther VPN Bridge. Жмем все время «Далее», затем задаем пароль администратора.

Установка SoftEther VPN Bridge

Здесь, ничего не изменяя, жмем также «Далее».

Настройка SoftEther VPN Bridge

На этом шаге указываем сетевую карту для создания моста с локальной сетью.

Выбор сетевой карты

После этого попадаем в панель управления SoftEther VPN Bridge. Как видим, многие функции в этом режиме отключены.

Панель администратора SoftEther VPN Bridge

Далее необходимо создать каскадное подключение к серверу SoftEther VPN. Нажимаем «Mange Virtual Hub» затем «Mange Cascade Connection» и заполняем данные для подключения.
• Settings name — имя подключения.
• Host Name — белый IP адрес или доменное имя DDNS роутера сети, где установлен сервер. Если у вас нет белого IP адреса, то используем службу Azure VPN и пишем доменное имя, полученное в этой службе (vpn123456789.vpnazure.net). Думаю, понятно, что без белого IP адреса открывать порты на роутере ненужно.
• Port Number — порт, который слушает сервер.
• Virtual Hub Name — имя виртуального хаба на сервере.
• User Authentication Settings — настройки аутентификации пользователя. Поскольку мы решили использовать вместо пароля самоподписанный сертификат, то выбираем строчку «Client Certificate Authentication». Пишем имя пользователя (в примере это — Network 12). Кликаем «Specify Client Certificate», загружаем сертификат и тайный ключ шифрования.

Создание каскадного соединения

Теперь необходимо настроить параметры соединения — кликаем “Advanced Settings”. Здесь необходимо задать количество TCP соединений, для широкополосного соединения рекомендуется 8.

Дополнительные настройки соединения

Настройка маршрутизации

Настройка заключается в прописывании статических маршрутов в роутерах обеих подсетей.
На роутере 192.168.10.1 (см. схему) прописываем маршрут до сети 192.168.12.0. Выглядеть он будет так: 192.168.12.0 маска 255.255.255.0 шлюз 192.168.10.100.
На роутере 192.168.12.1 прописываем маршрут до сети 192.168.10.0: 192.168.10.0 маска 255.255.255.0 шлюз 192.168.12.100.
Для надежности перезагружаем оба ПК и роутера.

Доступ к общим папкам через SoftEther VPN

После произведенных выше настроек все компьютеры в сети должны нормально «пинговать» друг друга (если не запрещено брандмауэром). Однако, получить доступ к общим папкам Windows невозможно. Эта проблема решается прописыванием статических маршрутов непосредственно на компьютерах с общими ресурсами. Запускаем командную строку Windows от имени администратора и пишем команду:
для компьютеров, находящихся в сети 192.168.10.0:
route -p add 192.168.12.0 mask 255.255.255.0 192.168.10.100
для компьютеров, находящихся в сети 192.168.12.0:
route -p add 192.168.10.0 mask 255.255.255.0 192.168.12.100
На этом настройка завершена. Для анализа маршрута трафика советую пользоваться командной строкой Windows, командой pathping.

Вопросы задаем в комментариях.

Безопасный удаленный доступ к сервисам в локальной сети.

VPN (англ. Virtual Private Network, «виртуальная частная сеть») — обобщённое название технологий, позволяющих обеспечить одно или несколько сетевых соединений (логическую сеть) поверх другой сети (например Интернет).

Википедия

Наиболее популярные решения с открытым исходным кодом для построения виртуальных частных сетей — «OpenVPN» и «IPSec». В релиз ядра Linux 5.6, который состоялся 30 марта 2020 года, вошла еще одна реализация технологии VPN — «WireGuard». Это молодой набирающий популярность проект.

Основные преимущества «WireGuard»:

  • Высокая производительность (бенчмарки можно посмотреть тут)
  • Простая настройка
  • Современная криптография
  • Качественный код

В этой инструкции мы настроим VPN-туннель в локальную сеть с помощью «WireGuard» и обеспечим доступ из интернета к узлам LAN с различных устройств.

Адресация в LAN — 192.168.100.0/24, VPN-сети назначим диапазон 10.0.0.0/24.

Схема сети

Настройка сервера

Для размещения сервера потребуется VPS. При выборе необходимо обратить внимание на технологию виртуализации: предпочтительно KVM, можно XEN, а вот OpenVZ следует избегать. Дело в том, что в WireGuard реализован как модуль ядра, а в OpenVZ ядро очень старое. Я буду использовать самый дешевый виртуальный сервер c операционной системой Ubuntu 20.04 (KVM 512 МБ RAM 20 ГБ SSD 1 CPU — такая конфигурация вполне подойдет).

Залогинимся на сервер с правами пользователя root и выполним следующие команды:

# устанавливаем Wireguard
apt update && apt upgrade
apt install wireguard
# разрешаем проброс пакетов
echo «net.ipv4.ip_forward=1» >> /etc/sysctl.conf
sysctl -p
# генерируем ключи для сервера:
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

Создадим конфигурационный файл /etc/wireguard/wg0.conf со следующим содержимым:

[Interface]
Address = 10.0.0.1/24
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820
PrivateKey = <SERVER_PRIVATE_KEY>

Параметры PostUp/PostDown содержат правила iptables, которые будут применены при запуске/остановке сервиса. Обратите внимание на название сетевого интерфейса — оно должно соответствовать общедоступному сетевому адаптеру, в моем случае это eth0. Вывести список адаптеров можно командой:

ip a

Выберите из списка тот, которому соответствует внешний IP-адрес. <SERVER_PRIVATE_KEY> — заменяем содержимым файла /etc/wireguard/privatekey.

Запустим VPN-сервис и добавим его в автозагрузку:

Убедимся, что служба запустилась корректно:

[email protected]:/etc/wireguard# wg show wg0
interface: wg0
public key: <SERVER_PUBLIC_KEY>
private key: (hidden)
listening port: 51820

Настройка клиента в LAN

Если ваш роутер поддерживает WireGuard (Zyxel KeeneticOS >=3.3, Mikrotik RouterOS >=7.1beta2, OpenWRT) — можно настроить VPN-клиент прямо на нем. Я буду использовать для этой цели сервер Ubuntu 20.04 (локальный адрес 192.168.100.7).

Первый этап настройки аналогичен конфигурации серверной части. Выполняем с правами root-пользователя:

# устанавливаем WireGuard
apt update && apt upgrade
apt install wireguard
# разрешаем проброс пакетов
echo «net.ipv4.ip_forward=1» >> /etc/sysctl.conf
sysctl -p
# генерируем ключи для клиента
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

Редактируем /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = <PEER_LAN_PRIVATE_KEY>
Address = 10.0.0.2/32
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wlp2s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wlp2s0 -j MASQUERADE

[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = <SERVER_IP>:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 20

<PEER_LAN_PRIVATE_KEY> — заменяем содержимым /etc/wireguard/privatekey, <SERVER_PUBLIC_KEY> — /etc/wireguard/publickey с сервера, <SERVER_IP> — внешний IP-адрес сервера. Правила iptables в PostUp/PostDown необходимы для того, чтобы наш клиент выступал в роли шлюза в LAN. Указываем в правилах тот сетевой интерфейс, на который назначен локальный адрес (192.168.100.7, в моем случае это wlp2s0). Уточните его путем исполнения команды:

ip a

В параметре AllowedIPs задаются адреса, маршрутизация к которым будет осуществляться через VPN-интерфейс. В поле PersistentKeepalive — периодичность проверки доступности соединения в секундах. Запускаем службу и добавляем в автозагрузку:

На сервере добавляем в файл /etc/wireguard/wg0.conf блок:


[Peer]
# PEER_LAN
PublicKey = <PEER_LAN_PUBLIC_KEY>
AllowedIPs = 10.0.0.2/32, 192.168.100.0/24

Где <PEER_LAN_PUBLIC_KEY> — /etc/wireguard/publickey клиента. Перезапустим службу и убедимся, что все настроено корректно:

systemctl restart [email protected]
[email protected]:/etc/wireguard# wg show wg0
interface: wg0
public key: <SERVER_PUBLIC_KEY>
private key: (hidden)
listening port: 51820

peer: <CLIENT_PUBLIC_KEY>
endpoint: <CLIENT_IP>:42946
allowed ips: 10.0.0.2/32, 192.168.100.0/24
latest handshake: 2 minutes, 8 seconds ago
transfer: 3.24 KiB received, 828 B sent
[email protected]:/etc/wireguard# ping -c 3 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=31.1 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=120 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=40.9 ms

— 10.0.0.2 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 31.093/63.987/119.950/39.774 ms
[email protected]:/etc/wireguard# ping -c 3 192.168.100.5
PING 192.168.100.5 (192.168.100.5) 56(84) bytes of data.
64 bytes from 192.168.100.5: icmp_seq=1 ttl=63 time=31.8 ms
64 bytes from 192.168.100.5: icmp_seq=2 ttl=63 time=119 ms
64 bytes from 192.168.100.5: icmp_seq=3 ttl=63 time=40.0 ms

— 192.168.100.5 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 31.834/63.573/118.915/39.273 ms

Проверим теперь с клиента:

[email protected]:/etc/wireguard# wg show wg0
interface: wg0
public key: <CLIENT_PUBLIC_KEY>
private key: (hidden)
listening port: 42946

peer: <SERVER_PUBLIC_KEY>
endpoint: <SERVER_IP>:51820
allowed ips: 10.0.0.0/24
latest handshake: 8 seconds ago
transfer: 21.34 KiB received, 83.03 KiB sent
persistent keepalive: every 21 seconds
[email protected]:/etc/wireguard# ping -c 3 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=32.0 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=32.6 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=32.2 ms

— 10.0.0.1 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 32.013/32.265/32.586/0.316 ms

Настройка удаленных клиентов

Сборки WireGuard доступны для основных платформ: Linux, Windows, Mac, Android, FreeBSD, OpenWRT и др. Рассмотрим настройку VPN-клиента на десктопах под управлением Linux и Windows, а так же на Android-смартфоне.

Удаленный Linux клиент

На клиенте выполняем с правами root:

# устанавливаем Wireguard
apt update && apt upgrade
apt install wireguard

# генерируем ключи
wg genkey | tee /etc/wireguard/peer_1_privatekey | wg pubkey | tee /etc/wireguard/peer_1_publickey

Конфигурационный файл /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = <PEER_1_PRIVATE_KEY>
Address = 10.0.0.3/32
DNS = 8.8.8.8

[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = <SERVER_IP>:51820
AllowedIPs = 0.0.0.0/0
# AllowedIPs = 10.0.0.0/24, 192.168.100.0/24
PersistentKeepalive = 20

<PEER_1_PRIVATE_KEY> — заменяем содержимым /etc/wireguard/peer_1_privatekey, <SERVER_PUBLIC_KEY> — /etc/wireguard/publickey с сервера.

Обратите внимание на строку «AllowedIPs = 0.0.0.0/0» — в данной конфигурации весь трафик будет маршрутизироваться через VPN-адаптер. Это может понадобиться для сокрытия реального IP при работе в интернет или для защиты трафика при подключении к недоверенным сетям (например публичные Wi-Fi точки доступа). В этом случае указываем «DNS = 8.8.8.8» (8.8.8.8 — DNS-сервер Google), чтобы DNS-запросы выполнялись через защищенное VPN-соединение.

Если VPN-туннель необходим только для доступа к LAN 192.168.100.0/24 — убираем строчку «DNS = 8.8.8.8» и в параметре AllowedIPs меняем «0.0.0.0/0» на «10.0.0.0/24, 192.168.100.0/24».

# запускаем службу
wg-quick up wg0
# добавляем в автозапуск
systemctl enable [email protected]

На сервере в конфигурационный файл /etc/wireguard/wg0.conf добавляем блок:


[Peer]
PublicKey = <PEER_1_PUBLIC_KEY>
AllowedIPs = 10.0.0.3/32

Где <PEER_1_PUBLIC_KEY> — содержимое файла /etc/wireguard/peer_1_publickey клиента и перезапускаем службу:

Возвращаемся на клиент и проверяем доступность узлов в LAN через VPN-туннель:

[email protected]:/etc/wireguard# wg show wg0
interface: wg0
public key: <PEER_1_PUBLIC_KEY>
private key: (hidden)
listening port: 34022

peer: <SERVER_PUBLIC_KEY>
endpoint: <SERVER_IP>:51820
allowed ips: 10.0.0.0/24, 192.168.100.0/24
latest handshake: 44 seconds ago
transfer: 6.91 KiB received, 8.96 KiB sent
persistent keepalive: every 20 seconds

[email protected]:/etc/wireguard# ping -c 3 192.168.100.5
PING 192.168.100.5 (192.168.100.5) 56(84) bytes of data.
64 bytes from 192.168.100.5: icmp_seq=1 ttl=62 time=66.3 ms
64 bytes from 192.168.100.5: icmp_seq=2 ttl=62 time=65.7 ms
64 bytes from 192.168.100.5: icmp_seq=3 ttl=62 time=67.2 ms

— 192.168.100.5 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 65.748/66.387/67.157/0.582 ms

Удаленный Windows клиент

На сервере сгенерируем ключи для Windows-клиента:

wg genkey | tee /etc/wireguard/peer_2_windows_privatekey | wg pubkey | tee /etc/wireguard/peer_2_windows_publickey

Добавим блок Peer в файл /etc/wireguard/wg0.conf:

…​
[Peer]
PublicKey = <PEER_2_PUBLIC_KEY>
AllowedIPs = 10.0.0.4/32

Перезапустим сервер:

Конфигурационный файл windows.conf:

[Interface]
PrivateKey = <PEER_2_PRIVATE_KEY>
Address = 10.0.0.4/32

[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = <SERVER_IP>:51820
AllowedIPs = 10.0.0.0/24, 192.168.100.0/24
PersistentKeepalive = 20

В приложении WireGuard открываем конфигурационный файл и нажимаем кнопку «подключение».

Конфигурационные файлы можно генерировать и на клиентах, а после отправлять открытые части ключей на сервер.

Удаленный Android клиент

Приложение для Android доступно в Google Play.

Генерируем ключи для клиента и добавляем Peer в конфигурационный файл сервера.

wg genkey | tee /etc/wireguard/peer_3_android_privatekey | wg pubkey | tee /etc/wireguard/peer_3_android_publickey

/etc/wireguard/wg0.conf:


[Peer]
PublicKey = <PEER_3_PUBLIC_KEY>
AllowedIPs = 10.0.0.5/32

Не забываем перезапускать сервер после каждого изменения конфигурации:

Создадим конфигурационный файл для Android клиента mobile.conf:

[Interface]
PrivateKey = <PEER_3_PRIVATE_KEY>
Address = 10.0.0.5/32

[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = <SERVER_IP>:51820
AllowedIPs = 10.0.0.0/24, 192.168.100.0/24
PersistentKeepalive = 20

Устанавливаем пакет qrencode:

sudo apt install qrencode

И генерируем QR-код с конфигурацией для PEER_3:

В Android-приложении выбираем пункт меню «сканировать QR-код»:

И подключаемся к VPN-туннелю:

Распространенные проблемы

1. Соединение не устанавливается, «0 B received»

wg show wg0
interface: wg0
public key: <CLIENT_PRIVATE_KEY>
private key: (hidden)
listening port: 42658

peer: <SERVER_PUBLIC_KEY>
endpoint: 80.249.145.4:51821
allowed ips: 10.0.0.0/24
transfer: 0 B received, 1.16 KiB sent
persistent keepalive: every 20 second

Возможные причины и решения:

  • Сетевое соединение блокируется межсетевым экраном — проверьте настройки iptables на сервере и Linux клиентах, брандмауэра Windows, межсетевого экрана маршрутизатора;
  • UDP трафик блокируется интернет провайдером — WireGuard не поддерживает TCP, в этом случае стоит рассмотреть альтернативные решения, например openVPN в режиме TCP (либо туннелировать UDP, что не всегда целесообразно);
  • Ошибка в IP-адресе или PORT сервера — проверьте значение параметра «Endpoint» в конфигурационном файле;
  • Ошибка в ключах — проверьте ключи, в конфигурации сервера — открытые части ключей клиентов и приватная часть ключа сервера, в конфигурации клиентов — открытая часть ключа сервера, приватная часть ключа клиента.

2. При указании параметра DNS возникает ошибка «resolvconf: command not found»

[email protected]:/etc/wireguard# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.2/32 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a wg0 -m 0 -x
/usr/bin/wg-quick: line 32: resolvconf: command not found
[#] ip link delete dev wg0

Установите пакет openresolv:

apt install openresolv

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

Lightsail AWS — о нем пойдет речь в данной статье.

Подобных обзоров «как создать свой VPN» крайне много, но я так и не нашёл простого решения для новичка, с поддержкой создания полноценной локальной сети между двух и более клиентов с серым IP, находящимися за NAT.

Данное руководство я отношу к уровню подготовки «user+»: пользователь должен но не обязан знать что хочет получить, уверенно держит в руке мышь и видел командную строку в фильмах про хакеров.

Хочу обратить внимание начинающих хакеров: если вы взломаете пентагон с данного IP, скорее всего, ваш провайдер (Amazon в данном случае) сдаст вас «с потрохами» и от суровых людей с паяльником в руках спасения не будет.

Начну с цены

ежемесячный платеж 350 рублей

ежемесячный платеж 350 рублей

Ежемесячный платёж 350 рублей, но вы можете сэкономить и не покупать выделенный IP у своего провайдера.

Шаг 1 — регистрация на AWS

Собственно проходим по ссылке и регистрируемся lightsail.aws.amazon.com

окно регистрации AWS

окно регистрации AWS

Номер телефона и банковскую карту указываем свою, может придётся пройти проверку по телефону (звонит робот), мне не пришлось.

(дополнительно) для доступа по SSH нужно получить отдельный ключ

делается один раз — для учётной записи

Шаг 2 — создаём виртуальный сервер

приступаем к созданию виртуального сервера

приступаем к созданию виртуального сервера

Мой выбор региона — Ирландия (Дублин), если нужна максимальная скорость — Германия (Франкфурт).

выбираем регион

выбираем регион
выбираем операционную систему
выбираем операционную систему
выбираем тип сервера (я рекомендую самый дешевый) 1TB трафика в месяц должно хватить
выбираем тип сервера (я рекомендую самый дешевый) 1TB трафика в месяц должно хватить

Теперь резервируем выделенный IP4 адрес, IP6 — закрепляется автоматом при создании виртуального сервера (его поменять нельзя).

резервируем статический внешний IP

резервируем статический внешний IP

Получив IP4 адрес, сразу закрепляем его за нашим виртуальным сервером.

закрепляем IP4 за нашим виртуальным сервером

закрепляем IP4 за нашим виртуальным сервером
нажимаем на "Home" и возвращаемся на главный экран
нажимаем на «Home» и возвращаемся на главный экран

Здесь важный момент (его можно сделать как до настройки сервера, так и позже). Рядом с кнопкой вызова терминала (выделена синим квадратом) нажимаем 3 точки, выбираем Manage затем Networking.

всплывающее меню

всплывающее меню
прописываем входящие порты (по умолчанию 22, 80)
прописываем входящие порты (по умолчанию 22, 80)

Открываем входящие порты для нашего сервера, добавлю только что 2012 выбран для shadowsocks.

Шаг 3.1 — настройка сервера (AWS)

Запускаем терминал и обновляем систему и устанавливаем пакеты (копируем построчно, нажимая enter и отвечая «y«).

терминал откроется в окне браузера

терминал откроется в окне браузера
su
pkg update
pkg upgrade
pkg install shadowsocks-libev
pkg install softether
sysrc softether_server_enable=yes
sysrc shadowsocks_libev_enable=yes

ход выполнения

ход выполнения

Я не осилил текстовый редактор vi, поэтому установим более простой вариант :)

pkg install nano

Удаляем все строки несколько раз нажимаем ctrl+k и добавляем, где 12345 — ваш пароль для подключения к shadowsocks (лучше заменить).

    {
    "server":["[::0]","0.0.0.0"],
    "server_port":2012, 
    "password":"12345",
    "method":"aes-256-gcm",
    "timeout":300, 
    "user":"nobody",
    "fast_open":false
    }

Сохраняем и выходим ctrl+x, на вопрос о сохранении отвечаем «y«.

редактор "nano"

редактор «nano»
обязательно перезагружаем сервер
обязательно перезагружаем сервер

Перезагружаем сервер: пишем в консоли reboot и нажимаем enter.

Шаг 3.2 — настройка сервера (Windows)

Скачиваем SoftEther VPN Client для Windows www.softether.org, устанавливаем оба приложения из списка во время установки.

официальный сайт SoftEther

официальный сайт SoftEther

После установки запускаем SoftEther VPN Server Manager.

создаем новое подключение

создаем новое подключение
создаем подключение к нашему удаленному серверу
создаем подключение к нашему удаленному серверу
для создание центрального шлюза (для объединения наших сетей) включаем Site-to-site VPN
для создание центрального шлюза (для объединения наших сетей) включаем Site-to-site VPN
можете поменять имя DDNS (а можем и подключаться по IP)
можете поменять имя DDNS (а можем и подключаться по IP)
включаем IPsec и L2TP (для совместимости со всем зоопарком устройств)
включаем IPsec и L2TP (для совместимости со всем зоопарком устройств)
VPN Azure по желанию
VPN Azure по желанию
для пользователя рекомендую оставить авторизацию по паролю
для пользователя рекомендую оставить авторизацию по паролю
больше ничего настраивать ненужно
больше ничего настраивать ненужно

В главном окне нажимаем «Encryption and Network» Выбираем шифрование для VPN подключений и скачиваем сертификат

главное окно

главное окно
устанавливаем шифрование
устанавливаем шифрование
скачиваем сертификат
скачиваем сертификат
выбираем тип сертификата
выбираем тип сертификата
сохраняем сертификат
сохраняем сертификат
включаем NAT
включаем NAT

нажимаем Enable SecureNAT
нажимаем Enable SecureNAT

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

Шаг 4 — настройка клиента

Устанавливаем сертификат, сертификат нужен на всех устройствах для подключения VPN (Windows: только в «локальный компьютер», по другому не работает SSTP VPN).

Создаём подключение SSTP VPN (ПускПараметрыСеть и ИнтернетVPN).

дополнительно — интернет через VPN, локальная сеть без изменений

Панель управленияВсе элементы панели управленияСетевые подключения

vpnCвойства

Внимание: утечка DNS

Или SSL VPN (запускаем SoftEther VPN Client Manager).

вводим IP, имя пользователя и пароль, дополнительно "Advanced Settings"

вводим IP, имя пользователя и пароль, дополнительно «Advanced Settings»
дополнительно — интернет через VPN, локальная сеть без изменений

Внимание: утечка DNS

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

Если вам нужен полный доступ между домашней подсетью и подсетью рабочего компьютера, вам понадобиться на рабочий и домашний компьютер установить SoftEther VPN Bridge.

SoftEther VPN Bridge

По уровню сложности это выходит за рамки данной статьи, если интересно — читайте здесь https://www.softethernet.ru/pr1.html

Бонус (shadowsocks)

Не всегда нужен полноценный VPN, иногда просто хочется безопасно посмотреть котиков в браузере. Для Windows скачиваем https://github.com/shadowsocks/shadowsocks-windows/releases

Shadowsocks Windows (не требует прав администратора)

Shadowsocks Windows (не требует прав администратора)

В браузере Firefox скачиваем расширение FoxyProxy (так же и на Android), настройка: SOCKS5/127.0.0.1/1080

foxyproxy для Firefox, для Chrome - proxy-switchyomega

foxyproxy для Firefox, для Chrome — proxy-switchyomega

Для Android https://play.google.com/store/apps/details?id=com.github.shadowsocks выбираем только прокси (тогда не будет подниматься VPN канал).

Shadowsocks Android

Shadowsocks Android
Shadowsocks скорость на провайдер МТС в Санкт-Петербург
Shadowsocks скорость на провайдер МТС в Санкт-Петербург
SSTP VPN (2 устройства в сети) скорость на провайдер МТС в Санкт-Петербурге
SSTP VPN (2 устройства в сети) скорость на провайдер МТС в Санкт-Петербурге

P.S.

Почему Amazon? — самая низкая скорость, которая была — 10Mbps.

Почему FreeBSD? — SoftEther под него устанавливается менеджером пакетов, да и сама ОС потребляет меньше ресурсов и без того дохлого виртуального сервера.

Виртуальные частные сети (VPN) расширяют
сеть предприятия, размыкая пределы
локальных сетей. С помощью VPN сотрудники,
находящиеся вне предприятия, могут
безопасно подключиться к корпоративной
локальной сети из любой точки Internet.
Аутентифицированный и зашифрованный
туннель VPN прокладывается через Internet,
поэтому затраты на его организацию гораздо
ниже, чем на дорогостоящие двухточечные
специальные сетевые каналы. Многие
администраторы знакомы с решениями RRAS VPN
компании Microsoft и с коммерческими VPN таких
поставщиков, как Cisco Systems и Nortel Networks, но не
всем известно об открытой программе OpenVPN,
которая отличается высокой гибкостью и
располагает функциями VPN. При значительно
меньших затратах, основные функции OpenVPN
такие же, как у коммерческих конкурентов.
OpenVPN распространяется бесплатно, и
администратору приходится тратить время
лишь на настройку конфигурации.

Предприятиям, которые уже располагают
коммерческой VPN, нет смысла менять ее на
OpenVPN. Но если нужно организовать новую VPN для
офиса филиала или лаборатории, либо
требуется недорогое, безопасное решение
для связи с удаленными сетями, то OpenVPN
заслуживает внимания. Программа совместима
со многими операционными системами,
поэтому может стать альтернативой VPN-функциональности
RRAS или Microsoft Internet Security and Acceleration (ISA) Server для
предприятий, использующих платформу Windows. В
данной статье рассматриваются основные
этапы развертывания клиентского решения
OpenVPN и важнейшие характеристики продукта.

Основы OpenVPN

В OpenVPN ряд основных функций защиты VPN
реализован на базе протокола Secure Sockets Layer
(SSL)/Transport Layer Security (TLS), а в других сетевых VPN
для этого используются протоколы IP Security
(IPsec) или PPTP. В отличие от других SSL VPN,
достоинством которых считается
безклиентская установка (соединение SSL VPN
устанавливается через браузер), для OpenVPN
необходим специальный клиент. Кроме того,
OpenVPN представляет собой одноранговое (P2P)
приложение, поэтому одну программу можно
выполнять по обеим сторонам туннеля VPN.

В OpenVPN предусмотрены режимы моста (bridged) и
маршрутизации (routing), в которых сетевой
трафик можно направлять через единственный
порт UDP или TCP по выбору администратора. По
умолчанию OpenVPN использует протокол UDP и порт
1194. Любой сетевой трафик, посылаемый или
принимаемый для сетевого адаптера,
инкапсулируется в зашифрованный пакет и
доставляется в другой конечный пункт
туннеля OpenVPN, где данные расшифровываются и
попадают в удаленную сеть.

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

Продукт предоставляется в соответствии с
условиями лицензии Open Source GNU General Public License (GPL)
и работает с Windows 2000 и более новыми версиями,
Linux, OpenBSD, FreeBSD, NetBSD, Mac OS X и Solaris. Выбрав
платформу, можно загрузить новейшую версию
OpenVPN с Web-узла http://openvpn.net. Во время подготовки
данного обзора самой новой версией была
OpenVPN 2.0-rc20. Сторонники графического
интерфейса могут загрузить необязательный
графический интерфейс с Web-узла OpenVPN
(http://www.nilings.se/openvpn) и установить его, следуя
простым инструкциям.

По сути OpenVPN представляет собой
приложение командной строки, которое можно
настроить на работу в качестве службы.
Приложение можно запускать с огромным
числом параметров настройки, сочетая ключи
командной строки и элементы файла
конфигурации. Полный список всех
параметров опубликован на странице OpenVPN Man
Page по адресу http://openvpn.net/man.html. Кроме того, для
управления несколькими конечными точками
туннелей на одном сервере можно
использовать несколько файлов
конфигурации.

Определение сетевой топологии

С помощью OpenVPN можно организовать VPN между
сайтами или клиентские туннели. Пакет OpenVPN
отличается гибкостью, и этапы настройки VPN
между сайтами и типа клиент-сервер похожи. В
действительности, одно приложение OpenVPN
устанавливается в обоих конечных пунктах
VPN. Как уже отмечалось, установить VPN в
базовой конфигурации просто, но программа
усложняется при активизации
дополнительных функций. Например, чтобы
запустить и настроить некоторые функции
безопасности, необходимы познания в
шифровании и управлении ключами. OpenVPN
поддерживает несколько механизмов
аутентификации, в том числе сертификаты,
смарт-карты и учетные данные пользователя,
имя пользователя/пароль. Однако чтобы
применить такие меры безопасности, нужно
задействовать сложные компоненты
программы, и для их реализации
администратор должен хорошо знать основы
PKI. На Web-узле OpenVPN опубликованы полезные
документы и примеры, которые могут
пригодиться при настройке этих параметров.

Настройка сервера

Загрузив версию для Windows, следует
скопировать ее на сервер, который будет
применяться в качестве сервера VPN, и
запустить программу установки. Мастер
проводит пользователя по этапам этой
процедуры, которая состоит в развертывании
OpenVPN, программы настройки графического
интерфейса OpenVPN и инструмента генерации
запроса сертификата. Мастер запрашивает
различные параметры, но для базовой
установки достаточно значений, выбираемых
по умолчанию. Программы и исходные файлы
можно найти в папке C:Program FilesOpenVPN.

После завершения установки появляется
дополнительный сетевой адаптер —
устройство с именем TAP-Win32 Adapter V8. Если
планируется настроить OpenVPN в режиме моста,
то необходимо вручную организовать
мостовое соединение нового адаптера с
другим сетевым адаптером, уже имеющимся в
системе. Если предстоит работать в режиме
маршрутизации, то Windows распознает
устройство как сетевой адаптер с IP-адресом.
Обе конфигурации — мостовая и маршрутизации
— будут рассмотрены ниже.

Но сначала следует познакомиться с
основным инструментарием настройки OpenVPN. На
сервере требуется перейти в каталог OpenVPN (по
умолчанию C:Program FilesOpenVPNconfig), скопировать
файл sample.ovpn.txt и дать ему любое другое имя с
расширением .ovpn (например, myOpenVpnConfig.ovpn). В
этом файле содержится подробно
аннотированный пример настройки OpenVPN. После
более близкого знакомства с работой OpenVPN
администратор сможет создать собственный
файл конфигурации OpenVPN длиной всего
несколько строк.

OpenVPN работает подобно P2P VPN, поэтому каждый
активный экземпляр файла в компьютере в
действительности представляет собой еще
одну конечную точку. В данном примере будет
показано, как настроить одну систему в
качестве сервера VPN, который сможет
принимать соединения из любого IP-адреса.
Необходимо открыть новый файл конфигурации
и отыскать текст

remote myremote

Поскольку данный компьютер настраивается
для выполнения функций сервера, он не будет
устанавливать исходящих соединений с
удаленным компьютером. Поэтому указанную
строку следует превратить в комментарий с
помощью точки с запятой (;):

; remote myremote

Если указан адрес удаленного компьютера (например,
remote 10.0.0.10), то будут разрешены соединения
только с этим адресом. Это одна из мер
защиты двухточечного соединения VPN между
двумя удаленными сетями. Однако данная
конечная точка настраивается в качестве VPN-сервера
OpenVPN, так что придется разрешить соединения
от любых удаленных клиентов. По этой
причине мы просто превратили строку в
комментарий. Позднее данный VPN-сервер будет
настроен как удаленный компьютер.

По умолчанию OpenVPN использует UDP-порт с
номером 1194. Если порт нужно изменить —
например, чтобы использовать протокол,
который открывают большинство
администраторов брандмауэров, такой как TCP
443 — следует отыскать строку

; port 1194

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

Затем следует выбрать сетевой протокол dev
tap или dev tun. Если планируется использовать
OpenVPN в режиме моста, необходимо выбрать dev tap.
В данном примере выполняется настройка
соединения Windows-Windows в мостовой
конфигурации, поэтому выбран протокол dev tap.
В файле конфигурации должен быть элемент

dev tap

Затем настраивается метод аутентификации
соединения. Для соединений, требующих
повышенной безопасности, следует настроить
TLS с собственной парой сертификат/ключ на
обоих концах соединения. В данном примере
для настройки VPN-соединения используется
статический ключ (другие функции
шифрования OpenVPN описаны во врезке «Режимы шифрования»).
Сервер будет принимать только соединения
OpenVPN с таким же статическим ключом.

В меню Start, All Programs, OpenVPN следует щелкнуть на
пункте Generate a static OpenVPN key. В результате
запускается простая консольная программа,
которая генерирует ключ и копирует его в
файл C:Program FilesOpenVPNconfigkey.txt. Любой
обладатель статического ключа сможет
установить соединение с конечной точкой
OpenVPN, поэтому его следует хранить в секрете.
Данный метод похож на процедуру настройки
беспроводного узла доступа Access Point (AP) со
статическим ключом. Статического ключа
достаточно, чтобы связать две удаленные
сети через OpenVPN, но если организован
конечный сервер OpenVPN со многими клиентами,
то лучше применять более надежный метод
аутентификации пользователей, такой как
сертификаты.

Файл конфигурации OpenVPN должен содержать
команду Secret, за которой следует имя файла
ключа:

secret key.txt

Если пример файла конфигурации .ovpn был
предварительно скопирован, то изменять
команду secret не нужно, так как она включена
по умолчанию. Наконец,
полезно добавить в файл конфигурации
следующие две команды:

verb 4
mute 10

Команда
verb задает уровень детализации журнала OpenVPN,
и администратор может задать значение от 0
до 11. Параметр 0 означает, что не
отображается никаких выходных данных,
кроме неисправимых ошибок, а параметр 11
отображает множество данных, полезных при
отладке. Как правило, для большинства
пользователей достаточно значения 4.
Команда mute выдает множество сообщений об
ошибках и статусе. Эта команда полезна, если
повторные попытки клиента установить
соединение заканчиваются неудачей, и нужно,
чтобы журнал не засоряли экземпляры одного
и того же сообщения. Параметр 10 команды mute
означает, что OpenVPN будет отображать не более
10 экземпляров одного сообщения, и отбросит
остальные.

Настройка
конфигурации клиента

Процесс
установки клиента OpenVPN похож на процедуру
для сервера. Нужно развернуть ту же
программу OpenVPN и создать файл конфигурации
.ovpn. Параметры должны соответствовать
параметрам, заданным на сервере, с
немногими исключениями. С помощью
надежного носителя, такого как гибкий диск,
нужно скопировать статический ключ,
подготовленный для сервера (key.txt), на
клиентский компьютер (например, в каталог
C:Program FilesOpenVPNconfig).

Конфигурация
клиента OpenVPN, использующего выбираемый по
умолчанию протокол UDP и порт с номером 1194,
может выглядеть следующим образом:

remote 10.0.0.2
dev tap
ifconfig 192.168.0.100
255.255.255.0
secret key.txt
verb 4
mute 10

Данная конфигурация идентифицирует
удаленный VPN-сервер, с которым установит
соединение клиент, определяет сетевой
протокол как dev tap и назначает клиентский IP-адрес
для OpenVPN. Также назначаются параметры для
Secret, Verb и Mute. Клиентский IP-адрес зависит от
режима OpenVPN — моста или маршрутизации. В
режиме моста этот адрес должен совпадать с
IP-адресом локальной сети.

Мост или маршрутизация?

Итак, конфигурация сервера и клиента OpenVPN
настроена. Но это еще не все. Необходимо
внести в конфигурацию дополнительные
изменения, в зависимости от режима OpenVPN —
мост или маршрутизация. У каждого варианта
есть свои преимущества в зависимости от
нужд предприятия. При организации моста
между двумя сетями все объекты обоих сетей
выглядят как часть единой подсети. Поэтому
приложения, которые ведут
широковещательную передачу данных, смогут
работать через туннель VPN. Однако
увеличивается интенсивность трафика через
VPN, что замедляет связь. Организовать мост
проще, так как не нужно заботиться о
настройке новых сетевых маршрутов,
добиваясь, чтобы все компьютеры на обеих
сторонах VPN могли устанавливать соединения
друг с другом. Однако в режиме моста
локальная сеть предприятия слабее защищена
от входящих клиентов VPN (или сетей), чем в
режиме маршрутизации.

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

Рассмотрим пример с мостом. В режиме моста
строится мост между OpenVPN TAP-Win32 Adapter V8 и
сетевым адаптером VPN-сервера. В этом режиме
любой сетевой трафик любого адаптера
выглядит так, как будто оба сетевых
адаптера подключены к одной подсети.
Образующий мост адаптер имеет один IP-адрес.
Мост между адаптерами строится в Windows, а не в
файле конфигурации OpenVPN.

После установки программы OpenVPN следует
открыть утилиту Network Connections в панели
управления. Нажав клавишу Ctrl, следует
выделить как сетевой адаптер локальной
сети, так и адаптер OpenVPN TAP-Win32. Когда оба
адаптера будут выделены, нужно щелкнуть
правой кнопкой мыши на одном из адаптеров и
выбрать пункт Bridge Connections из контекстного
меню. Спустя мгновение на экране появится
новый объект мостового сетевого адаптера.
Этот объект функционирует как сетевой
адаптер и, по умолчанию, система назначит
ему IP-адрес DHCP. На одном компьютере можно
создать несколько конечных точек VPN с
помощью нескольких адаптеров OpenVPN TAP-Win32.
Если нужно соединить их в мостовой
конфигурации, то следует присоединить их к
мосту, обратившись к Properties раздела Network Bridge
и выбрав дополнительные адаптеры.

Если OpenVPN работает на многоузловом (multihomed)
компьютере — например, компьютере с
внутренним (корпоративная сеть) и внешним (общедоступный
канал в Internet) интерфейсами — то подключать к
мосту внешний сетевой адаптер нельзя. Мост
должен соединять только внутренний (корпоративная
сеть) сетевой адаптер с адаптером OpenVPN TAP-Win32,
а внешний интерфейс необходимо обязательно
защитить брандмауэром или другим
устройством. Это все, что нужно сделать,
чтобы настроить сервер для работы OpenVPN в
режиме моста. Никаких изменений в серверы
вносить не требуется.

После настройки файлов конфигурации как
на сервере, так и на клиенте, следует
сохранить их и запустить программу OpenVPN,
сначала на сервере. OpenVPN нужно запустить из
системной панели, щелкнув правой кнопкой
мыши на пиктограмме OpenVPN, а затем на кнопке
Connect. На экране появится диалоговое окно
OpenVPN с несколькими сообщениями о состоянии.
Если соединение выполнено успешно, то
пиктограмма становится желтой и программа
ожидает новых соединений. Для запуска
соединения OpenVPN из командной строки нужно
ввести команду

openvpn config
 

Затем следует подключить клиента,
повторив описанные выше шаги (Экран 1). Если соединение успешно
установлено, то цвет пиктограммы станет
зеленым, и появится сообщение, показанное
на Экране 2. После того, как соединение
установлено, можно обратиться к сетевому
приложению в удаленной сети — например,
протестировать соединение, направив ping-сигнал
на сервер удаленной сети с клиента.
Настройка бесплатной VPN с открытым исходным
текстом завершена.

Какая VPN нужна предприятию?

OpenVPN надежна и устойчива к отказам сети.
Если сетевое соединение прервано при
активной сети VPN, то OpenVPN автоматически
восстанавливает соединение после
восстановления сетевого канала связи. Для
простых случаев, таких как описано в данной
статье, OpenVPN позволяет быстро организовать
туннель OpenVPN, без серьезных дополнительных
затрат. Труднее освоить продукт при
использовании более сложных конфигураций —
например, если требуется пользовательская
аутентификация, выделение пула адресов VPN,
либо прокладка нескольких туннелей за
брандмауэром с помощью NAT (Network Address Translation).
OpenVPN поддерживает эти режимы, но требует
знания технических тонкостей. В таких
случаях проще развернуть коммерческие VPN,
так как у них, как правило, есть графический
интерфейс и предоставляются технические
консультации.

Цена коммерческих VPN также снизилась:
всего за несколько тысяч долларов можно
приобрести коммерческий концентратор VPN
для обслуживания сотен пользователей.
Кроме того, в VPN на базе UDP или TCP устранены
многие несогласованности брандмауэра VPN,
которые мешали работе туннелей IPsec. OpenVPN — не
для всех; средним и крупным компаниям лучше
по-прежнему работать с коммерческими
продуктами VPN. Но в лабораториях и малых
офисах, для которых имеет большое значение
стоимость решения и не требуется сложной
конфигурации, OpenVPN будет незаменим.


Режимы шифрования

OpenVPN поддерживает два типа шифрования:
статический ключ и Transport Layer Security (TLS). В Windows
статический ключ настроить легко. После
установки OpenVPN на одной из сторон VPN следует
запустить генератор ключей OpenVPN и
скопировать новый ключ (на защищенном
носителе) в папку OpenVPN всех других
компьютеров с OpenVPN, которым необходимо
подсоединение к этой конечной точке OpenVPN. В
файле настройки для всех конечных точек
просто укажите имя файла ключа. По
умолчанию OpenVPN использует для шифрования
режим Blowfish Cipher Block chaining (BF-CBC), но можно
выбрать и Advanced Encryption Standard (AES), Data Encryption Standard
(DES), International Data Encryption Algorithm (IDEA), или какой-то
иной, указав параметр шифрования в файле
настройки. Приложение использует функции
шифрования, аутентификации и проверки
сертификатов из библиотеки OpenSSL, поэтому
необходимо отслеживать обновления для OpenSSL.

OpenVPN также поддерживает TLS с
использованием обмена ключами алгоритма
Diffie-Hellman и ключи и сертификаты RSA. Установка
сертификатов и ключей в этом случае подобна
настройке других инфраструктур PKI,
поддерживающих X.509 PKI для аутентификации
сессии. При отсутствии опыта такой
настройки следует просмотреть материалы по
ссылкам на Web-сайте OpenVPN. Версии OpenVPN для Linux и
UNIX имеют большее количество справочных
материалов и программ для настройки TLS, чем
версия для Windows. В примерах этой статьи я
использовал статический ключ, чтобы
сделать акцент на самом процессе настройки
туннеля OpenVPN.


Джеф Фелинг (jeff@blackstatic.com) — Директор по
информационной безопасности компании
aQuantive. Автор книги IT Administrator’s Top 10 Introductory Scripts
for Windows (издательство Charles River Media).

Глава 6. «Режим клиент/сервер» с tap-устройствами

Другая модель развертывания для OpenVPN является — один сервер с несколькими удаленными клиентами, способных к маршрутизации трафика Ethernet. Мы называем эту модель развертывания режимом клиент-сервер с tap-устройствами.

Основное различие между режимами tun и tap заключается в типе используемого адаптера. tap-адаптер обеспечивает полностью виртуальный интерфейс Ethernet (уровень 2), в то время как адаптер tun рассматривается большинством операционных систем как двухточечный (уровень 3).

Компьютеры, подключенные с использованием (виртуальных) адаптеров Ethernet, могут образовывать единый широковещательный домен, который необходим для определенных приложений. С двухточечными адаптерами это невозможно. Также обратите внимание, что не все операционные системы поддерживают tap-адаптеры. Например, iOS и Android поддерживают только tun-устройства.

В этой главе мы начнем с базовой настройки клиент-сервер, которая очень похожа на базовую настройку, описанную в Главе 4, Режим клиент-сервер с tun-устройствами. Однако существуют тонкие различия, которые будут обсуждаться на нескольких примерах. Кроме того, режим tap включает настройку мостового соединения, при котором обычный сетевой адаптер соединяется с виртуальным tap-адаптером. Эта тема будет подробно обсуждаться как для операционных систем Linux, так и для Windows.

В этой главе будут рассмотрены следующие темы:

  • Базовая настройка
  • Включение клиент-клиентского трафика с использованием pf
  • Bridging
  • Соединение в Linux
  • Соединение в Windows
  • Использование внешнего DHCP-сервера
  • Проверка широковещательного и не IP-трафика
  • Сравнение режима Tun с режимом Tap

Базовая настройка

Базовая настройка OpenVPN в режиме tap практически такая же, как и в режиме tun. В режиме tap мы используем следующую строку в файле конфигурации сервера:

В режиме tun мы используем следующие строки:

Опция topology subnet не требуется, но представляет схему сетевой адресации, которая является более разумной и будет использоваться по умолчанию в будущей версии OpenVPN.

Для полноты картины сначала создадим файл конфигурации сервера:

proto udp
port 1194
dev tap
server 10.222.0.0 255.255.255.0

persist-key
persist-tun
keepalive 10 60

remote-cert-tls client
tls-auth  /etc/openvpn/movpn/ta.key 0
dh        /etc/openvpn/movpn/dh2048.pem
ca        /etc/openvpn/movpn/movpn-ca.crt
cert      /etc/openvpn/movpn/server.crt
key       /etc/openvpn/movpn/server.key

user nobody
group nobody

verb 3
daemon
log-append /var/log/openvpn.log

Мы будем использовать этот основной файл конфигурации сервера в режиме tap в этой главе и других. Сохраните его как tap-udp-server.conf, чтобы мы могли использовать его позже.


Заметка

Параметр topology subnet был удален, поскольку параметр topology является параметром конфигурации, специфичным для tun. В режиме tap сервер всегда раздает каждому клиенту по одному IP-адресу с соответствующей маской сети.


Точно так же мы создаем файл конфигурации клиента, который снова почти идентичен файлу basic-udp-client.conf из главы 4, Режим клиент/сервер с устройствами tun:

proto udp
port 1194
dev tap

client
remote openvpnserver.example.com
nobind

remote-cert-tls server
tls-auth  /etc/openvpn/movpn/ta.key 1
ca        /etc/openvpn/movpn/movpn-ca.crt
cert      /etc/openvpn/movpn/client1.crt
key       /etc/openvpn/movpn/client1.key

Сохраните этот файл как tap-udp-client.conf. Аналогично, для клиентов Windows создайте файл конфигурации tap-udp-client.ovpn.

Запустите сервер OpenVPN и подключите клиент, используя эти файлы конфигурации. Журнал соединений на стороне сервера покажет некоторые тонкие различия по сравнению с настройкой в режиме tun, которые выделены в следующем разделе:

OpenVPN 2.3.6 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL]
[PKCS11] [MH] [IPv6] built on Dec 2 2014
library versions: OpenSSL 1.0.1e-fips 11 Feb 2013, LZO 2.03
[…]
TUN/TAP device tap0 opened
TUN/TAP TX queue length set to 100
do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
sbinip link set dev tap0 up mtu 1500
sbinip addr add dev tap0 10.222.0.1/24 broadcast 10.222.0.255
GID set to nobody
UID set to nobody
UDPv4 link local (bound): [undef]
UDPv4 link remote: [undef]

MULTI: multi_init called, r=256 v=256
IFCONFIG POOL: base=10.222.0.2 size=253, ipv6=0
Initialization Sequence Completed
CLIENT_IP:60728 TLS: Initial packet from [AF_INET]CLIENT_IP:60728,
sid=d4d7f1fd 988e4ff3
[…]
client1/CLIENT_IP:60728 PUSH: Received control message:
'PUSH_REQUEST'
client1/CLIENT_IP:60728 SENT CONTROL [client1]: 'PUSH_REPLY,routegateway 10.222.0.1,ping 10,ping-restart 60,ifconfig 10.222.0.2
255.255.255.0' (status=1)
client1/CLIENT_IP:60728 MULTI: Learn: 8e:66:e4:43:35:a1 ->
client1/CLIENT_IP:60728

Последняя строка журнала подключения к серверу — самая интересная: строка MULTI: Learn показывает, что сервер теперь использует MAC-адрес удаленного клиента, чтобы отличать его от других клиентов, тогда как в режиме tun он может полагаться исключительно на IP-адрес, назначенный клиенту. Это необходимо, так как клиент на основе tap может также отправлять не-IP трафик, в котором не используется IP-адрес.

Включение клиент-клиентского трафика

Когда к серверу подключено несколько клиентов виртуальной частной сети (VPN) — им не разрешается обмениваться трафиком. Это верно как для режима tap, так и для режима tun. Чтобы включить трафик между клиентами, есть два варианта:

  • Использование параметра конфигурации client-to-client. Он позволяет OpenVPN обрабатывать трафик клиент-клиент внутри системы, минуя таблицы системной маршрутизации, а также правила системного брандмауэра/iptables.
  • Использование системной таблицы маршрутизации и правил брандмауэра/iptables для отправки трафика от одного клиента другому и обратно.

Первый вариант — самый быстрый как с точки зрения конфигурации, так и с точки зрения производительности. Если нет ограничений на трафик между VPN-клиентами — добавьте строку client-to-client в файл конфигурации tap-udp-server.conf, сохраните его как movpn-06-01-server.conf и перезапустите сервер OpenVPN, используя этот файл конфигурации:

$ openvpn --config movpn-06-01-server.conf

Переподключите VPN-клиентов. Первому клиенту назначен IP-адрес 10.222.0.2, а второму — 10.222.0.3. Теперь клиенты могут связаться друг с другом:

Высокая задержка (то есть время проверки связи более 300 мс) на предыдущем снимке экрана немедленно показывает один из недостатков использования трафика клиент-клиент по VPN. Весь трафик проходит через сервер OpenVPN, таким образом, пинг от client1 к client2 занимает больше времени:

  1. Сообщение запроса ping отправляется с client1 на сервер OpenVPN.
  2. Сервер OpenVPN пересылает сообщение на client2.
  3. client2 отправляет обратно ответное сообщение ping снова на сервер.
  4. Сервер OpenVPN пересылает ответ ping обратно на client1.

Если клиенты VPN подключены через сеть с высокой латентностью, то использование VPN модели клиент-сервер увеличит задержку при отправке трафика между клиентами. OpenVPN — это такая же модель VPN клиент-сервер как и большинство доступных коммерческих решений VPN. Существуют некоторые одноранговые VPN-решения, но они выходят за рамки этой книги.

Фильтрация трафика между клиентами

Недостатком опции client-to-client является отсутствие фильтрации. Когда эта опция добавлена, весь трафик между всеми клиентами разрешен в обход правил системного брандмауэра/iptables.

Вторым способом обеспечения прохождения трафика между клиентами является использование таблиц маршрутизации системы. В режиме tun это сделать довольно просто, но немного сложнее при использовании режима tap. Когда client1 желает связаться с client2, он сначала должен знать MAC (аппаратный) адрес client2 . Запрос ARP отправляется через адаптер tap клиента и достигает сервера OpenVPN. Серверный процесс OpenVPN перенаправляет ARP-запрос из своего собственного tap-адаптера и ожидает ответа. Однако ответ должен прийти от другого VPN-клиента, который подключен к тому же адаптеру. Таким образом — ARP-запрос должен быть отправлен обратно всем подключенным клиентам сервера OpenVPN. Обычно повторная выдача ARP-запроса не выполняется и трафик клиент-клиент терпит неудачу.

В современных ядрах Linux (2.6.34+ или в ядрах с опциями обратного переноса) для каждого интерфейса может быть установлен специальный флаг proxy_arp_pvlan. Этот флаг указывает ядру Linux повторно отправить ARP-запрос обратно с того же интерфейса, откуда он поступил. Именно этот флаг необходим для работы трафика клиент-клиент. Таким образом мы включаем трафик клиент-клиент в режиме tap, не используя опцию client-to-client, устанавливая этот флаг:

# echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp_pvlan

Заметка

Этот системный флаг можно установить только после настройки адаптера tap0. Адаптер tap может быть создан до запуска OpenVPN (см. Раздел Мостовое соединение в Linux) или флаг может быть установлен после запуска OpenVPN. В этом случае, он может быть установлен автоматически с использованием скрипта, как описано в Главе 7, Скрипты и плагины.

Когда client1 хочет связаться с client2 — поток сетевого трафика с этим установленным флагом выглядит следующим образом:

  1. client1 отправляет запрос ARP из своего tap-адаптера.
  2. Сервер OpenVPN получает ARP-запрос и перенаправляет его из собственного адаптера tap0.
  3. ARP-запрос проходит через системную маршрутизацию и таблицу пересылки iptables.
  4. Если запрос разрешен — он отправляется всем сетевым интерфейсам на сервере OpenVPN, включая адаптер tap0, откуда был отправлен. Последнее вызвано флагом proxy_arp_pvlan.
  5. OpenVPN получает ARP-запрос и перенаправляет его всем подключенным клиентам OpenVPN.
  6. client2 получает запрос и отвечает. ARP-ответ теперь отправляется обратно на сервер OpenVPN.
  7. Сервер OpenVPN пересылает ARP-ответ client1.
  8. client1 теперь знает, где найти client2 и может отправлять сетевой трафик client2.

Второй шаг позволяет нам отфильтровать трафик между разными клиентами. Правила фильтрации (например, с использованием iptables) могут быть добавлены для разрешения только определенных типов трафика или только трафика между специальными клиентами. Например, следующее правило iptables блокирует трафик между первым и вторым клиентом OpenVPN:

# iptables -I FORWARD -i tap0 -o tap0 
-s 10.222.0.2 -d 10.222.0.3 -j DROP

Обратите внимание, что блокируя трафик в одном направлении, оба клиента не смогут связаться друг с другом. Для однонаправленной блокировки требуются более продвинутые правила iptables.


Заметка

Нет эквивалента для флага proxy_arp_pvlan в операционных системах Windows или Mac OS, но это неточно.


Недостаток метода proxy_arp_pvlan

Основным недостатком использования этого флага ядра является то, что он не превращает VPN в один широковещательный домен Ethernet. С флагом proxy_arp_pvlan клиенты VPN могут связываться друг с другом с помощью ARP-сообщений. Однако они не будут получать широковещательный трафик, приходящий от других клиентов. Когда используется опция client-to-client — все подключенные VPN-клиенты автоматически получают широковещательные сообщения друг друга, но фильтрация трафика сложнее (как мы увидим в следующем разделе).

Фильтрация трафика с использованием фильтра OpenVPN pf

Второй метод фильтрации трафика от клиентов OpenVPN — это использование встроенного фильтра OpenVPN pf. Этот фильтр также полностью поддерживается в OpenVPN Access Server — коммерческом предложении от OpenVPN Technologies Inc. Поддержка фильтра pf является элементарной по сравнению с большинством брандмауэров, но она полностью функциональна и доступна на всех платформах. Теперь мы пройдемся по шагам для использования этого фильтра в свободной версии OpenVPN. Этот пример приведен только в качестве доказательства концепции; станет ясно, что для обслуживания на уровне продакшена необходим другой подход и/или инструмент.

Чтобы использовать фильтр pf — должен использоваться интерфейс управления OpenVPN. Это достигается с помощью следующего файла конфигурации:

proto udp
port 1194
dev tap
server 10.222.0.0 255.255.255.0

persist-key
persist-tun
keepalive 10 60

remote-cert-tls client
tls-auth  /etc/openvpn/movpn/ta.key 0
dh        /etc/openvpn/movpn/dh2048.pem
ca        /etc/openvpn/movpn/movpn-ca.crt
cert      /etc/openvpn/movpn/server.crt
key       /etc/openvpn/movpn/server.key

user nobody
group nobody

verb 3
daemon
log-append /var/log/openvpn.log

client-to-client
management 127.0.0.1 12000 stdin
management-client-auth
management-client-pf

Сохраните этот файл как movpn-06-02-server.conf и запустите сервер OpenVPN. Сервер OpenVPN запросит (новый) пароль управления. Этот пароль будет использоваться для аутентификации всех соединений с интерфейсом управления; VPN-клиенты аутентифицируются отдельно. Параметр management-client-pf требует чтобы также был установлен параметр management-client-auth. Недостатком же является то, что теперь каждый клиент должен предоставить (поддельные) имя пользователя и пароль и каждому клиенту должен быть предоставлен доступ на стороне сервера с использованием интерфейса управления.

Файл конфигурации клиента теперь становится:

proto udp
port 1194
dev tap

client
remote openvpnserver.example.com
nobind

remote-cert-tls server
tls-auth  /etc/openvpn/movpn/ta.key 1
ca        /etc/openvpn/movpn/movpn-ca.crt
cert      /etc/openvpn/movpn/client1.crt
key       /etc/openvpn/movpn/client1.key

auth-user-pass

Сохраните его как movpn-06-02-client.conf (или movpn-06-02-client.ovpn для Windows).

На стороне сервера сначала запустите интерфейс управления, используя telnet:

# telnet 127.0.0.1 12000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
ENTER PASSWORD:
SUCCESS: password is correct
>INFO:OpenVPN Management Interface Version 1 -- type 'help' for more info

Затем запустите клиент OpenVPN. Соединение с сервером не будет завершено пока клиенту не будет предоставлен доступ через интерфейс управления. В интерфейсе управления вы увидите это:

>CLIENT:CONNECT,0,0
>CLIENT:ENV,n_clients=0
>CLIENT:ENV,IV_VER=2.3.6
>CLIENT:ENV,IV_PLAT=linux
>CLIENT:ENV,IV_PROTO=2
[…]

После получения всех строк >CLIENT авторизуйте клиента для подключения. Для этого требуются идентификатор клиента (CID) и идентификатор ключа (KID). Это параметры в самых первых строках >CLIENT при подключении клиента OpenVPN. В этом примере и CID, и KID равны 0. Чтобы предоставить этот клиентский доступ, команда client-auth-nt CID KID должна быть введена в интерфейсе управления:

client-auth-nt 0 0
SUCCESS: client-auth command succeeded
>CLIENT:ESTABLISHED,0CLIENT:CONNECT,0,0

Первый клиент OpenVPN теперь имеет доступ. Теперь мы можем применить правила контроля доступа к этому клиенту, используя команду client-pf CID. Это многострочная команда. После первой строки мы сначала указываем подсети, к которым этому клиенту разрешен доступ:

[SUBNETS ACCEPT]
-10.0.0.0/8

Мы предоставляем клиенту доступ ко всем подсетям, кроме 10.0.0.0/8.

Далее мы указываем, к каким клиентам этот клиент может обратиться:

[CLIENTS ACCEPT]
-client3

Мы разрешаем клиенту связываться со всеми другими клиентами VPN, кроме клиента с именем сертификата /CN = client3. С помощью двух операторов END, одного с квадратными скобками и одного — без, мы закрываем команду client-pf:

client-pf 0
[SUBNETS ACCEPT]
-10.0.0.0/8
[CLIENTS ACCEPT]
-client3
[END]
END
SUCCESS: client-pf command succeeded

Этот клиент OpenVPN теперь сможет обращаться ко всем подсетям на стороне сервера, кроме 10.0.0.0/8, и может связываться со всеми другими клиентами OpenVPN, кроме client3.

У этого подхода много недостатков, но он работает на всех платформах. Основными недостатками являются следующие:

  • Каждый клиент должен предоставить поддельное имя_пользователя/пароль
  • Каждый клиент должен быть аутентифицирован с использованием интерфейса управления
  • Для каждого клиента должен быть установлен фильтр pf
  • Интерфейс управления в настоящее время не имеет команд для просмотра текущих фильтров

В настоящее время для свободной версии OpenVPN нет инструмента для отправки этих команд в интерфейс управления. Однако коммерческое программное обеспечение OpenVPN Access Server обеспечивает необходимый механизм для применения правил фильтрации.

Использование устройства tap (мост)

Особый вариант использования конфигурации на основе tap — мостовое соединение. Термин мостовое соединение применяется к функции операционной системы для соединения двух сетевых адаптеров вместе. Когда два (или более) адаптера соединены мостом — весь трафик Ethernet, полученный на одном из адаптеров, перенаправляется на все остальные адаптеры, которые являются частью этого моста. Это позволяет объединить (соединить) два сегмента сети вместе и создать впечатление что это один широковещательный домен Ethernet. Типичные случаи использования мостов:

  • Клиенты VPN должны быть полностью и прозрачно интегрированы в LAN на стороне сервера. Обратите внимание, что тот же эффект часто может быть достигнут с помощью настройки proxy-arp.
  • Некоторые старые компьютерные игры разрешают многопользовательские игры только тогда, когда все компьютеры являются частью одного и того же широковещательного домена.
  • Некоторые устаревшие сетевые протоколы, особенно оригинальный протокол Microsoft NetBIOS (не основанный на TCP/IP), не работают должным образом на сетевых маршрутизаторах или даже предполагают полностью «плоское» сетевое пространство со всеми клиентами, подключенными напрямую.

Мостовые соединения также имеют недостатки, в частности, снижение производительности. Весь сетевой трафик, поступающий на один из мостовых интерфейсов, дублируется на все остальные интерфейсы. Из-за этого довольно легко перегрузить мост многоадресным или широковещательным трафиком. В особенности при настройке VPN с клиентами, использующими соединения с высокой задержкой или низкой пропускной способностью (например, работники на выезде) — эта потеря производительности может быстро сделать настройку OpenVPN непригодной для использования.

Следует также отметить, что мостовая настройка часто не требуется. Благодаря современным операционным системам и протоколам совместного доступа к файлам настройка на основе tun может достичь тех же результатов, прилагая меньше усилий и повышая производительность.

К сожалению, до сих пор распространено заблуждение что для использования общего доступа к файлам Windows через установку OpenVPN необходимо использовать мосты. В разделе Включение общего доступа к файлам через VPN в Главе 5, Расширенные сценарии развертывания в туннельном режиме, подробное объяснение дается о том, как достичь общего доступа к файлам с помощью tun-установки и сервера WINS.

В некоторых случаях мостовая установка остается желательной или необходимой. Теперь мы покажем, как настроить мостовую конфигурацию OpenVPN на платформах Linux и Windows.

Соединение в Linux

Рассмотрим следующую схему сети:

На стороне сервера используется сетевой мост между адаптером LAN eth0 и виртуальным адаптером OpenVPN tap. В Linux это достигается созданием адаптера tap до запуска OpenVPN. Для этого должен быть установлен системный пакет bridge-utils. Шаги следующие:

  1. Сначала мы создаем скрипт для запуска сетевого моста:
#!/bin/bash
br="br0"
tap="tap0"
eth="eth0"
br_ip="192.168.122.1"
br_netmask="255.255.255.0"
br_broadcast="192.168.122.255"
# Create the tap adapter
openvpn --mktun --dev $tap
# Create the bridge and add interfaces
brctl addbr $br
brctl addif $br $eth
brctl addif $br $tap
# Configure the bridge
ifconfig $tap 0.0.0.0 promisc up
ifconfig $eth 0.0.0.0 promisc up
ifconfig $br $br_ip netmask $br_netmask broadcast $br_broadcast
  1. Сохраните его как movpn-bridge-start и убедитесь, что он исполняется с помощью следующей команды:
# chmod 755 movpn-bridge-start
  1. Затем запустите мост, используя следующую команду:
# ./movpn-bridge-start
Mon Jan 5 18:40:02 2015 TUN/TAP device tap0 opened
Mon Jan 5 18:40:02 2015 Persist state set to: ON
  1. Теперь мы создаем файл конфигурации для мостовых настроек, используя следующие команды:
tls-server
proto udp
port 1194

dev tap0 ## the '0' is extremely important

server-bridge 192.168.122.1 255.255.255.0 192.168.122.128
192.168.122.200

remote-cert-tls client
tls-auth  /etc/openvpn/movpn/ta.key 0
dh        /etc/openvpn/movpn/dh2048.pem
ca        /etc/openvpn/movpn/movpn-ca.crt
cert      /etc/openvpn/movpn/server.crt
key       /etc/openvpn/movpn/server.key

persist-key
persist-tun
keepalive 10 60

user nobody
group nobody

verb 3
daemon
log-append /var/log/openvpn.log
  1. Сохраните его как movpn-06-03-server.conf. Аргументами к server-bridge являются сетевой шлюз, маска подсети, начало пула и конец пула. Адреса пула — это адреса, которые могут быть назначены клиентам.

Заметка

Строка dev tap0 в предыдущем примере имеет решающее значение для работы мостового соединения. Мы создали адаптер tap для моста до запуска OpenVPN. Чтобы использовать этот адаптер — мы должны явно указать имя адаптера. В противном случае OpenVPN создаст новый адаптер без моста при запуске.


  1. Запустите сервер OpenVPN и подключите клиента с помощью файла конфигурации tap-udp-client.conf, созданного ранее в этой главе. На клиенте Linux в журнале подключений будет показано следующее:
TUN/TAP device tap0 opened
do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
/sbin/ip link set dev tap0 up mtu 1500
/sbin/ip addr add dev tap0 192.168.122.128/24 broadcast
192.168.122.255
Initialization Sequence Completed

Клиенту назначается первый адрес — 192.168.122.128 из пула доступных адресов.

  1. Наконец, мы проверяем, что можем достичь хоста в локальной сети на стороне сервера:
[client]$ ping -c 4 192.168.122.246
PING 192.168.122.246 (192.168.122.246) 56(84) bytes of data.
64 bytes from 192.168.122.246: icmp_req=1 ttl=64 time=287 ms
64 bytes from 192.168.122.246: icmp_req=2 ttl=64 time=289 ms
64 bytes from 192.168.122.246: icmp_req=3 ttl=64 time=285 ms
64 bytes from 192.168.122.246: icmp_req=4 ttl=64 time=287 ms
--- 192.168.122.246 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 285.397/287.496/289.568/1.570 ms

Разрыв моста

Когда процесс сервера OpenVPN останавливается — сетевой мост также не отключается автоматически. Поскольку мост был создан до запуска самого OpenVPN — он сохраняется до тех пор, пока не будет разорван вручную. Следующие команды останавливают и удаляют мост, созданный командой movpn-start-bridge:

# ifconfig br0 down
# brctl delif br0 eth0
# brctl delif br0 tap0
# brctl delbr br0
# openvpn --rmtun --dev tap0

Соединение в Windows

Рассмотрим следующую схему сети:

Единственная разница между предыдущим сетевым макетом и этим — выбор используемых IP-адресов.

В Windows адаптер OpenVPN TAP-Win устанавливается при установке самого OpenVPN. Обычно имя для адаптера TAP-Win назначается операционной системой и будет примерно таким же, как для Подключение по локальной сети 4. Аналогично имя адаптера Ethernet, к которому подключена локальная сеть, также будет иметь имя подобное Подключение по локальной сети 2.

Для ясности (и некоторого здравого смысла) мы хотим переименовать интерфейс VPN (TAP):

  1. Сначала мы идем в Центр управления сетями и общим доступом, а затем Изменение параметров адаптера.
  2. Переименуйте адаптер TAP-Win как tapbridge щелкнув по нему правой кнопкой мыши и выбрав Переименовать. На используемом тестовом компьютере адаптер Ethernet, подключенный к локальной сети, был переименован в eth0. В столбце Состояние укажите сетевую группу, к которой принадлежит интерфейс. В нашем случае он принадлежит TheShire.
  3. Выберите два адаптера, которые необходимо соединить, зажав клавишу Ctrl и щелкнув по каждому адаптеру, а затем щелкнув правой кнопкой мыши и выбрав Настройка моста.

  1. Убедитесь, что вновь созданный Сетевой мост является частью той же сети, что и исходный адаптер eth0. Вы также можете видеть что оригинальный сетевой адаптер теперь имеет метку Мост в поле Состояние:

  1. Нет необходимости настраивать статический IP-адрес для моста. Сетевой мост имеет свой собственный (виртуальный) MAC-адрес (или Физический адрес на следующем скриншоте) и, следовательно, ему присваивается свой собственный IP-адрес DHCP-сервером в локальной сети на стороне сервера:

  1. Создайте файл конфигурации сервера OpenVPN с помощью текстового редактора или Блокнота:
tls-server
proto udp
port 1194

dev tap
dev-node tapbridge ## == the name of the TAP-Win adapter

server-bridge 192.168.3.15 255.255.255.0 192.168.3.128
192.168.3.250

remote-cert-tls client
tls-auth  "c://program files/openvpn/config/ta.key" 0
dh        "c://program files/openvpn/config/dh2048.pem"
ca        "c://program files/openvpn/config/movpn-ca.crt"
cert      "c://program files/openvpn/config/server.crt"
key       "c://program files/openvpn/config/server.key"

persist-key
persist-tun
keepalive 10 60

verb 3

Сохраните файл конфигурации как movpn-06-04-server.ovpn в каталоге конфигурации OpenVPN (обычно это C:Program FilesOpenVPNconfig).


Заметка

Файл конфигурации сервера для версии OpenVPN для Windows аналогичен файлу конфигурации для Linux. Основными отличиями являются полные пути к файлам сертификатов и ключей, а также способ указания адаптера TAP-WIN с помощью ключевых слов dev и dev-node. Также обратите внимание, что параметры user/group и daemon/logging были удалены.


  1. Запустите сервер OpenVPN (с повышенными привилегиями):
C:> cd program filesopenvpnconfig
C:> ..binopenvpn --config movpn-06-04-server.ovpn

Обратите внимание, что версия OpenVPN для Windows в командной строке выглядит и ведет себя почти так же, как версия для командной строки Linux.

  1. Брандмауэр Windows отобразит предупреждение безопасности, когда OpenVPN попытается настроить VPN. Нажмите Разрешить доступ, чтобы предоставить разрешение OpenVPN для настройки VPN как показано на следующем снимке экрана:

  1. Если мы вернемся к экрану Настройки адаптера — теперь мы видим что и адаптер локальной сети eth0 и адаптер TAP-Win tapbridge в состоянии Включен и имеют статус Мост. Это показано на следующем снимке экрана:

  1. Затем подключите клиент Windows с помощью файла конфигурации tap-udp-client.ovpn, созданного ранее в этой главе. Клиенту будет назначен первый адрес — 192.168.3.128 из пула доступных адресов.

  2. Наконец, мы проверяем, что можем достичь хоста в локальной сети на стороне сервера:

  1. На сервере нажмите функциональную клавишу F4 в командном окне для остановки процесса сервера OpenVPN. Для настройки производственного уровня желательно запускать и останавливать OpenVPN с помощью службы OpenVPN, устанавливаемой вместе с OpenVPN.

Использование внешнего DHCP-сервера

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

server 10.200.0.0 255.255.255.0

Или с помощью следующей команды:

server-bridge 192.168.3.15 255.255.255.0 192.168.3.128
192.168.3.250

Также можно использовать внешний DHCP-сервер для назначения адресов клиентам OpenVPN. Для этого просто удалите спецификацию любых диапазонов IP-адресов после параметра server-bridge как показано в следующем (ориентированном на Linux) файле конфигурации:

tls-server
proto udp
port 1194
dev tap0 ## the '0' is extremely important
server-bridge
remote-cert-tls client
tls-auth etcopenvpn/movpn/ta.key 0
dh etcopenvpn/movpn/dh2048.pem
ca etcopenvpn/movpn/movpn-ca.crt
cert etcopenvpn/movpn/server.crt
key etcopenvpn/movpn/server.key
persist-key
persist-tun
keepalive 10 60
user nobody
group nobody
verb 3
daemon
log-append varlog/openvpn.log

Сохраните его как movpn-06-05-server.conf и запустите сервер OpenVPN.

Когда клиент подключается и запрашивает IP-адрес с помощью DHCP — запрос будет перенаправлен на сервер DHCP в локальной сети на стороне сервера. DHCP-сервер назначает адрес, который отправляется обратно клиенту через сервер OpenVPN.

На клиенте OpenVPN это можно проверить, посмотрев IP-адрес соединения vpn0:

Чтобы убедиться, что этот адрес был назначен сервером DHCP на стороне сервера, мы проверяем таблицу клиентов DHCP на сервере DHCP:

Третья запись в DHCP Client Table на предыдущем скриншоте содержит MAC Address адаптера TAP-Win клиента OpenVPN. Это доказывает, что серверный DHCP-сервер назначил адрес клиенту OpenVPN.

Проверка широковещательного и не IP-трафика

Инструменты tcpdump и wireshark полезны для устранения неполадок в «почти работающей» настройке OpenVPN. Wireshark доступен для Linux, Mac OS X и Windows. Его можно использовать как инструмент командной строки, но чаще всего используется версия на основе графического интерфейса. На большинстве Unix/Linux-платформ также доступен инструмент командной строки tcpdump.

Теперь мы будем использовать tcpdump и wireshark для просмотра потока пакетов через установку VPN на основе tap.

Протокол разрешения адресов трафика

Одним из самых основных типов трафика Ethernet, присутствующего во всех сетях, является трафик протокола разрешения адресов (ARP). ARP является ярким примером протокола Ethernet, который не передается по двухточечным каналам связи (например, при настройке OpenVPN на основе туннеля). Физический уровень (уровень 1) обычно представляет собой электрическую или оптическую связь между системами. В случае VPN — туннель занимает место этого физического соединения. Следующим шагом в модели OSI является уровень Ethernet (уровень 2). Протокол ARP часто используется для обнаружения других систем на этом уровне.


Подсказка

Ethernet является сетевым протоколом уровня 2, а точка-точка — сетевым протоколом уровня 3. Различные уровни протокола определяются моделью Open Systems Interconnection (OSI).


Чтобы наблюдать за потоком ARP-трафика мы сначала запускаем сервер OpenVPN, используя ранее созданный файл конфигурации movpn-06-01-server.conf. Затем подключаем двух клиентов Linux к серверу. После того, как все соединения были успешно установлены — мы запускаем tcpdump на одном из клиентов:

Теперь мы отправляем один пакет ping от одного клиента — другому и смотрим на вывод tcpdump:

На снимке экрана показан трафик ARP между client1 (в данном случае 10.200.0.10) и client2 (10.200.0.11).

  • Первый пакет в выводе выше от клиента, которым был инициирован ping. Клиент должен знать Ethernet MAC-адрес компьютера, который мы проверяем, и, следовательно, он отправляет запрос ARP.
  • Поскольку мы указали client-to-client в файле конфигурации сервера movpn-06-01-server.conf — ARP-запрос пересылается всем подключенным клиентам и второй клиент OpenVPN отвечает своим MAC-адресом.
  • Второй пакет — это ответ от второго клиента, указывающий его собственный MAC-адрес.
  • Теперь, когда адрес известен, client1 отправляет ping. Он отображается как IPv4 ICMP echo request.
  • Ответ получен от второго клиента. Это четвертый пакет (IPv4 ICMP echo reply).

Трафик NetBIOS

Common Internet File Sharing (CIFS) начинался как закрытый протокол NetBEUI. Поддержка совместного использования файлов и принтеров осуществлялась через протокол Novell Internetwork Packet eXchange (IPX), а затем был добавлен протокол TCP/IP. В настоящее время протокол обмена файлами Windows развился и поддерживается только через TCP/IP. Поддержка устаревших файловых протоколов все еще присутствует в более старых версиях Windows и именно эту устаревшую поддержку мы будем использовать для запуска трафика не-IP.

Сначала мы устанавливаем и включаем транспортный протокол NWLink IPX/SPX на адаптере TAP-WIN. Затем мы подключаем клиента Windows к установке OpenVPN, которая была запущена с использованием файла конфигурации movpn-06-01-server.conf. В этой конфигурации включен client-to-client; таким образом, все подключенные клиенты должны видеть весь широковещательный трафик Ethernet, поступающий от этого клиента.

Когда клиент Windows успешно подключится к VPN-серверу — он начнет отправлять трафик для объявления своего имени и другой информации об обмене файлами Windows. Он попытается сделать это через TCP/IP, но также с использованием сообщений IPX.

Мы используем Wireshark на втором VPN-клиенте и отслеживаем трафик на интерфейсе tap. На следующем снимке экрана показано, что Windows-клиент WINDOWSXP действительно отправляет широковещательный трафик NetBIOS через TCP/IP. Это записи с адресом источника 10.222.0.3 и адресом назначения 10.222.0.255. Последний адрес является широковещательным адресом TCP/IP для настроенной нами VPN. Мы также видим, что трафик передается по протоколу IPX. Этот трафик выбран и выделен на скриншоте:

Широковещательные сообщения IPX являются широковещательными сообщениями Ethernet, но они не основаны на IP. Это показывает, что установка OpenVPN в стиле tap с client-to-client разделяет весь трафик Ethernet, включая широковещательный трафик между подключенными клиентами (и самим сервером OpenVPN).

Сравнение режима tun с режимом tap

Как мы уже видели в этой главе — есть много сходств, но также есть и существенные различия между VPN в режиме tun и VPN в режиме tap. В этом разделе мы обсудим эти сходства и различия. Большинство различий проистекает из единственного факта что VPN в режиме tun является не широковещательной, а двухточечной IP-сетью, в то время как сеть в режиме tap обеспечивает полностью виртуальную Ethernet-подобную сеть с поддержкой широковещания. Короче говоря, сеть в режиме tun обеспечивает сетевое подключение уровня 3, тогда как сеть в режиме tap обеспечивает практически все функциональные возможности сети уровня 2.

Особенно с опцией topology subnet настройка на основе TUN напоминает установку без перемычек:

  • Опция server 10.200.0.0 255.255.255.0 устанавливает VPN с адресом сервера 10.200.0.1. Каждый клиент получит один адрес из 24 IP-адресной адресации, начиная с 10.200.0.2.
  • Способ шифрования VPN-трафика и цифровой подписи (HMAC) идентичен.
  • Большинство возможностей сценариев применимы к обоим типам VPN. Однако есть некоторые тонкие различия в параметрах для сценария client-connect.
  • При правильной настройке конечный пользователь не будет испытывать различий между настройкой на основе tun и VPN-подключением на основе tap.

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

Слой 2 против слоя 3

В сети уровня 2 (т.е. в стиле tap) соседние клиенты могут связаться друг с другом узнав адрес соседа, используя широковещательные ARP-запросы. Широковещательные ARP-запросы позволяют клиентам обнаруживать MAC-адреса других клиентов. Это позволяет клиентам связываться друг с другом по протоколам IP и не-IP.

В сети уровня 3 (в стиле tun) клиенты могут связываться друг с другом только с помощью IP-адресов. MAC-адрес адаптера tun никогда не раскрывается другим VPN-клиентам и даже самому серверу OpenVPN. Из-за этого сетевой пакет уровня 3 немного короче, чем уровня 2. При нормальных обстоятельствах более длинные сетевые пакеты уровня 2 не оказывают негативного влияния на производительность.

Маршрутные различия и iroute

Когда особенно необходима маршрутизация от подсети к подсети между tun и tap есть некоторые существенные различия. В сети в стиле tun необходим файл конфигурации клиента с соответствующим оператором iroute чтобы позволить VPN-серверу получать доступ к клиентам, находящимся в локальной сети на стороне клиента. В качестве примера мы предполагаем, что подсеть 192.168.3.0/24 может быть достигнута через клиента OpenVPN с сертификатом CN=client1. На сервере OpenVPN мы добавили бы файл client-config-dir с именем client1, содержащий инструкцию:

iroute 192.168.3.0 255.255.255.0

И добавили бы системный маршрут в файл конфигурации сервера:

route 192.168.3.0 255.255.255.0

В настройке в стиле tap оператор iroute недопустим и будет просто игнорироваться сервером. Чтобы достичь подсети за VPN-клиентом необходимо добавить системный маршрут на сервере OpenVPN, а шлюз должен указывать на VPN-IP-адрес клиента. Давайте предположим, что для client1 из предыдущего примера назначен фиксированный IP-адрес. Это может быть достигнуто с помощью файла CCD:

ifconfig-push 10.200.0.99 255.255.255.0

В файле конфигурации сервера необходимо добавить маршрут, чтобы таблицы системной маршрутизации знали, что подсеть 192.168.3.0/24 может быть доступна через клиента 10.200.0.99:

route 192.168.3.0 255.255.255.0 10.200.0.99

Это гораздо менее динамично, чем опция режима tun route + iroute.

Фильтрация клиент-клиент

При настройке в стиле tun большая часть трафика может регистрироваться и фильтроваться с использованием правил брандмауэра или iptables. Фильтрация трафика между клиентами OpenVPN намного сложнее при настройке в режиме tap, как было показано ранее в этой главе.

Широковещание трафика и «болтливость» сети

Сеть уровня 3 не позволяет передавать широковещательный трафик по ней. Это и преимущество и недостаток. Некоторые клиент-серверные приложения полагаются на использование широковещательного трафика для связи между сервером и клиентами. Для таких приложений требуется сеть в стиле tap.

Однако широковещательный трафик также имеет тенденцию засорять сети. Даже если на клиенте нет действий пользователя — операционная система будет непрерывно отправлять широковещательный трафик для обнаружения сетевых ресурсов, соседей и т.д. Особенно, когда используются такие протоколы как Universal Plug-and-Play или Apple Bonjour существует много скрытого широковещательного трафика. Для клиентов, подключенных к VPN через сеть с низкой пропускной способностью — это может иметь серьезные последствия для производительности.

Мост

Ключевой особенностью сети в стиле tap является возможность создания мостов. Мостовое соединение невозможно в сети уровня 3.

В некоторых редких случаях эта функция абсолютно необходима, но при любой возможности следует избегать мостовой настройки. Основной причиной неиспользования мостовой настройки является негативное влияние на производительность. Как объяснялось ранее — в мостовой конфигурации весь трафик из локальной сети на стороне сервера перенаправляется через VPN всем клиентам и наоборот. Когда множество клиентов подключены к сетям с низкой пропускной способностью — это может привести к обходу всей сети как на стороне клиента, так и в локальной сети на стороне сервера. Когда клиенты в локальной сети на стороне сервера пытаются обнаружить доступные ресурсы в сети (например, общие файловые ресурсы или принтеры в сети на основе CIFS) — вся сеть будет заполнена широковещательным трафиком. Клиенты локальной сети обычно ждут ответов от всех компьютеров, подключенных к сети, как локальной, так и VPN, прежде чем предлагать доступ к общим сетевым ресурсам или принтерам. Это может быстро привести к недопустимому времени отклика сети в случае когда подключается и отключается большое количество VPN-клиентов.

Резюме

В этой главе мы рассмотрели возможности установки на основе tap в качестве альтернативной модели развертывания OpenVPN. Мы обсудили примеры, подчеркивающие как особенности, так и недостатки такой установки. Особое внимание было уделено настройке с использованием моста, так как существует несколько распространенных заблуждений относительно режима с использованием моста, о чем говорится на форумах поддержки OpenVPN в Интернете.

Мы также увидели, что расширенные функции управления, такие как фильтрация трафика между клиентами OpenVPN, гораздо сложнее реализовать в режиме tap по сравнению с режимом tun.

В следующей главе мы увидим, как можно использовать скрипты и плагины чтобы влиять на то, как сервер OpenVPN назначает IP-адрес клиенту, а также на многие другие функции. Скрипты и плагины могут использоваться как в режиме tap, так и в режиме tun.

Друзья, приветствую на fast-wolker.ru! Сегодняшний материал  жизненно необходим тем, кто задумывает организовать бесплатный и безопасный доступ к своей локальной сети из интернета для  удаленной работы из любого места. Существует  достаточно  решений — одни  сложные, требующие денежных вложений.

Другие бесплатны и вполне по силам для самостоятельного и бесплатного внедрения в любой организации. Сегодня мы и решим такую практическую задачу — организуем доступ сотрудников  к  обычной сети для удаленной работы с помощью программы Open VPN.

Имеется сеть с выделенным IP адресом от провайдера (это обязательное условие для решения нашей задачи!) и нам  нужно:

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

Обе наших компьютерных сети не  используют домены,  Open VPN поэтому  — одно из подходящих решений. Мы самостоятельно «поднимем» сначала в нашей сети Openvpn сервер, затем сгенерируем сертификаты пользователей, которые будут подключаться к нему. Настроим наш сервер в соответствии с задачей.

Затем настроим компьютеры со стороны  клиентов — установим openvpn и дадим настройки. Материал данной статьи — проверенное и работоспособное решение,  оттестированное в течение нескольких лет на различных версиях. Читаем — берем на вооружение!

Содержание

  • Как настроить сервер openvpn на windows 10?
  • Как настроить сетевой мост между двумя сетями для Open VPN сервера?
  • Openvpn клиенты не видят друг друга, как настроить файл конфигурации сервера?
  • Как сделать автоматический старт OpenVPN соединения при запуске Windows? 
  • Как настроить openvpn клиент на Windows10

Как настроить сервер openvpn на windows 10?

Что за программа — Open VPN и зачем она нужна? Данный продукт — бесплатное программное решение в течение многих лет предлагаемое разработчиками для организации бесплатных виртуальных частных сетей. Внутри вашего канала Интернет создается безопасный туннель  (в том числе и для решения нашей задачи).

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

Замечательной особенностью open vpn является то что генерация сертификатов производится через собственный  «авторизованный центр», и платить за выдачу и продление не нужно. Срок действия сертификата определяется самостоятельно. Изначально программа была разработана для Linux. Но для пользователей Windows так же есть решения на сайте разработчика.

Нужно выбирать версию подходящую для вашей операционной системы. В настоящее время актуальна версия для Windows 10. Ее мы и будем сегодня использовать.

Программа OPEN VPN не имеет обычного  механизма  автоматического обновления. Новые версии нужно  сначала скачивать с сайта разработчика, тестировать.  При установке новой версии «поверх» существующей сервер сломается и перестанет работать.

Но пусть вас это не смущает. На одной версии спокойно можно работать года три-четыре. Новые появляются при выходе очередных редакций операционных систем и отличаются размерами ключей, методами шифрования и адаптацией. Как правило, приходится генерить под них новые сертификаты пользователей — ставить всё заново.

Забегая вперед скажу — лучше иметь в сети два таких  open vpn сервера — основной и резервный. И издеваться над резервным, а придет время- по образу и подобию обновить основной. Итак, для решения нашей задачи следует  сначала подготовить наш будущий сервер к работе. Скачиваем программу с сайта разработчика и устанавливаем на нужный компьютер.

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

После окончания установки идем в «Центр управления сетями и общим доступом» — «изменение параметров адаптера». Обнаруживаем, что установился виртуальный сетевой адаптер (через него будет идти соединение) под именем «Ethernet«.

Если название получилось на русском языке (зависит от версии) — переименовываем на английском . Это важно!  Имя адаптера придумываем любое — покороче.

В моем случае необходимо, чтобы клиенты подключаясь  к нашей сети видели наши  доступные компьютеры,  а наши сервера «видели» бы нужные   сетевые принтеры в соседней сети. Для этого нам нужно  создать сетевой мост — объединить два сетевых устройство между собой.

В нашем случае  это наш сетевой адаптер, который «смотрит» в интернет и только что созданный адаптер TAP. Настройки IP обнуляем. Выделяем оба адаптера мышкой и объединяем в «мост»:

После установки устройства «Сетевой мост» нужно сделать ему настройки через «свойства» IP адреса, шлюза, маски а так же адреса DNS -серверов (выданные провайдером) . Если IP не было — назначить постоянный, внутренний. Это важно, без этого наш сервер не заработает!

Настройки IP адаптеров включенных в мост не изменяем и ничего не трогаем!

Отключаем брандмауэр windows.  Дополнительно, там же идем в «Разрешение обмена данными с приложениями в брандмауэре  Windows,  добавляем наш установленный open vpn в список (C:Program FilesOpenVPVBinOpenVPNgui,exe).

Сняли возможную блокировку соединения. Идем далее! Предварительная подготовка почти закончена. Теперь займемся непосредственно сервером. Идем в папку C:Program FilesOpenVPVeasy-rsa

В ней находятся программы  с которыми мы сейчас будем взаимодействовать. Открываем командную строку от имени Администратора. Переходим в папку easy-rsa, для чего в командную строку скопируем команду  cd C:Program FilesOpenVPNeasy-rsa

Все операции далее совершаем через командную строку. Для создания конфигурации сервера запустим файл init-config.bat

Создастся файл vars.bat, в нем мы заполним информацию, которую будут содержать сертификаты безопасности и с их помощью будут шифроваться данные. Для этого в блокноте открываем файл vars.bat и произвольно заполняем значения (командную строку не закрываем!):

img

rem down TLS negotiation performance
rem as well as the one-time DH parms
rem generation process.
set DH_KEY_SIZE=2048

rem Private key size
set KEY_SIZE=4096

rem These are the default values for fields
rem which will be placed in the certificate.
rem Change these to reflect your site.
rem Don’t leave any of these parms blank.

set KEY_COUNTRY=US
set KEY_PROVINCE=CA
set KEY_CITY=SanFrancisco
set KEY_ORG=OpenVPN
set KEY_EMAIL=mail@host.domain
set KEY_CN=server
set KEY_NAME=server
set KEY_OU=OU
set PKCS11_MODULE_PATH=changeme
set PKCS11_PIN=1234

Значения «server»  не изменяем. Все значения (страна, регион, город, организация, почтовый адрес) проставляем произвольно английским шрифтом. Сохраняем файл. Переходим в командную строку снова. Набираем  первой команду Vars.bat  

Если OpenVPN устанавливался ранее -набираем команду clean-all.bat  Она удалит созданную до этого  папку с ключами (keys) со всем содержимым . При установе сервера  OpenVPN с нуля  делать эту команду необязательно.

Если у вас так как на фото, нормально. Идем далее

Теперь с помощью проводника перейдем в каталог C:Program FilesOpenVPNbin и скопируем файлы библиотек (*.dll) , файл openssl.exe в каталог, где лежат наши исполняемы файлы и который открыт сейчас   в командной строке (C:Program FilesOpenVPNeasy-rsa):

Библиотеки нужны в этом каталоге, чтобы не возникало ошибок при создании сертификатов центра авторизации и файла  Диффи-Хеллмана. Начнем с последнего. Файл Диффи-Хеллмана  препятствует расшифровке информации (если файлы ключей были похищены), а так же отвечает за шифрование. Создадим его для нашего сервера в командной строке набрав команду build-dh.bat

Ждем, пока файл генерируется на основании информации указанной в vars.bat Далее, сгенерируем сертификат нашего удостоверяющего центра. Он будет необходим для  дальнейшей выдачи серверного и клиентских сертификатов. Наберем в командной строке команду build-ca.bat Последовательно и не спеша нажимаем клавишу Enter…

…после появления очередной строчки; данные в сертификате будут скопированы по значениям указанным в файле vars.bat Следующий этап —  создадим сертификат нашего сервера. В командной строке набираем команду build-key-server.bat server (server -имя серверного сертификата):

Так же последовательно и не спеша нажимаем Enter пока не дойдем до строчки Common Name(eg, your name or your servers hostname Здесь нужно обязательно указать имя сервера ( можно имя компьютера) и нажать Enter.

Далее будут оставшиеся поля и запрос на создание пароля от сертификата. Просто нажимаем Enter. На вопросы записи сертификата и добавления его в базу данных  нажимаем Y и Enter

Срок действия сертификата — 10 лет.

Если нужно поменять сроки действия открываем файл openssl 1.00.cnf и в строке default_days редактируем сроки действия серверного и клиентских сертификатов.

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

В папке sample-config лежит пример файла server.ovpn, находим его, открываем блокнотом( от имени администратора!):

Openvpn клиенты не видят друг друга, как настроить файл конфигурации сервера?

Очищаем  содержимое server.ovpn и вставляем текст:

img

# Поднимаем L4-туннель
dev tap
#dev tune
# Имя устройства (указывается имя адаптера openvpn):
dev-node Ethernet

# Протокол, который использую:tcp
#proto udp
proto tcp

# Порт который «слушает» впн (должен быть открыт, не из списка «известных»)
port 13359

#server 10.8.0.0 255.255.255.0

# Данная машина является
#tls-server

#Укажем пулл незанятых  разрешенных адресов из нашей локальной сети; укажем IP «моста», его маску а так же диапазон адресов

# Пул разрешенных адресов
server-bridge 192.168.0.1 255.255.255.0 192.168.0.111 192.168.0.121

# Включаю сжатие
comp-lzo

# Разрешаю клиентам видеть друг друга
client-to-client

#назначаю каждому клиенту свой постоянный IP

ifconfig-pool-persist ipp.txt

# Указал ключи и сертификаты (должны находитьcя в папке с конфигом)
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem

# Грубо говоря экономим адреса
topology subnet

# Метод шифрования
cipher AES-256-CBC

#при перезагрузке сервера не перечитываем ключи и настройки туннелирования прежние(у меня tap поэтому отключил):
persist-key
#persist-tun

#Максимальный размер блока данных:
tun-mtu 1500
tun-mtu-extra 32

# Немного улучшит пинг
mssfix 1450

# Время жизни клиентов, если не откликнулся — отключает
keepalive 10 120

# Уровень отладки и логирования (подробный лог)

verb 5

# максимальное количество клиентов

max-clients 10

status openvpn-status.log

Жирным выделил то, что можно менять. Ненужные строки можно закомментировать знаком #. Сохраняем файл под именем server.ovpn в  папке C:Program  FilesOpenVPNconfig  Если не получается сохранить —  запускаем блокнот (или программу NotePad++) от имени администратора, редактируем и сохраняем файл куда нужно.

Из папки Key скопируем сгенерированные нами файлы ключей и  сертификатов,  файл dh2048.pem в папку Config  — там же уже должен лежать наш файл server.ovpn

Операции с сервером можно считать почти законченными. Давайте стартуем и проверим наш сервер. На рабочем столе запустим ярлык OpenVPNgui в виде оранжевой замочной скважины (от имени Администратора!) На панели задач рядом с основным значком появиться еще один значок подключения. Кликнув по нему мышкой  обнаруживаем, что устанавливается соединение. Если сервер стартовал успешно —  значок подключения станет зеленым

Как сделать автоматический старт OpenVPN соединения при запуске Windows? 

Каждый раз запускать вручную соединение  неудобно. В ярлыке OpenVPNgui  (свойствах объекта) дописываем аргумент —connect server.ovpn, Ярлык помещаем в «автозагрузку». Я настраивал автозапуск быстро с помощью glary utilites

Вот так это выглядит Команда —connect дает соединение, а настройки его берутся из файла  нашего server.ovpn

Если планируется круглосуточная работа  сервера — советую настроить операционную систему на автоматический вход без пароля. Это гарантирует самозапуск соединения после  перезагрузок, которые бывают при отключении света, установки обновлений.

С сервером закончили. Не забываем открыть порт (указанный в конфиге сервера) на роутере, чтобы предоставить доступ к  нашему серверу извне.

Как настроить openvpn клиент на Windows10

Теперь нужно закончить с клиентскими машинами. Для начала сгенерируем клиентские сертификаты. Командная строка еще не закрыта? Набираем команду build-key client (сlient — имя сертификата клиента, можно использовать фамилию, инициалы)

Генерация сертификата происходит как обычно. Доходим до строки Common Name(eg, your name or your servers hostname) и вводим имя сертификата клиента. Оно должно совпадать с введеным ранее! После заполняем строки по умолчанию даем согласие на запись сертификата и добавление его в базу данных.

База данных на сервере обновлена . Таким же образом изготавливаем необходимое количество сертификатов.

Устанавливаем программу Open VPN на компьютере клиента.

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

Можно редактировать конфигурацию нажав на значок подключения через меню «Редактировать конфигурацию»

Скопируем туда следующий текст:

client

#имя сетевого адаптера ovpn

img

dev tap

#протокол соединения
proto tcp
#IP Адрес и порт сервера
remote ВАШ IP  ВАШ порт
# Ключи должны лежать в папке с конфигом
ca ca.crt
cert client.crt
key client.key
cipher AES-256-CBC
nobind
comp-lzo
persist-key
#persist-tun

keepalive 10 60
mute 20
verb 5

Сохраняем файл в папку с программой по пути C:Program FilesOpenVPNconfig  cертификат центра авторизации (ca.crt), сертификат и закрытый ключ (client.key,client.crt) мы копируем с сервера и помещаем в папку с файлом client.ovpn.

Нельзя выдавать один и тот же сертификат разным пользователям. Не получиться одновременной работы —  кого то будет выбрасывать из сети при попытке соединения.

Если сотрудник уволился — удаляем файлы  его сертификата и ключа с сервера. Программа позволяет генерить список отзыва недействительных сертификатов —  простая но полноценная программа. Запускаем соединение на клиенте аналогично — через замочную скважину.

Если все сделано правильно — в панели клиента тоже будет зеленый значок. Соединение установлено, можно работать, устанавливать сетевые принтеры. Знатоков прошу в комментариях выкладывать свои версии конфигов сервера — чтобы не читать документацию на английском. Удачи!

Понравилась статья? Поделить с друзьями:
  • Vpn между двумя компьютерами через интернет windows 10
  • Vpn мастер скачать бесплатно для windows бесплатно
  • Vpn клиент для windows 7 32 bit
  • Vpn клиент для windows 10 настройка
  • Vpn клиент для windows 10 pptp скачать