- LINUX — Жизнь в консоли ЕСТЬ.
- Главное меню
- Последние статьи
- Счетчики
- Связываем локальные сети при помощи OpenVPN
- Создание ключей (производится только на сервере. затем необходимые ключи копируются с сервера на клиенты).
- Настраиваем сервер (создаем файл-конфиг и заполняем его):
- Настройки маршрутизации к клиентским сетям и выдача им ip.
- Правила для IPTABLES.
- Теперь на машинах-клиентах создаем конфиг:
- OpenVPN
- Содержание
- OpenVPN
- Варианты применения данной статьи
- Исходные данные
- Настройка OpenVPN
- Установка
- Создание сервера
- Создание ключей и сертификатов
- Создание файла конфигурации сервера
- Настройка маршрутизации на стороне сервера
- Включаем ipv4_forwarding
- Создание клиента
- Создание ключей и сертификатов
- Создание файла конфигурации клиента
- ИЛИ единый файл конфигурации клиента client.ovpn с сертификатами и ключами для импорта
- Настройка маршрутизации на стороне клиента
- Включаем ipv4_forwarding
- Настройка выхода в интернет с IP сервера
- Настройки сервера
- Настройки клиента
- Отзыв сертификата
- Отключение автозапуска OpenVPN
- Тест производительности OpenVPN
- Источники
LINUX — Жизнь в консоли ЕСТЬ.
Главное меню
Последние статьи
Счетчики
Связываем локальные сети при помощи OpenVPN
Имеем центральный офис и три филиала. Все используют разных интернет-провайдеров, и разные технологии.
Центральный офис: 10.10.10.0 255.255.255.0
Филиал под условным названием npn: 192.168.0.0 255.255.255.0
Филиал под условным названием mg: 192.168.10.0 255.255.255.0
Филиал под условным названием westfood: 192.168.2.0 255.255.255.0
Необходимо связать эти сети, для обмена данными 1С между филиалами и центральным офисом, ну и для удобства администрирования. Для этих целей будем использовать кросс-платформенную программу OpenVPN. С помощью нее создадим защищенную виртуальную частную сеть, обьединяющую локальные сети предприятия. Выглядеть это будет так: из любой локальной сети, например с сети westfood (192.168.2.0 255.255.255.0) можно будет попасть на компьютер в любой другой сети, например npn(192.168.0.0 255.255.255.0), введя локальный ip-адрес, например 192.168.0.10 . Причем не важно что у них разные провайдеры. Программа использует только один порт, и не помеха если клиенты за NATом.
Ставим (и на сервере и на клиентах):
sudo su
apt-get install openvpn
Создание ключей (производится только на сервере. затем необходимые ключи копируются с сервера на клиенты).
Переходим в каталог со скриптами создания ключей шифрования:
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
Открываем файл, содержащий переменные для скриптов:
nano vars
изменяем следующие параметры под свою организацию:
export KEY_COUNTRY=»RU»
export KEY_PROVINCE=»PS»
export KEY_CITY=»Pskov»
export KEY_ORG=»MegaHolod»
export KEY_EMAIL=» Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript «
export KEY_DIR=»/etc/openvpn/keys»
Последний — директория, куда будут сохраняться созданные ключи.
Заносим переменные из только что отредактированного файла в память
source ./vars
Перед созданием ключей запускаем скрипт:
./clean-all
Далее переходим непосредственно к генерированию ключей путем запуска соответствующих скриптов. Так как в файл с переменными мы уже занесли нужные значения, жмем просто Enter в ответ на вопросы скриптов, за исключением:
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Итак создаем CA ключ:
./build-ca
Создаем DH ключ (нужен только серверу):
./build-dh
Создаем private key для сервера (gate — имя сервера):
./build-key-server gate
Создаем ключи в PKCS #12 формате для машин-клиентов;
./build-key-pkcs12 mg
./build-key-pkcs12 npn
./build-key-pkcs12 westfood
Создаем TLS-ключ (Общий для сервера и клиента):
openvpn —genkey —secret /etc/openvpn/keys/ta.key
Из папки «/etc/openvpn/keys» нужно скопировать ta.key и *.p12 соответствующий клиенту на машины-клиенты.
Настраиваем сервер (создаем файл-конфиг и заполняем его):
touch /etc/openvpn/server.conf
nano /etc/openvpn/server.conf
port 17993 # порт, на котором будет слушать сервер
proto tcp # протокол (по умолчанию udp)
dev tun # тип устройства (tun или tap)
tls-server # явно указывает, что данный хост является tls-server
tls-auth keys/ta.key 0 # 0-сервер , 1- для конфига клиента
ca /etc/openvpn/keys/ca.crt # файл сертификата для CA
cert /etc/openvpn/keys/gate.crt # сертификат сервера
key /etc/openvpn/keys/gate.key # ключ сервера
dh /etc/openvpn/keys/dh1024.pem # файл с ключем Диффи-Хелмана
# автоматически присваивает адреса всем клиентам (DHCP) в указанном
# диапазоне с маской сети. Данная опция заменяет ifconfig и может
# работаеть только с TLS-клиентами в режиме TUN, соответственно
# использование сертификатов обязательно.
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt # Тут будут храниться ip адреса клиентов
push «route 10.10.10.0 255.255.255.0» # передача клиенту маршрута к сетке,
# в которой сервер.
# каждые 10 секунд посылать ping на удаленный хост, и, если за 60 секунд
# не было получено ни одного пакета — то перезапускать туннель.
keepalive 10 60
# параметр сжатия трафика, идущего через виртуальный туннель.
# Может принимать значения yes, no, adaptive.
# Последнее используется по умолчанию.
comp-lzo
# Для улучшения безопасности рекомендовано запускать
# все сервисы с минимальными правами. Openvpn будет работать от имени nobody.
user nobody
group nogroup
persist-key # указывает не перечитавать файлы ключей при перезапуске туннеля
persist-tun # данная опция оставляет без изменения устройства tun/tap
#при перезапуске OpenVPN.
# сервер работает в режиме демона
daemon
status openvpn-status.log # указывает путь к статус-файлу,
# в котором содержится информация о текущих соединениях и
# информация о интерфейсах TUN/TAP
log-append openvpn.log # дописывать сообщения в лог-файл, а не перезаписывать.
verb 4 # уровень логирования
mute 20 # в лог будет записываться только по 20 сообщений из одной категории
client-to-client # позволяет клиентам видеть друг друга (сети)
client-config-dir /etc/openvpn/ccd # папка содержащая маршруты к сетям
# клиентов и посылаемые клиентам ip адреса клиента и сервера
ccd-exclusive # каждому клиенту свои настройки
management localhost 7505
tun-mtu 1500 # устанавливает максимальный размер MTU
tun-mtu-extra 32
mssfix 1450
# маршруты к сетям клиентов
route 192.168.10.0 255.255.255.0 10.8.0.2
route 192.168.0.0 255.255.255.0 10.8.0.2
route 192.168.2.0 255.255.255.0 10.8.0.2
Настройки маршрутизации к клиентским сетям и выдача им ip.
Выбранные пары IP-адресов, во-первых, должны быть уникальными, во-вторых, должны входить в состав последовательных подсетей, ограниченных маской /30 (255.255.255.252), и, в-третьих, должны находиться в пределах пула IP-адресов, выделенного для виртуальной частной сети (определяется параметром server файла конфигурации сервера OpenVPN). С учетом перечисленных условий для клиентов и сервера подойдут пары IP-адресов со следующими парами последних октетов:
[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18] [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58] [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98] [101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138] [141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178] [181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218] [221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]
Создаем на сервере файлы для каждого клиента:
touch /etc/openvpn/ccd/npn
nano /etc/openvpn/ccd/npn
iroute 192.168.0.0 255.255.255.0
ifconfig-push 10.8.0.5 10.8.0.6 255.255.255.252
# iroute — маршрут к сети клиента под названием npn
# посылает клиенту ай-пи адрес клиента и сервера
для других сетей аналогично:
touch /etc/openvpn/ccd/mg
nano /etc/openvpn/ccd/mg
iroute 192.168.10.0 255.255.255.0
ifconfig-push 10.8.0.9 10.8.0.10 255.255.255.252
touch /etc/openvpn/ccd/westfood
nano /etc/openvpn/ccd/westfood
iroute 192.168.2.0 255.255.255.0
ifconfig-push 10.8.0.13 10.8.0.14 255.255.255.252
Правила для IPTABLES.
Для того что-бы это все работало, в фаерволе (iptables), если он используется, нужно разрешить трафик. Пример куска моего скрипта настройки, касающегося openvpn:
#!/bin/bash
# Переменные
#указываем внешний ip сервера и внешн. сетевой интерфейс
INET_IP1=195.239.136.ххх
INET_IFACE1=eth2
# указываем внутренний ip сервера и внутр. сетевой интерфейс
LAN_IP=10.10.10.4
LAN_IFACE=eth0
# указываем сетевой интерфейс VPN, и сеть, ему принадлежащую
VPN_IFACE=tun0
VPN_RANGE=10.8.0.0/24
# внутренняя сеть
LAN_RANGE=10.10.10.0/24
# сетевой интерфейс петли и ip
LO_IFACE=lo
LO_IP=127.0.0.1
#OpenVPN
# разрешаем трафик между локальной сетью и VPN
# (необходимо для возможности доступа к серверу по внутреннему ip. c клиента)
$ip -A FORWARD -p all -i $LAN_IFACE -o $VPN_IFACE -j ACCEPT
$ip -A FORWARD -p all -o $LAN_IFACE -i $VPN_IFACE -j ACCEPT
# разрешаем входящий и исходящий трафик для vpn-интерфейса
# (необходимо для возможности установки vpn соединения)
$ip -A INPUT -p all -i $VPN_IFACE -j ACCEPT
$ip -A OUTPUT -p all -o $VPN_IFACE -j ACCEPT
# разрешаем icmp пакеты через vpn
# (необходимо для пинга)
$ip -A INPUT -p icmp -m icmp -i $VPN_IFACE —icmp-type echo-request -j ACCEPT
$ip -A OUTPUT -p icmp -m icmp -o $VPN_IFACE —icmp-type echo-request -j ACCEPT
$ip -A FORWARD -p icmp -m icmp -i $VPN_IFACE -o $LAN_IFACE —icmp-type echo-request -j ACCEPT
$ip -A FORWARD -p icmp -m icmp -o $VPN_IFACE -i $LAN_IFACE —icmp-type echo-request -j ACCEPT
$ip -A INPUT -p icmp -m icmp -i $VPN_IFACE —icmp-type echo-reply -j ACCEPT
$ip -A OUTPUT -p icmp -m icmp -o $VPN_IFACE —icmp-type echo-reply -j ACCEPT
$ip -A FORWARD -p icmp -m icmp -i $VPN_IFACE -o $LAN_IFACE —icmp-type echo-reply -j ACCEPT
$ip -A FORWARD -p icmp -m icmp -o $VPN_IFACE -i $LAN_IFACE —icmp-type echo-reply -j ACCEPT
Теперь на машинах-клиентах создаем конфиг:
touch /etc/openvpn/client.conf
nano /etc/openvpn/client.conf
client
dev tun # тип устройства tun или tap
#dev-node OpenVPN # раскоментировать если клиент под виндовс
# для виндовс нужно указать название
# создаваемого сетевого адаптера
proto tcp # протокол. по умолчанию udp
remote 195.239.136.ххх 17993 # ip и порт сервера
remote 93.153.252.ххх 17993
resolv-retry infinite # для dyndns
persist-key # указывает не перечитавать файлы ключей при перезапуске туннеля
persist-tun # данная опция оставляет без изменения устройства tun/tap
tls-client
# пути к файлам ключей, которые мы скопировали с сервера
pkcs12 /etc/openvpn/keys/westfood.p12
tls-auth /etc/openvpn/keys/ta.key 1
# параметр сжатия трафика, идущего через виртуальный туннель.
# Может принимать значения yes, no, adaptive.
# Последнее используется по умолчанию.
comp-lzo
verb 4 # уровень логирования
tun-mtu 1500 # устанавливает максимальный размер MTU
tun-mtu-extra 32
mssfix 1450
route-delay 5 # посылать маршруты через 5 сек. после установки vpn-канала
management localhost 7505
# show-net-up # раскоментировать, если клиент под виндовс
# если в конфиг OpenVPN вставить show-net-up, то OpenVPN запросит
# windows через API всю таблицу маршрутизации и выведет её в лог
#ip-win32 manual # раскоментировать, если клиент под виндовс
Запускаем на сервере, а затем и на клиентах демон openvpn:
Источник
OpenVPN
Содержание
Просьба к редакторам тоже там отписываться
OpenVPN
OpenVPN — свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT-firewall, без необходимости изменения их настроек.
Варианты применения данной статьи
Исходные данные
Локальная сеть 1
Локальная сеть 2
Настройка OpenVPN
Установка
И на сервере и на клиенте ставим один и тот же пакет.
Создание сервера
Создание ключей и сертификатов
Защита соединения в OpenVPN в данном случае строится на использовании сертификатов и ключей для сервера и для клиентов.
Переходим в созданную директорию, где и займёмся генерацией ключей и сертификатов
Редактируем файл переменных
Здесь можно заполнить например так:
копируем конфиг openssl
Очищаем от старых сертификатов и ключей папку keys и создаем серийный и индексные файлы для новых ключей
Создаем сертификат. По умолчанию поля будут заполняться данными, введенными ранее в vars, поэтому можно ничего не менять.
Создаем ключ сервера
В конце соглашаемся с запросом на подпись и добавление сертификата в базу.
Создаем ключ Диффи-Хеллмана
Cоздаем ключ для tls-аутификации
Создание файла конфигурации сервера
Создадим директорию для клиентских конфигов
Можно запускать наш сервер OpenVPN
Смотрим список интерфейсов
Если среди прочих видим
значит VPN-сервер завелся. Если нет, то смотрим лог
Настройка маршрутизации на стороне сервера
Если сервер имеет «белый» IP то никакой маршрутизации на стороне сервера настраивать не нужно. Если сервер находится в локальной сети за NAT роутера то необходимо настроить маршрутизацию.
Для того, чтобы клиенты могли достучаться до сервера нужно пробросить порты с роутера на сервер. В разных моделях это делается по разному. Суть в том, чтобы стучась на внешний порт, например 12345 1) , клиенты попадали на порт OpenVPN-сервера 1194 (или другой, который мы задали для нашего сервера). Кроме того устройствам в локальной сети нужно сообщить, что для доступа к сети за OpenVPN-сервером нужно обращаться к нему. Но проще задать этот маршрут на роутере, который обслуживает локалку.
Создаем файл в каталоге ccd с тем же именем, что и ключ для клиента, т.е. /etc/openvpn/ccd/client
Включаем ipv4_forwarding
В /etc/sysctl.conf расскомментируем #net.ipv4.ip_forward=1 после чего
Создание клиента
Создание ключей и сертификатов
Переходим в созданную директорию, где и замёмся генерацией ключей и сертификатов
Создаем ключ клиента
Если хотим защитить ключ паролем, то генерируем его другой командой
В этом случае при запуске соединения нужно будет каждый раз вводить пароль на ключ.
Создание файла конфигурации клиента
/etc/openvpn/client.conf
ИЛИ единый файл конфигурации клиента client.ovpn с сертификатами и ключами для импорта
Можно запускать наш клиент OpenVPN
Настройка маршрутизации на стороне клиента
Машина с openvpn уже готова работать с сервером в чём можно убедится
Но для того, чтобы пользоваться туннелем в другой офис могли другие устройства в локальной сети нужно указать им, чтобы доступ в подсеть 192.168.1.0/24 осуществляется через 192.168.0.100. Или, что часто проще и быстрее прописать это правило маршрутизации на роутере, который является шлюзом для устройств в сети.
Включаем ipv4_forwarding
Также как в случае с сервером.
Настройка выхода в интернет с IP сервера
Настройки сервера
Если же вы хотите организовать доступ из VPN сети в интернет с IP адреса сервера, то вам нужно настроить на сервере NAT. Сделать это можно следующей командой (на сервере):
Здесь мы указали, что сеть 10.8.0.0/24 будет выходить наружу через интерфейс eth0.
Для того что бы настройки iptables сохранились после перезагрузки нужно их дополнительно сохранить:
Настройки клиента
К конфиге клиента client.conf нужно добавить строчку
Отзыв сертификата
Если все прошло штатно вы должны увидеть следующий вывод, сообщающий о том, что сертификат отозван:
Скрипт revoke-full создаст CRL-файл (certificate revocation list, список отозванных сертификатов) с именем crl.pem в подкаталоге keys. Файл должен быть скопирован в каталог, в котором сервер OpenVPN может получить к нему доступ. Ранее в конфиге мы прописали, что этот файл должен находится в /etc/openvpn, туда и копируем.
Отключение автозапуска OpenVPN
Тест производительности OpenVPN
Максимальный прирост при отключении сжатия, шифрования и аутентификации составил около 35%. Не думаю, что это стоит того, чтобы отключать механизмы защиты, но ситуации бывают разные.
Может кому-то как мне будет интересно влияние опций на производительность и не придется тратить время на проведение замеров, хотя я бы с удовольствием ознакомился с результами других людей. Изначально тестил для себя, поэтому точных замеров не проводил, потом решил поделиться результатами.
Источники
© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.
Источник