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

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску

Вот очень хороший | документ по настройке. Еще большое спасибо vinni с этого форума за статью и помощь с настройке, что сейчас и опишу.

Инсталяция

Итак устанавливаем пакет openvpn со всеми зависимостями. Копируем скрипты

cp /usr/share/openvpn/easy-rsa/2.0/* /etc/openvpn

Копируем конфигурационный файл настройки сервера

cp /usr/share/openvpn/sample-config-files/server.conf /etc/openvpn

Задача

Небходимо соеденить 3 локальных сети с одну, с помощью третей, которая соединяет все три Linux сервера. Смотри рисунок ниже.

                  Сервер 2 (OpenVPN client1(uzo)                 Сервер 3(OpenVPN client2(buh)
                  |-----------------|                        |---------------------|
 Лок сеть 2       |172.16.135.10    |10.0.0.0/8              |       172.16.136.10 | Лок сеть 3
------------------|       10.1.14.2 |------------------------|10.4.49.2            |----------------
172.16.135.0/24   |-----------------|            |           |---------------------| 172.16.136.0/24
                                                 |
                                       |---------------------|
                                       |    10.4.46.2        | Лок сеть 2
                                       |         172.16.130.1|--------------------
                                       |---------------------| 172.16.130.0/24
                                       Сервер 1 (OpenVPN server)

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

Генерация ключей и сертификатов

Начальная инициализация

Выполняется 1 раз

Редактируем файл /etc/vars. Я, например поменял в нем только переменные

export KEY_COUNTRY="RU"
export KEY_PROVINCE="RUS"
export KEY_CITY="Vologda"
export KEY_ORG="MIAC"
export KEY_EMAIL="mnk@myhost.mydomain"

Вы можете использовать свои.

#. vars

Именно точка пробел vars

Очистка и инициализация папки ключей

#./clean-all

Создание master Certificate Authority (CA) certificate & key

Выполняется 1 раз
Генерация сертификата и ключа - ca.crt, ca.key

#. vars
#./build-ca

Генерация сертификата и ключа для сервера

Выполняется 1 раз

#. vars
#./build-key-server ServerName

ServerName - имя сервера. На некоторые доп вопросы можно ответить 2 раза "пусто", на 2 последних - "y":

Sign the certificate? [y/n]:y<br />
1 out of 1 certificate requests certified, commit? [y/n]y

В результате будет создан ключ ServerName.key, сертификат ServerName.crt, запрос Certificate Signing Request (CSR) ServerName.csr, ?непонятный файл? 01.pem (копия ServerName.csr)

Генерация Diffie Hellman parameters

Выполняется 1 раз, нужно только для tls-server

#. vars
#./build-dh

Работает около минуты, грузит CPU под 100% , генерит файл dh1024.pem

Генерация сертификатов и ключей клиентов

Выполняется по необходимости

#. vars
#./build-key uzo
#./build-key buh

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

Редактируем файл /etc/openvpn/server.conf
Каналу отдаем сеть 172.16.145.0

# На каком локальном IP адресе OpenVPN сервер будет работать.
# (не обязательный параметр)
local 10.4.46.2

# Порт на котором он будет работать
# Стандартный порт 1194, но мб и другой
port 1194

# TCP или UDP сервер?
proto udp

dev tun

#Пути до ключей
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/Server1.crt
key /etc/openvpn/keys/Server1.key  # This file should be kept secret

dh /etc/openvpn_tun/keys/dh1024.pem

# Сеть и маска соединения
server 172.16.145.0 255.255.255.0
# Если нужно, что бы клиентам выдавался один и тот же адрес при
# каждом соединениии
ifconfig-pool-persist ipp.txt
# Route для клиентов (используется такая маска, что бы можно было видеть все 
# локальные сети с адресами 172.16.ххх.ххх. параметры мб другими, например,
# push "route 172.16.130.0 255.255.248.0"
# тогда rout будет на сети 172.16.130.0-172.16.137.0)
push "route 172.16.0.0 255.255.0.0"
# Директория настройки файлов клиентов
client-config-dir /etc/openvpn_tun/ccd
# Route для того что бы сервер видел клиентов (см выше, но только для сервера)
route 172.16.0.0 255.255.0.0
# Для того что бы клиенты видели друг друга
client-to-client

# Проверка связи каждые 10 сек. Если в течении 120 сек
# ответа не будет, считается, что канал упал
keepalive 10 120

# Нужна ли компрессия соединения.
comp-lzo
# Максим кол-во клиентов
max-clients 100
# Группа и пользователь, от имени которых работает демон.
user nobody
group nobody

persist-key
persist-tun

# Куда писать статус лог.
status openvpn-status.log
# Куда писать  лог.
log        /var/log/openvpn/openvpn.log
# Уровень логирования
verb 4

Создаем директорию /etc/openvpn_tun/ccd
Создаем там 2 файла по имени ключа для клиента
Файл buh

iroute 172.16.136.0 255.255.255.0

Файл uzo

iroute 172.16.135.0 255.255.255.0

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

Копируем ключи buh.crt, buh.key, ca.crt на первый сервер в папку /etc/openvpn/keys
Копируем ключи uzo.crt, uzo.key, ca.crt на второй сервер в папку /etc/openvpn/keys
Редактируем или создаем файл /etc/openvpn/client.conf. Файлы на обоих серверах одинаковые, отличаются только ключами

client
;dev tap
dev tun
;proto tcp
proto udp
remote 10.4.46.2  1194
resolv-retry infinite
nobind
user nobody
group nobody
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/buh.crt
key /etc/openvpn/keys/buh.key
comp-lzo
verb 3

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

1.Должна быть включена маршрутизация

echo "1" > /proc/sys/net/ipv4/ip_forward

2.Открыть порт OpenVpn (в нашем случае 1194) на INPUT и FORWARD.
3.NAT не нужен, но если он нужен, то нужно исключить сети по назначению, например

iptables -t nat -A POSTROUTING -s 172.16.130.0/24 -d ! 172.16.0.0/16 -j SNAT --to-source 10.4.46.2

Настройка пользователей рабочих станций в локальных сетях

Для того, что бы все работало нормально и рабочие станции видели сети за туннелями (в том случае, если default route отличается (от 172.16.130.1 для сети за сервером), например для для инета), необходимо прописать статический роут на виндовых станциях.
Например, для сети за сервером (команда выполняется из cmd)

route -p add 172.16.0.0 MASK 255.255.0.0 172.16.130.1

Ключ -p необходим для того, что бы после перезагрузки маршрут сохранился

Заключение

Ну вот вроде и все. Запускаем демон на сервере, а потом на клиентах

#service openvpn start

И наслаждаемся работой каналов.