Настройка OpenVPN для организации корпоративной VPN

Передо мной предстала задача реализации безопасного доступа сотрудников из внешнего мира к внутренней корпоративной сети. В качестве реализации был выбран OpenVPN из-за того, что провайдер одного из участников будущей сети обрезал GRE и вообще это решение более “вездеходно”. )
В данной статье я на примере из личной практики опишу процесс создания OpenVPN сервера на системе Linux, (по возможности с минимальными зависимостями от дистрибутива ) с возможностью подключения к нему удаленных пользователей (с различных операционных систем: Windows, Linux, FreeBSD, Mac OS X etc.).

1.
Постановка задачи.
Задача такая: есть корпоративная сеть с ресурсами SMB, HTTP, rsync, SSH. Необходимо предоставить доступ к ресурсам сети сотрудникам из внешнего мира. При этом сотрудники должны быть мобильными – не привязанными к одному провайдеру, городу и прочее.

В качестве виртуальной сети выберем сеть 192.168.100.0/24

2.Установка.

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

 Далее >>>

Для систем на основе Debian, а также ALT Linux установка  OpenVPN производится командой:
sudo apt-get install openvpn

Кроме этого, надо проверить имеет ли ядро поддержку TUN/TAP устройств. Если нет – необходимо скомпилировать модуль. Во всех современных дистрибутивах это уже есть в коробке.

Для ОС Windows, необходимо в первую очередь получить инсталляционный файл. Скачать его можно с помощью ссылки. На момент написания статьи, текущая версия OpenVPN — 2.0.9. Затем необходимо проинсталлироваеть полученное програмное обеспечение обычным вызовом .exe файла. Во время инсталляции оставьте все значения по умолчанию.

3.Генерация сертификатов и ключей
Тут и тут подробно описано, как создаются сертификаты и ключи в POSIX-системах, а тут – как в не POSIX:

4. Конфиг
Конфигурационный файл сервера (конфиг с “боевого” сервера пример POSIX-систем)

cat server.conf
#указываем порт, на котором будет работать наш сервер
port 1194
# протокол будет использоваться udp (обычно он работает быстрее чем tcp)
proto udp
# используемый тип устройства и номер
dev tun
;dev tap0
;dev-node tap0
#указываем файл CA (Certificate Authority)
ca /etc/openvpn/ca.crt
#указываем файл с сертификатом сервера
cert /etc/openvpn/server.crt
#указываем файл с ключем сервера
key /etc/openvpn/server.key
#указываем файл Диффи Хельман
dh /etc/openvpn/dh1024.pem
#задаем виртуальный IP-адрес сервера и маску подсети, которые будут использоваться в нашем туннеле между сервером и удаленными клиентами
server 192.168.100.0 255.255.255.0
#в какой файл будем записывать выданные для VPN адреса
ifconfig-pool-persist ipp.txt
#указываем клиенту маршрут к серверу по виртуальному интерфейсу
push "route 192.168.100.0 255.255.255.0"
#указываем клиенту маршрут во внутреннюю сеть по виртуальному интерфейсу
push "route 192.168.0.0 255.255.255.0"
#указывем каждые 10 секунд пинговать удаленный хост и, в случае если в течении 120 секунд не будет ответа, разрывать соединение
keepalive 10 120
# сжатие трафика
comp-lzo
# так можно указать максимально количество клиентов
;max-clients 100
#Подключение модуля аутентификации openvpn-auth-pam.so и использование программы login для аутентификации пользователей во время установки соединения. Увеличивает безопасность за счёт доплнительной проверки пары логин/пароля
plugin /usr/lib/openvpn/openvpn-auth-pam.so login
# пользователь и группа от лица которы будет работать OpenVPN – выбираем самых бесправных
user nobody
group nogroup
# Не перечитывать ключи после получения  SIGUSR1 или ping-restart
persist-key
# Не закрывать и переоткрывать TUN\TAP устройство, после получения SIGUSR1 или ping-restart
persist-tun
;status openvpn-status.log
log-append  openvpn.log
# Уровень отладочной информации
verb 4
mute 20
#Разрешить пересылку пакетов между клиентами:
client-to-client
#Автоматически прописать машрут на сервере до клиента
client-config-dir /etc/openvpn/ccd

