VPN

Материал из Корпоративная wiki Администрации города Волгодонски
Версия от 15:30, 23 марта 2020; Litvinyuk (обсуждение | вклад) (Возможные проблемы)

Перейти к: навигация, поиск

OpenVPN

(англ. Virtual Private Network — виртуальная частная(закрытая) сеть)

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

Минимально рабочий вариант.

port 1194
proto udp
dev tun
topology subnet
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/OpenVPN_srv.crt
key /etc/openvpn/easy-rsa/keys/OpenVPN_srv.key  # This file should be kept secret
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
server 10.8.0.0 255.255.255.0
push "route 10.8.0.0 255.255.255.0"
push "route 192.168.200.0 255.255.255.0"
push "route 192.168.7.0 255.255.255.0"
push "dhcp-option DNS 192.168.7.7"
push "dhcp-option DNS 80.254.107.129"
push "dhcp-option DOMAIN vlgd61.ru"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
mute 20

Файл настройки клиента

Минимально рабочий вариант.

client
dev tun
proto udp
remote 80.254.107.129 1194
resolv-retry infinite
nobind
key-direction 1
persist-key
persist-tun
comp-lzo
verb 3
mute 20
float
<ca>
Содержимое сертификата центра сертификации.
</ca>
<tls-auth>
Содержимое TLS ключа. Должно содержаться в секрете!
</tls-auth>

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

Скопируем easy-rsa в каталог /etc/openvpn. Это гарантирует, что любые изменения в сценарии не будут потеряны при обновлении пакета.

mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/

Отредактируйте /etc/openvpn/easy-rsa/vars

Ключевая пара удостоверяющего центра

Выполнять от пользователя имеющего права записи в /etc/openvpn/easy-rsa/keys/

Обычно это пользователь root или состоящий в группе wheel

su - root
cd /etc/openvpn/easy-rsa
./clean-all
source vars
./build-ca

После выполнения последней команды будут записаны файлы открытой и закрытой части ключа удостоверяющего центра в /etc/openvpn/easy-rsa/keys/

Ключевая пара сервера к которому мы будем подключаться

./build-key-server myservername

где myservername имя файла ключа.

Файл параметров Диффи-Хэлмана

./build-dh 

Ключ TLS аутентификации

openvpn --genkey --secret ta.key

Ключевая пара клиента

Выполнять от пользователя имеющего права записи в /etc/openvpn/easy-rsa/keys/

Обычно это пользователь root или состоящий в группе wheel

su - root
cd /etc/openvpn/easy-rsa
  • Импортировать из файла vars переменные окружения командой
source ./vars
  • Создать ключ клиента client1 командой
./build-key client1

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

Когда клиент теряет право подключения по организационным вопросам, то ключ отзывают.

  • Отозвать ключ клиента
su - root
cd /etc/openvpn/easy-rsa
source ./vars
./revoke-full client1
Особенности настройки OpenVPN в iOS

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

openssl rsa -in ios.key -out ios_rsa.key


Соберем все необходимые ключи и сертификаты в один PKCS#12 контейнер:

openssl pkcs12 -export -in ios.crt -inkey ios_rsa.key -certfile ca.crt -name ios -out ios.p12


Обязательно указать пароль для экспорта. Установить контейнера без пароля на экспорт в связку ключей iOS не получится. Полученный контейнер передаем на устройство через электронную почту или Safari. Скачать клиент OpenVPN Connect можно из iTunes.

Ограничения, присутствующие в приложении:

  • Размер файла настроек не может превышать 256KB. Тем не менее, этого должно быть достаточно даже для хранения файла конфигурации в унифицированном ovpn формате.
  • Поддерживаются только tun соединения из-за ограничений iOS VPN API.
  • Не поддерживается ряд директив в конфигурационном файле: dev tap, tls-remote, fragment, mssfix.
  • Не поддерживается работа клиентов без сертификатов. Эта возможность появится в будущем.
  • Возможно использовать только шифрование AES или Blowfish. Связано это с тем, что данные алгоритмы больше адаптированы под архитектуру ARM. Таким образом достигается большая энергоэффективность.
  • Использование HTTP прокси настраивается на уровне настроек приложения, а не в конфигурационном файле.
  • Использование контейнеров PKCS#12 возможно только, если они импортированы в связку ключей iOS. Такое поведение является настоятельной рекомендацией разработчиков, потому, что в отличие от хранения закрытого ключа прямо в ovpn файле, оно обеспечивает более высокий уровень сохранности секретных данных. Особенно в случае использования устройства с jailbreak.

Ссылки

VipNet

Клиент мешает авторизации машины в домене. Перед вводом/выводом машины в/из домена выключить клиента.

Доступ к защищенным сайтам с компьютеров в ЛВС через один VipNet-клиент

