Настройка OpenVPN сервера: различия между версиями
Misha (обсуждение | вклад) (→Файл настройки сервера) |
Misha (обсуждение | вклад) (→Автоматический подъем канала на клиентах, при его падении.) |
||
(не показано 26 промежуточных версий 4 участников) | |||
Строка 1: | Строка 1: | ||
− | + | Вот очень хороший [http://forum.ixbt.com/topic.cgi?id=14:40906 документ] по настройке. | |
− | + | Еще большое спасибо '''vinni''' с forum.ixbt.com за статью и помощь в настройке, что сейчас и опишу. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==Задача== | ==Задача== | ||
− | + | Небходимо соеденить 3 локальных сети с одну, с помощью третей, которая соединяет все три Linux сервера. Смотри рисунок ниже. | |
<pre> | <pre> | ||
− | Сервер 2 (OpenVPN | + | Сервер 2 (OpenVPN client1(uzo) Сервер 3(OpenVPN client2(buh) |
|-----------------| |---------------------| | |-----------------| |---------------------| | ||
Лок сеть 2 |172.16.135.10 |10.0.0.0/8 | 172.16.136.10 | Лок сеть 3 | Лок сеть 2 |172.16.135.10 |10.0.0.0/8 | 172.16.136.10 | Лок сеть 3 | ||
Строка 22: | Строка 16: | ||
Сервер 1 (OpenVPN server) | Сервер 1 (OpenVPN server) | ||
</pre> | </pre> | ||
+ | '''Source(s):''' [http://www.downloadranking.com Настройка OpenVPN сервера] | ||
+ | ==Инсталяция== | ||
+ | Итак устанавливаем пакет openvpn со всеми зависимостями. | ||
+ | Копируем скрипты | ||
+ | <pre>cp /usr/share/openvpn/easy-rsa/2.0/* /etc/openvpn</pre> | ||
+ | Копируем конфигурационный файл настройки сервера | ||
+ | <pre>cp /usr/share/openvpn/sample-config-files/server.conf /etc/openvpn</pre> | ||
==Настройка сервера== | ==Настройка сервера== | ||
===Генерация ключей и сертификатов=== | ===Генерация ключей и сертификатов=== | ||
Строка 47: | Строка 48: | ||
#./build-key-server ServerName</pre> | #./build-key-server ServerName</pre> | ||
ServerName - имя сервера. На некоторые доп вопросы можно ответить 2 раза "пусто", на 2 последних - "y":<br /> | ServerName - имя сервера. На некоторые доп вопросы можно ответить 2 раза "пусто", на 2 последних - "y":<br /> | ||
− | <pre>Sign the certificate? [y/n]:y | + | <pre>Sign the certificate? [y/n]:y |
1 out of 1 certificate requests certified, commit? [y/n]y</pre> | 1 out of 1 certificate requests certified, commit? [y/n]y</pre> | ||
В результате будет создан ключ ServerName.key, сертификат ServerName.crt, запрос Certificate Signing Request (CSR) ServerName.csr, ?непонятный файл? 01.pem (копия ServerName.csr) | В результате будет создан ключ ServerName.key, сертификат ServerName.crt, запрос Certificate Signing Request (CSR) ServerName.csr, ?непонятный файл? 01.pem (копия ServerName.csr) | ||
+ | |||
====Генерация Diffie Hellman parameters==== | ====Генерация Diffie Hellman parameters==== | ||
Выполняется 1 раз, нужно только для tls-server | Выполняется 1 раз, нужно только для tls-server | ||
Строка 59: | Строка 61: | ||
Выполняется по необходимости | Выполняется по необходимости | ||
<pre>#. vars | <pre>#. vars | ||
− | #./build-key | + | #./build-key uzo |
− | #./build-key | + | #./build-key buh |
</pre> | </pre> | ||
+ | |||
===Файл настройки сервера=== | ===Файл настройки сервера=== | ||
Редактируем файл /etc/openvpn/server.conf<br> | Редактируем файл /etc/openvpn/server.conf<br> | ||
− | Каналу отдаем сеть 172.16. | + | Каналу отдаем сеть 172.16.142.0 |
<pre># На каком локальном IP адресе OpenVPN сервер будет работать. | <pre># На каком локальном IP адресе OpenVPN сервер будет работать. | ||
− | # (не обязательный параметр) | + | # (не обязательный параметр, если не установить будет работать на всех) |
local 10.4.46.2 | local 10.4.46.2 | ||
Строка 86: | Строка 89: | ||
# Сеть и маска соединения | # Сеть и маска соединения | ||
− | server 172.16. | + | server 172.16.142.0 255.255.255.0 |
# Если нужно, что бы клиентам выдавался один и тот же адрес при | # Если нужно, что бы клиентам выдавался один и тот же адрес при | ||
# каждом соединениии | # каждом соединениии | ||
Строка 92: | Строка 95: | ||
# Route для клиентов (используется такая маска, что бы можно было видеть все | # Route для клиентов (используется такая маска, что бы можно было видеть все | ||
# локальные сети с адресами 172.16.ххх.ххх. параметры мб другими, например, | # локальные сети с адресами 172.16.ххх.ххх. параметры мб другими, например, | ||
− | # push "route 172.16. | + | # push "route 172.16.128.0 255.255.240.0" |
− | # тогда | + | # тогда route будет на сети 172.16.128.0-172.16.143.254) |
− | push "route 172.16. | + | push "route 172.16.128.0 255.255.240.0" |
# Директория настройки файлов клиентов | # Директория настройки файлов клиентов | ||
client-config-dir /etc/openvpn_tun/ccd | client-config-dir /etc/openvpn_tun/ccd | ||
# Route для того что бы сервер видел клиентов (см выше, но только для сервера) | # Route для того что бы сервер видел клиентов (см выше, но только для сервера) | ||
− | route 172.16. | + | route 172.16.128.0 255.255.240.0 |
# Для того что бы клиенты видели друг друга | # Для того что бы клиенты видели друг друга | ||
client-to-client | client-to-client | ||
Строка 117: | Строка 120: | ||
persist-tun | persist-tun | ||
− | # Куда писать статус лог. | + | # Куда писать статус лог. Тут мы можем посмотреть кто законектился на сервер, |
+ | # с каким адресом и его route. | ||
status openvpn-status.log | status openvpn-status.log | ||
# Куда писать лог. | # Куда писать лог. | ||
Строка 123: | Строка 127: | ||
# Уровень логирования | # Уровень логирования | ||
verb 4</pre> | verb 4</pre> | ||
+ | По расчету маски подсети можно посмотреть [http://www.ispreview.ru/ipcalc.html калькулятор]. Очень удобная вещь.<br> | ||
Создаем директорию /etc/openvpn_tun/ccd<br> | Создаем директорию /etc/openvpn_tun/ccd<br> | ||
Создаем там 2 файла по имени ключа для клиента<br> | Создаем там 2 файла по имени ключа для клиента<br> | ||
+ | Файл '''buh''' | ||
+ | <pre>iroute 172.16.136.0 255.255.255.0</pre> | ||
+ | Файл '''uzo''' | ||
+ | <pre>iroute 172.16.135.0 255.255.255.0</pre> | ||
+ | |||
+ | ===Файлы настройки клиента=== | ||
+ | Копируем ключи '''buh.crt, buh.key, ca.crt''' на первый сервер в папку /etc/openvpn/keys <br> | ||
+ | Копируем ключи '''uzo.crt, uzo.key, ca.crt''' на второй сервер в папку /etc/openvpn/keys <br> | ||
+ | Редактируем или создаем файл /etc/openvpn/client.conf. Файлы на обоих серверах одинаковые, отличаются только ключами | ||
+ | <pre>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</pre> | ||
+ | ==Настройка фаервола== | ||
+ | 1.Должна быть включена маршрутизация | ||
+ | <pre>echo "1" > /proc/sys/net/ipv4/ip_forward</pre> | ||
+ | 2.Открыть порт OpenVpn (в нашем случае 1194) на INPUT и FORWARD.<br> | ||
+ | 3.NAT не нужен, но если он нужен, то нужно исключить сети по назначению, например | ||
+ | <pre>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</pre> | ||
+ | ==Настройка windows пользователей рабочих станций в локальных сетях== | ||
+ | Для того, что бы все работало нормально и рабочие станции видели сети за туннелями (в том случае, если default route отличается (от 172.16.130.1 для сети за сервером), например для для инета), необходимо прописать статический роут на виндовых станциях.<br> Например, для сети за сервером (команда выполняется из cmd) | ||
+ | <pre>route -p add 172.16.0.0 MASK 255.255.0.0 172.16.130.1</pre> | ||
+ | Ключ -p необходим для того, что бы после перезагрузки маршрут сохранился | ||
+ | |||
+ | ==Запуск клиентов.== | ||
+ | Ну вот вроде и все. Запускаем демон на сервере, а потом на клиентах | ||
+ | <pre>#service openvpn start</pre> | ||
+ | ==Автоматический подъем канала на клиентах, при его падении.== | ||
+ | Иногда бывает, что канал падает из-за пропадания связи между серверами.<br> | ||
+ | Я написал небольшой скрипт по проверке канала и его перезапуску, в случае падения.<br> | ||
+ | Создаем на клиентах файл '''etc/scripts/openvpn.sh'''. | ||
+ | <pre>#!/bin/bash | ||
+ | # Проверка OpenVPN соединения | ||
+ | if [ -z "`ifconfig tun0`" ]; then | ||
+ | service openvpn restart | ||
+ | echo "`date`" >> /etc/scripts/openvpn.bug | ||
+ | fi</pre> | ||
+ | А в файл '''/etc/crontab''' тоже на клиентах, добавляем следующую строку: | ||
+ | <pre># Проверка и поднятие OpenVPN | ||
+ | */5 * * * * root /etc/scripts/openvpn.sh</pre> | ||
+ | И теперь каждые 5 мин будет проверяться наличие канала, и если его нет, то происходит попытка его поднятия. | ||
+ | ==Низкая скорость канала== | ||
+ | Столкнулся с этой проблемой, когда перешел с канала, через который работал OpenVpn - со 100Мб до 30Мб<br /> | ||
+ | Вот [http://habrahabr.ru/post/246953/ тут] нашел решение.<br /> | ||
+ | Описывать подробно не буду, прочитаете сами.<br /> | ||
+ | ===Решение=== | ||
+ | ====Если у Вас связь через TCP и есть доступ к настоечным фалам клиента и сервера.==== | ||
+ | Добавляем строки в конфигурационные файлы клиента и сервера. | ||
+ | <pre>sndbuf 0 | ||
+ | rcvbuf 0</pre> | ||
+ | ====Если есть доступ только к серверу==== | ||
+ | Добавляем строки в конфигурационные файлы сервера. | ||
+ | <pre>sndbuf 0 | ||
+ | rcvbuf 0 | ||
+ | push "sndbuf 393216" | ||
+ | push "rcvbuf 393216"</pre> | ||
+ | ====Если у Вас связь через UDP и есть доступ к настоечным фалам клиента и сервера.==== | ||
+ | Добавляем строки в конфигурационные файлы клиента и сервера. | ||
+ | <pre>sndbuf 393216 | ||
+ | rcvbuf 393216 | ||
+ | push "sndbuf 393216" | ||
+ | push "rcvbuf 393216"</pre> |
Текущая версия на 10:13, 6 марта 2015
Вот очень хороший документ по настройке. Еще большое спасибо vinni с forum.ixbt.com за статью и помощь в настройке, что сейчас и опишу.
Содержание
- 1 Задача
- 2 Инсталяция
- 3 Настройка сервера
- 4 Настройка фаервола
- 5 Настройка windows пользователей рабочих станций в локальных сетях
- 6 Запуск клиентов.
- 7 Автоматический подъем канала на клиентах, при его падении.
- 8 Низкая скорость канала
Задача
Небходимо соеденить 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)
Source(s): Настройка OpenVPN сервера
Инсталяция
Итак устанавливаем пакет openvpn со всеми зависимостями. Копируем скрипты
cp /usr/share/openvpn/easy-rsa/2.0/* /etc/openvpn
Копируем конфигурационный файл настройки сервера
cp /usr/share/openvpn/sample-config-files/server.conf /etc/openvpn
Настройка сервера
Генерация ключей и сертификатов
Начальная инициализация
Выполняется 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 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.142.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.142.0 255.255.255.0 # Если нужно, что бы клиентам выдавался один и тот же адрес при # каждом соединениии ifconfig-pool-persist ipp.txt # Route для клиентов (используется такая маска, что бы можно было видеть все # локальные сети с адресами 172.16.ххх.ххх. параметры мб другими, например, # push "route 172.16.128.0 255.255.240.0" # тогда route будет на сети 172.16.128.0-172.16.143.254) push "route 172.16.128.0 255.255.240.0" # Директория настройки файлов клиентов client-config-dir /etc/openvpn_tun/ccd # Route для того что бы сервер видел клиентов (см выше, но только для сервера) route 172.16.128.0 255.255.240.0 # Для того что бы клиенты видели друг друга client-to-client # Проверка связи каждые 10 сек. Если в течении 120 сек # ответа не будет, считается, что канал упал keepalive 10 120 # Нужна ли компрессия соединения. comp-lzo # Максим кол-во клиентов max-clients 100 # Группа и пользователь, от имени которых работает демон. user nobody group nobody persist-key persist-tun # Куда писать статус лог. Тут мы можем посмотреть кто законектился на сервер, # с каким адресом и его route. 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
Настройка windows пользователей рабочих станций в локальных сетях
Для того, что бы все работало нормально и рабочие станции видели сети за туннелями (в том случае, если 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
Автоматический подъем канала на клиентах, при его падении.
Иногда бывает, что канал падает из-за пропадания связи между серверами.
Я написал небольшой скрипт по проверке канала и его перезапуску, в случае падения.
Создаем на клиентах файл etc/scripts/openvpn.sh.
#!/bin/bash # Проверка OpenVPN соединения if [ -z "`ifconfig tun0`" ]; then service openvpn restart echo "`date`" >> /etc/scripts/openvpn.bug fi
А в файл /etc/crontab тоже на клиентах, добавляем следующую строку:
# Проверка и поднятие OpenVPN */5 * * * * root /etc/scripts/openvpn.sh
И теперь каждые 5 мин будет проверяться наличие канала, и если его нет, то происходит попытка его поднятия.
Низкая скорость канала
Столкнулся с этой проблемой, когда перешел с канала, через который работал OpenVpn - со 100Мб до 30Мб
Вот тут нашел решение.
Описывать подробно не буду, прочитаете сами.
Решение
Если у Вас связь через TCP и есть доступ к настоечным фалам клиента и сервера.
Добавляем строки в конфигурационные файлы клиента и сервера.
sndbuf 0 rcvbuf 0
Если есть доступ только к серверу
Добавляем строки в конфигурационные файлы сервера.
sndbuf 0 rcvbuf 0 push "sndbuf 393216" push "rcvbuf 393216"
Если у Вас связь через UDP и есть доступ к настоечным фалам клиента и сервера.
Добавляем строки в конфигурационные файлы клиента и сервера.
sndbuf 393216 rcvbuf 393216 push "sndbuf 393216" push "rcvbuf 393216"