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

Содержание
  1. LINUX — Жизнь в консоли ЕСТЬ.
  2. Главное меню
  3. Последние статьи
  4. Счетчики
  5. Связываем локальные сети при помощи OpenVPN
  6. Создание ключей (производится только на сервере. затем необходимые ключи копируются с сервера на клиенты).
  7. Настраиваем сервер (создаем файл-конфиг и заполняем его):
  8. Настройки маршрутизации к клиентским сетям и выдача им ip.
  9. Правила для IPTABLES.
  10. Теперь на машинах-клиентах создаем конфиг:
  11. OpenVPN
  12. Содержание
  13. OpenVPN
  14. Варианты применения данной статьи
  15. Исходные данные
  16. Настройка OpenVPN
  17. Установка
  18. Создание сервера
  19. Создание ключей и сертификатов
  20. Создание файла конфигурации сервера
  21. Настройка маршрутизации на стороне сервера
  22. Включаем ipv4_forwarding
  23. Создание клиента
  24. Создание ключей и сертификатов
  25. Создание файла конфигурации клиента
  26. ИЛИ единый файл конфигурации клиента client.ovpn с сертификатами и ключами для импорта
  27. Настройка маршрутизации на стороне клиента
  28. Включаем ipv4_forwarding
  29. Настройка выхода в интернет с IP сервера
  30. Настройки сервера
  31. Настройки клиента
  32. Отзыв сертификата
  33. Отключение автозапуска OpenVPN
  34. Тест производительности OpenVPN
  35. Источники

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

Читайте также:  Как сбросить пароль windows embedded

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

Читайте также:  Настройка операционной системы windows при первоначальной загрузки


# сетевой интерфейс петли и 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, поэтому можно ничего не менять.

Создаем ключ сервера

В конце соглашаемся с запросом на подпись и добавление сертификата в базу.

Читайте также:  Центр обновлений windows 10 ошибка 0х80080005

Создаем ключ Диффи-Хеллмана

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.

Источник

Оцените статью