Привет!
Потребовалось мне недавно поднять OPVN на хостинге, для объединения сетей. Много всякиой литературы перечитал я, но так и не нашел подходящего решения (то, которое мне понравиться).
Захотелось сделать что-то свое :)
Далее будет пошаговое описание создания на своем сервере (со внешним IP) сервера, для объединени подсетей.
Для объединения решил использовать bridge режим openvpn, поэтому: СЛЕДИТЕ ЗА БЕЗОПАСНОСТЬЮ! Клиенты могут выставлять и свои ИП!! (а следовательно подсети могут пересекаться).
Для удобства, все оповещения о подключении/отключении отправляются на Telegram бота
Пошаговый процесс установки:
- ВСЕ ДЕЙСТВИЯ ДЕЛАЕМ ОТ ROOT!
- Ставим OpenVPN и easy-rsa:
apt-get install openvpn easy-rsa iptables bridge-utils python-configobj python-requests nano
- Перейдем в директорию OpenVPN и сделаем шаблонную директорию
cd /etc/openvpn
make-cadir easy-rsa
- Правим файл vars с основными настройками:
cd easy-rsa
nano vars - Ищем основные переменные, и заменяем их своими:
export KEY_COUNTRY="RU"
export KEY_PROVINCE="Samara"
export KEY_CITY="Samara"
export KEY_ORG="MySuper"
export KEY_EMAIL="admin@example.com"
export KEY_OU="IT"
export KEY_NAME="ovpnserver" - Проверяем, что мы еще в сертификатах и готовы создавать корень:
source vars
видим:NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/key
s
все отлично :) - Избавляемся от всего старого:
./clean-all
- Генерим корневые сертификаты:
./build-ca
просто нажимая несколько раз <enter>Generating a 2048 bit RSA private key
............+++
.............+++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [SAMARA]:
Locality Name (eg, city) [Samara]:
Organization Name (eg, company) [MySuper]:
Organizational Unit Name (eg, section) [OIT]:
Common Name (eg, your name or your server's hostname) [MySuper CA]:
Name [ovpnserver]:
Email Address [admin@example.com]:
- Создаем серверный сертификат:
./build-key-server ovpnserver
Что-то ввиде:Generating a 2048 bit RSA private key
...............................................................................+++
.......+++
writing new private key to 'ovpnserver.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [SAMARA]:
Locality Name (eg, city) [Samara]:
Organization Name (eg, company) [MySuper]:
Organizational Unit Name (eg, section) [OIT]:
Common Name (eg, your name or your server's hostname) [ovpnserver]:
Name [ovpnserver]:
Email Address [admin@example.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'SAMARA'
localityName :PRINTABLE:'Samara'
organizationName :PRINTABLE:'MySuper'
organizationalUnitName:PRINTABLE:'OIT'
commonName :PRINTABLE:'ovpnserver'
name :PRINTABLE:'ovpnserver'
emailAddress :IA5STRING:'admin@example.com'
Certificate is to be certified until Mar 20 05:43:50 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
- Генерируем ключи Диффи-Хеллмана:
./build-dh
- Генерируем подпись (для усиления способности сервера проверять целостность TSL):
openvpn --genkey --secret keys/ta.key
- Сгенерим сертификаты для клиентов данного сервера (можно один на всех):
./build-key
client1
нажимаем <enter> процессе:Generating a 2048 bit RSA private key
........................................................+++
..............................................+++
writing new private key to 'client1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [SAMARA]:
Locality Name (eg, city) [Samara]:
Organization Name (eg, company) [MySuper]:
Organizational Unit Name (eg, section) [OIT]:
Common Name (eg, your name or your server's hostname) [client1]:
Name [ovpnserver]:
Email Address [admin@example.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'SAMARA'
localityName :PRINTABLE:'Samara'
organizationName :PRINTABLE:'MySuper'
organizationalUnitName:PRINTABLE:'OIT'
commonName :PRINTABLE:'client1'
name :PRINTABLE:'ovpnserver'
emailAddress :IA5STRING:'admin@example.com'
Certificate is to be certified until Mar 20 05:50:56 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
- Так как у меня используется своя конфигурация, то качаем мои настройки и правим по себя:ovpn_scripts.tgz
- Мои скрипты работают с виртуальным интерфейсом
tap0
, поэтому нужно в файл/etc/network/interfaces
добавить его инициализацию:auto tap0
iface tap0 inet static
address 10.10.10.1
netmask 255.255.255.0
- Запускаем сервер:
systemctl start openvpn@cloud
- Убедимся, что сервер успешно запустился:
systemctl status openvpn@cloud
- Добавляем автоматический запуск:
systemctl enable openvpn@cloud
- Настраиваем клиентов и радуемся ;) (в качестве клиентов у меня с 10ок микротиков, поэтому описание их настройки приводить не буду :)
Основные замечания по настройкам:
- Все настройки хранятся в 2х файлах: cloud.conf и clients.settings
- Клиенты (в файле clients.conf) разделены на подсети! Им выдаются бесклассовые маски, которые включают себя (в данному случае) по 16 клиентов, которые могут общаться друг-с-другом.
- Следующие настройки определяют сервер:
network = 10.10.10. # Первые три числа сети
max_net_len = 16 # Размер сегмента, варианты 8 (6 клиентов), 16 - 14 клиентов, 32-30клиентов - ip_ext = x.x.x.x внешний адрес ovpn сервера
- [port-forward] - секция для проброса ip адресов в сеть
- Скрипты используют python2.7
- Демон openvpn запускается от root, но так проще править
iptables
, если это не нужно - используйтеsocat
- У меня отключена проверка сертификатов! Потому как мне это не нужно, у себя вы можете ее включить и тогда придется закидывать клиентам сертификат client1.
- _
Дополнительные настройки:
- включаем IP маршрутизацию в файле /etc/sysctl.conf :
net.ipv4.ip_forward=1
- Если провайдер использует виртуализацию OpenVZ, то необходимо узнать о возможности включения tun/tap устройств у службы поддержки
- _
No Leanote account? Sign up now.