Ссылка на исходную статью

netsh interface portproxy add v4tov4 listenport=1920 connectport=80 connectaddress=192.168.200.211
netsh interface portproxy add v4tov4 listenport=1922 connectport=80 connectaddress=172.21.102.144

И перевести VipNet Client в режим разрешающий входящие соединения.

Можно добавить ярлык в каталог "Автозагрузка", где во вкладке "Ярлык" в строке "Объект" указать:

cmd /c "netsh interface portproxy add v4tov4 listenport=1920 connectport=80 connectaddress=192.168.200.211"

АЦК

Если VipNet клиент не видит АЦК, то нужно найти узел "Мин. фин", проверить его доступность (F5), и если доступен в свойствах узла открыть вкладку "Тоннели", добавить тоннель 192.168.14.2

Загрузка VipNet Client без ввода пароля

При загрузке ПК с VipNet Client каждый раз приходится вводить сложный пароль. Для того чтобы этого избежать, необходимо в корневой папке программы (например C:\Program Files\InfoTeCS\ViPNet Client) создать текстовый файл svcx.txt и вписать туда пароль абонентского пункта.

Перенос установленного клиента

  1. Сделать из каталога установки программы ViPNet Clent резервную копию следующих каталогов и файлов:
    1. \d_station;
    2. \databases;
    3. \MS;
    4. \MSArch (каталог по умолчанию хранения архивов «Деловой почты»);
    5. \Protocol (если требуется скопировать сохраненные протоколы сеансов обмена сообщениями);
    6. \TaskDir (если требуется сохранить файлы, принятые по файловому обмену);
    7. Каталог ключей пользователя, обычно \user_AAAA (где AAAA — шестнадцатиричный идентификатор пользователя ViPNet без номера сети). В некоторых случаях каталог ключей пользователя может совпадать с каталогом установки программы ViPNet Client, тогда следует скопировать каталог \key_disk.
    8. APAXXXX.TXT, APCXXXX.TXT, APIXXXX.TXT, APLXXXX.TXT, APNXXXX.CRC, APNXXXX.CRG, APNXXXX.TXT, APSXXXX.TXT, APUXXXX.TXT (где XXXX — шестнадцатиричный идентификатор сетевого узла без номера сети);
    9. autoproc.dat (этот файл присутствует, если настроены правила автопроцессинга);
    10. infotecs.re;
    11. iplir.cfg, iplirmain.cfg;
    12. ipliradr.do$, ipliradr.doc;
    13. linkXXXX.txt, nodeXXXX.tun (где XXXX — шестнадцатиричный идентификатор сетевого узла без номера сети);
    14. mftp.ini;
    15. wmail.ini.
  2. Перед переносом справочно-ключевой информации на новый компьютер установить программу ViPNet Client (см. «Установка и первичная инициализация» на стр. 40), но не выполнять инициализацию справочно-ключевой информации. Иначе, удалить следующие каталоги и файлы:
    1. каталог ключей пользователя \user_AAAA;
    2. файлы AP*.TXT, APNXXXX.CRC, APNXXXX.CRG.
  3. Справочно-ключевую информацию, перечисленную на шаге 1, поместить в новый каталог установки программы ViPNet Client.
    1. В файле wmail.ini в качестве значений параметров MSDir и MSArchDir указать путь к новому каталогу установки программы ViPNet Client.
    2. В файле mftp.ini указать путь к новому каталогу установки программы ViPNet Client в значениях всех параметров, где он встречается.
    3. Удалить файл certlist.sst, находящийся в подкаталоге \d_station\abn_AAAA (где AAAA — шестнадцатиричный идентификатор пользователя ViPNet без номера сети).
    4. Запустить программу ViPNet Монитор и в окне входа в программу указать путь к каталогу ключей пользователя, например C:\Program Files (x86)\InfoTeCS\ViPNet Client\user_0003.
    5. Выполнить вход в программу ViPNet Монитор (см. «Режимы авторизации» на стр. 62).
    6. В окне "Настройка параметров безопасности" на вкладке "Ключи" установить контейнер ключей электронной цифровой подписи. Для этого:
      1. Нажать кнопку "Установить".
      2. В окне "ViPNet CSP" "Инициализация контейнера ключа" указать путь к каталогу с контейнером, например C:\Program Files (x86)\InfoTeCS\ViPNet Client\user_0003\key_disk\dom.
      3. В списке "Имя контейнера" выбрать контейнер (имя контейнера начинается с символов sgn).
      4. Нажать кнопку OK.

После выполнения перечисленных действий программа ViPNet Client готова к работе.