Создаём файл для каждого клиента в папке:  /etc/openvpn/ccd
следующего содержания:

cat  /etc/openvpn/ccd/client1
# маршрут для клиента client1, чтобы видеть сеть за сервером
push "route 192.168.0.0 255.255.255.0"

Тут же можно описать какую сеть за клиентом должен видеть  сервер (это например может понадобится при настройки связи нескольких удаленных офисов) строкой:

# маршрут для сервера, чтобы видеть сеть за клиентом  client1
iroute 192.168.200.0 255.255.255.0

Дополнительное описание параметров можно найти, например, в статье

Пример для не-POSIX системы можно найти в 1 и 2

5.Настройка клиента
конфиг POSIX-клиента:

remote 89.89.89.89 1194
client
dev tun
proto udp
resolv-retry infinite # необходимо для DynDNS
nobind
#Если есть прокси – указываем.
;proxy 12.23.34.45:3128
user nobody
group nogroup
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client1.crt
key /etc/openvpn/client1.key
comp-lzo
# включаем вместе с pam-аутентификацией
auth-user-pass
verb 4
mute 20

для не-POSIX клиентов конфиг таков:
remote 89.89.89.89 1194
client
dev tun
proto udp
resolv-retry infinite #  необходимо для DynDNS
nobind
#Если есть прокси – указываем.
;proxy 12.23.34.45:3128
persist-key
persist-tun
ca ca.crt
cert pavel.crt
key pavel.key
# включаем вместе с pam-аутентификацией
auth-user-pass
comp-lzo
#Эту строчку надо добавить в операционных системах MS Windows Vista и MS Windows 7 – для изменения приоритетов маршрутов
;redirect-gateway def1
verb 4
mute 20

6. Необходимо настроить iptables на работу с VPN. В статье расказывается о настройке iptables.

Запускаем сервис OpenVPN командой

# /etc/init.d/openvpn start

Процесс создания OpenVPN-сервера на других системах (Gentoo, Slackware, *BSD) будет аналогичен данному.

комментариев 6 to “Настройка OpenVPN для организации корпоративной VPN”

  1. Mike86 Says:

    Для тех,у кого не получается настроить OpenVPN для Windows VISTA,вам сюда
    http://depositfiles.com/files/x91emj4zs

  2. Mike86 Says:

    И OpenVPN,с которым я работаю без проблем
    http://depositfiles.com/files/osw3m9eej

  3. Илья Says:

    Все хорошо и замечательно, а как использовать этот vpn-канал? как убрать сервисы ftp только под vpn-сеть?

  4. Сергей Says:

    Спасибо, дружище! Очень полезная статья! Сейчас подключаю сельские больнички к районной и твоя статья просто выручила.

  5. none Says:

    1. #Эту строчку надо добавить в операционных системах MS Windows Vista и MS Windows 7 – для изменения приоритетов маршрутов
    ;redirect-gateway def1
    Эту строчку не надо добавлять в виндах, поскольку при правильно настроенной маршрутизации все работает и без этой строчки. Во вторых эта строчка не меняет приоритет маршрутов за приоритет отвечает метрика. Эта строчка заменяет шлюз по умолчанию у клиента на тот который ему отдает сервер впн. И на мой взгляд это далеко не лучшая идея для клиентов.
    А теперь вопрос. Глобально для всех клиентов настроена опция — redirect-gateway def1
    Как для конкретных клиентов отменить ее ?

  6. XyHbDyHb Says:

    Спустя кучу времени, отвечу вдруг кому пригодится, сам нашел данное решение когда уже перестал пользоваться OpenVPN.
    Для игнорирования настроек маршрутизации которые сервер передает клиенту, необходимо в конфиге клиента прописать route-nopull
    и настроить маршрутизацию вручную как вашей душе угодно.

Оставьте комментарий