На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах, а, в свою очередь, админы имели удаленный доступ к ПК филиалов. В общем, много чего можно из этого выжать. И, естественно, должно быть шифрование и сжатие трафика стандартными средствами OpenVPN. Исходные данные:
# ./build-ca
Generating a 1024 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) [KG]:RU
State or Province Name (full name) [NA]:Rostov-on-Don
Locality Name (eg, city) [BISHKEK]:Zernograd
Organization Name (eg, company) [OpenVPN-TEST]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) []:server
Email Address [me@myhost.mydomain]:root@localhost
# ./build-key-server server
Generating a 1024 bit RSA private key
........++++++
.......................++++++
writing new private key to 'server.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) [KG]:RU
State or Province Name (full name) [NA]:Rostov-on-Don
Locality Name (eg, city) [BISHKEK]:Zernograd
Organization Name (eg, company) [OpenVPN-TEST]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) []:server
Email Address [me@myhost.mydomain]:root@localhost
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:Password
An optional company name []:server
Using configuration from /usr/local/share/doc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'Rostov-on-Don'
localityName :PRINTABLE:'Zernograd'
organizationName :PRINTABLE:'server'
organizationalUnitName:PRINTABLE:'server'
commonName :PRINTABLE:'server'
emailAddress :IA5STRING:'root@localhost'
Certificate is to be certified until Jan 1718:06:102019 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
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
........................................+.+.................+............
.......+.................................................................
..+.......+..............................................+...............
...........................................................+.....+.......
............+.....................+......................................
.........................................................................
..................................+...........+.............+....++*++*++
Выходим из shell
# exit
Создаем ключ для tls-аутентификации (который нужен как и серверу, так и клиенту)
Создаем конфигурационный файл нашего OpenVPN сервера.
//> ee /usr/local/etc/openvpn/server.conf
# порт на котором работает сервер
port 1194
# протокол - TCP или UDP
proto udp
# используемый тип устройства и номер
dev tun0
# указываем файл CA
ca /usr/local/etc/openvpn/keys/ca.crt
# указываем файл с сертификатом сервера
cert /usr/local/etc/openvpn/keys/server.crt
# указываем файл с ключем сервера
key /usr/local/etc/openvpn/keys/server.key
# указываем файл с генерированный алгоритмом Диффи Хеллмана
dh /usr/local/etc/openvpn/keys/dh1024.pem
# задаем IP-адрес сервера и маску подсети (виртуальной сети)
server 10.10.100.0255.255.255.0
# указываем внутренний DNS и WINS сервер
push "dhcp-option DNS 192.168.0.1"
push "dhcp-option WINS 192.168.0.1"
# задаем МАРШРУТ который передаём клиенту
# и маску подсети для того чтобы он "видел"
# сеть за OpenVPN сервером
# Офис
push "route 192.168.0.0255.255.255.0"
# Филиал №1
push "route 192.168.1.0255.255.255.0"
# Филиал №2
push "route 192.168.2.0255.255.255.0"
# Филиал №3
push "route 192.168.3.0255.255.255.0"
# указываем где хранятся файлы с
# настройками IP-адресов клиентов
client-config-dir ccd
# добавляем маршрут сервер-клиент
route 10.10.100.0255.255.255.252
# Филиал №1
route 192.168.1.0255.255.255.0
# Филиал №2
route 192.168.2.0255.255.255.0
# Филиал №3
route 192.168.3.0255.255.255.0
# делает сервер OpenVPN основным шлюзом
#push "redirect-gateway def1"
# разрешает видеть клиентам друг друга (по виртуальным IP)
#client-to-client
# разрешать подключаться с одинаковым сертификатом/ключом
#duplicate-cn
# включаем TLS аутификацию
tls-server
# указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента
tls-auth keys/ta.key 0
# таймаут до реконнекта
tls-timeout 120
auth MD5
# включаем шифрацию пакетов
cipher BF-CBC
# проверяет активность подключения каждые 10 секунд,
# если в течении 120 сек. нет ответа, подключение закрывается
keepalive 10120
# сжатие трафика
comp-lzo
# максимальное кол-во клиентов
max-clients 100
user nobody
group nobody
# не перечитывать ключи после получения
# SIGUSR1 или ping-restart
persist-key
# не закрывать и переоткрывать TUN\TAP
# устройство, после получения
# SIGUSR1 или ping-restart
persist-tun
# логирование
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
# уровень информации для отладки
# 0 -- quiet except for fatal errors.
# 1 -- mostly quiet, but display non-fatal network errors.
# 3 -- medium output, good for normal operation.
# 9 -- verbose, good for troubleshooting
verb 3
# макс кол-во однотипных записей в лог
#mute 20
Создаем директорию /var/log/openvpn/ и 2 файла где будут храниться логи