В случае повреждения носителя с .dst

  1. Пишем письмо на имя директора ГБУ РО "РЦИС", в котором
    1. указываем причину утраты носителя,
    2. просим эти файлы снова выдать.
  2. Оформляем доверенность на получение носителей с .dst
  3. В Ростове-на-Дону по адресу улица Козлова, дом 62/148 получаем.

Обновление сертификата клиента

При появлении подобного сообщения

2018-11-07 Обновление сертификата VipNetClient.png


Открыть настройки электронной подписи - выбрать "Обновить сертификат". Файлы обновления могут поступить в течение двух дней.

PPTP

  1. Устанавливаем на сервере pptpd, подходящий для нашей системы.
  2. В файл /etc/ppp/chap-secrets дописываем информацию о пользователях, которым необходим удалённый доступ:
# Secrets for authentication using CHAP
# client      server          secret           IP addresses
user1         pptpd           passwOrD1        10.0.10.2
user2         pptpd           qWeRPDW2a        10.0.10.3
user3         pptpd           qWeRPDW3a        *

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

  1. Включаем в ядре пересылку (forwarding) пакетов между интерфейсами:
sysctl -w net.ipv4.ip_forward=1
  1. Проверяем, что в сетевом экране открыты подключения извне на TCP-порт 1723 и что разрешен протокол №47:
    вариант с iptables
iptables -I INPUT -p tcp --dport 1723 -j ACCEPT
iptables -I INPUT -p 47 -j ACCEPT
  1. Проверяем, что в файле /etc/ppp/pptpd-options присутствуют следующие опции:
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 10.0.0.253
ms-dns 10.0.0.252
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd

Опции ms-dns – это те DNS-сервера, которые выдаются клиенту. Нужно изменить на те, которые реально используются в Вашей сети. Если клиент в состоянии использовать DNS-сервера (по умолчанию клиент получит в качестве шлюза свой IP-адрес, который прописан в файле chap-secrets и DNS-сервера по этой причине могут стать недоступны), которые он использовал до установки vpn-подключения, эти опции можно убрать.

  1. Редактируем /etc/pptpd.conf, нужно чтобы в нем были следующие строки:
option /etc/ppp/pptpd-options
logwtmp
localip 10.0.0.1
remoteip 10.0.0.2-20

Параметры localip и remoteip изменяем в соответствии с IP-адресацией в Вашей сети.

  1. Запускаем сервис:
/etc/init.d/pptpd start
  1. Включаем автозагрузку сервиса при старте системы:
chkconfig pptpd on
  1. Пробуем подключаться.

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

Если в качестве клиента Windows XP и имеются проблемы с подключением, то в настройках подключения на вкладке "Безопасность" нужно снять галочку "Требуется шифрование данных".

Если какая-то машинка за NAT-ом испытывает трудности с подключением к внешнему VPN-серверу и винда показывает ошибку №619, то стоит попробовать включить модуль ядра ip_nat_pptp на linux-роутере, который исполняет NAT:

modprobe ip_nat_pptp

Если в логе (/var/log/messages) сервера с pptpd имеется нечто такое:

Feb 17 08:09:29 zeon pppd[28671]: Plugin /usr/lib64/pptpd/pptpd-logwtmp.so is for pppd version 2.4.3, this is 2.4.4
то наиболее простым решением является убирание опции logwtmp из файла /etc/pptpd.conf. Это приведёт к тому, что сеансы связи клиентов не будут отображаться командой last (которая как раз и работает с /var/log/wtmp). Ну а правильным решением будет найти rpm-ку соответствующую вашей системе или пересобрать pptpd руками из исходников.

Если в логе (/var/log/messages) сервера с pptpd наблюдается:

Feb 17 11:18:12 zeon kernel: pptpctrl[30130]: segfault at 00000000 rip 005a34b0 rsp ffe60810 error 4

а клиенты на windows-машинках при подключении получают ошибку 800, то, скорей всего, исчерпался лимит одновременных подключений, который задаётся опцией remoteip в файле /etc/pptpd.conf. Такой segfault у меня был когда в /etc/pptpd.conf я сдуру втулил строчку "remoteip 192.168.0.2-192.168.0.254" (пускало только первого юзера, а все последующие получали ошибку 800 и segfault в логе сервера). После того, как заменил на "remoteip 192.168.0.2-254" всё заработало как надо.

Если надо потюнить MTU, то как вариант создаём файл /etc/ppp/ip-up.local примерно такого содержания:

#!/bin/bash
NEW_MTU_VALUE=1446
/sbin/ifconfig "$1" mtu $NEW_MTU_VALUE
logger "MTU set to $NEW_MTU_VALUE for device $1"
chmod +x /etc/ppp/ip-up.local

Без этого действа у меня pptpd на CentOS 6 клиенту с Win 7 почему-то выдавал MTU 1396, нагло игнорируя прописанное в /etc/ppp/pptpd-options.

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