На сервере Openvpn
1 |
sudo apt install openvpn -y |
На сервере CA
1 2 3 4 |
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.2.1/EasyRSA-3.2.1.tgz tar -xvzf EasyRSA-3.2.1.tgz && rm EasyRSA-3.2.1.tgz chmod 700 EasyRSA-3.2.1 cd EasyRSA-3.2.1 |
В каталоге EasyRSA Создать файл «vars»
1 2 3 4 5 6 7 8 |
set_var EASYRSA_REQ_COUNTRY "RUS" set_var EASYRSA_REQ_PROVINCE "Moscow" set_var EASYRSA_REQ_CITY "Moscow City" set_var EASYRSA_REQ_ORG "Our Company Name" set_var EASYRSA_REQ_EMAIL "sysadmin@company.ru" set_var EASYRSA_REQ_OU "LLC" set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512" |
Создать корневой сертификат и сертификат для OpenVPN:
(Для второго понадобится passphrase от первого)
1 2 |
./easyrsa init-pki && ./easyrsa build-ca nopass ./easyrsa build-server-full server nopass |
dh.pem сертификат нужно создать, даже если он не будет использоваться:
1 |
openssl dhparam -out /etc/openvpn/dh.pem 2048 |
На сервере OpenVPN
Скопировать файлы сертификатов в каталог Openvpn:
1 |
sudo scp -P 22 user@CA:/home/user/EasyRSA-3.2.1/{pki/ca.crt,pki/issued/server.crt,pki/private/server.key} /etc/openvpn/server/ |
Создать /etc/openvpn/server.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
port 1194 #proto tcp proto udp dev tun ca ca.crt dh dh.pem cert server.crt key server.key server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" cipher AES-256-CBC ;client-to-client keepalive 10 120 persist-key persist-tun user nobody group nogroup verb 3 |
Настраиваем IP форвардинг и iptables:
1 2 3 4 5 |
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p iptables -t nat -A POSTROUTING --src 10.8.0.0/8 -o enp0s3 -j MASQUERADE iptables -A FORWARD -s 10.8.0.0/8 -j ACCEPT iptables -A INPUT -p tcp --dport 1194 -j ACCEPT |
Проверка:
1 2 3 |
sudo systemctl start openvpn@server sudo systemctl status openvpn@server nc -zv -u 192.168.0.100 1194 |
Создание клиентов на сервере Openvpn
На сервере CA
Создать ключ клиента и скопировать его на сервер OpenVPN (команда ниже):
1 |
./easyrsa build-client-full client1 nopass |
На сервере OpenVPN:
1 2 |
mkdir -p ~/client-configs/keys # Каталог для ключей клиентов mkdir -p ~/client-configs/files # Каталог для конфигов |
Создать шаблон конфига ~/client-configs/base.conf:
1 2 3 4 5 6 7 8 9 10 11 12 |
client dev tun #proto tcp proto udp remote YOUR_SERVER_IP 1194 resolv-retry infinite nobind persist-key persist-tun cipher AES-256-CBC auth-nocache verb 3 |
Скопировать ключи клиента и ca:
1 2 3 4 |
scp -P 22 user@CA:/home/user/EasyRSA-3.2.1/{pki/issued/client1.crt,pki/private/client1.key} /home/user/client-configs/keys/ sudo cp /etc/openvpn/server/ /home/user/client-configs/keys/ sudo chmod -R 700 ~/client-configs sudo chown user:user -R ~/client-configs |
Создать скрипт создания конфига ~/client-configs/make_config.sh:
(добавление tls закоментировано)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/bin/bash # First argument: Client identifier KEY_DIR=~/client-configs/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/client-configs/base.conf cat ${BASE_CONFIG} \ <(echo -e '<ca>') \ ${KEY_DIR}/ca.crt \ <(echo -e '</ca>\n<cert>') \ ${KEY_DIR}/${1}.crt \ <(echo -e '</cert>\n<key>') \ ${KEY_DIR}/${1}.key \ # <(echo -e '</key>\n<tls-crypt>') \ # строка заменена на следующую <(echo -e '</key>') \ # ${KEY_DIR}/ta.key \ # <(echo -e '</tls-crypt>') \ > ${OUTPUT_DIR}/${1}.ovpn |
Сделать файл исполняемым, созданный client.ovpn использовать на клиенте:
1 2 |
sudo chmod 700 ~/client-configs/make_config.sh ~/client-configs/make_config.sh client1 |