ΠΠΎΠ±ΡΠΎΠ³ΠΎ!
ΠΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΡ ΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ, Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ.
Π‘ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ²ΠΎΠΈΠΌ ΡΠ΅ΡΡΠΌ Π½Π° ΠΏΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠΈ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΠΉΠ’ΠΈΡΠ½ΠΈΠΊ.
ΠΠ΅Π½Ρ, ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ
, ΡΡΠ° ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ Π½Π°ΠΊΡΡΠ»Π° Ρ Π³ΡΠΈΡΠΎΠΌ βΠ²ΡΠ΅ΡΠ°β. ΠΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π² Π²ΡΠ΅ Β«Π·Π°Β» ΠΈ Β«ΠΏΡΠΎΡΠΈΠ²Β», Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π»ΠΎΠΏΠ°ΡΠΈΠ² ΡΠΎΠ½Π½Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈ ΠΏΠΎΠΊΠΎΠ²ΡΡΡΠ²ΡΠΈΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π² ΡΠ΅ΠΎΡΠΈΠΈ, Ρ ΡΠ΅ΡΠΈΠ» ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅.
Π ΡΠ΅Π»ΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, Π±ΡΠ» Π²ΡΠ±ΡΠ°Π» OpenVPN Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ: Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Windows Server 2012 Π±ΡΠ»Π° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π°, Π½Π° Π½Π΅ΠΉ ΡΠ°ΠΊΠΆΠ΅, Windows Server 2012, Π° Π½Π° Π½Π΅ΠΌ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠ΅ΡΠ²Π΅Ρ OpenVPN, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΡΡΠΊΠ°Π» ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π» ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ.
ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΎΠ±Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ Β«ΡΠ΅ΡΠ²Π΅Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈΒ». ΠΠ°Π»Π΅Π΅, Π²Π·ΡΠ» ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π·Π°ΡΠΎΠ»ΠΊΠ½ΡΠ» Π΅Π³ΠΎ Π² Mikrotik, Π° Π½Π° ΡΠ°ΠΌΠΎΠΌ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΎΡΠ΅ Mikrotik ΠΏΠΎΠ΄Π½ΡΠ» OpenVPN Ρ ΡΡΠ΅ΡΠ½ΡΠΌΠΈ Π·Π°ΠΏΠΈΡΡΠΌΠΈ, ΠΏΡΠΎΡΠΈΠ»ΡΠΌΠΈ. ΠΠ»Ρ Π²ΡΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΠ΅ΡΠ²Π΅Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π°Ρ ΠΎΠ²Π°Ρ, ΠΈ, Ρ ΠΎΡΡ Π½Π° ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠΎΠ΅Π³ΠΎ ΠΎΠΏΡΡΠ° Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Π²Π΅ΡΠ°Ρ Π±ΡΠ»ΠΎ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, Π½Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, Π² Π²ΠΎΠΏΡΠΎΡΠ°Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΡΡΠΎ Π±ΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΌΠΎΠ΅ ΠΏΠ»ΠΎΡ ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
ΠΠ°Π½Π½Π°Ρ ΡΠ²ΡΠ·ΠΊΠ° ΠΏΠΎΡΠ°Π±ΠΎΡΠ°Π»Π° ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΈ ΠΌΠ½Π΅ Π±ΡΠ»Π° Π²ΡΠ΄Π°Π½Π° Π½ΠΎΠ²Π°Ρ Π²Π²ΠΎΠ΄Π½Π°Ρ: ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° Linux, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ²ΡΠ·Ρ Ρ Mikrotik ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ β ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΡΡΡΠ°Π΄Π°ΡΡ.
ΠΠΎΠΈ Π·Π½Π°Π½ΠΈΡ ΠΏΠΎ Linux Π½Π° ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π»ΠΈΡΡ Π½Π° Ubuntu 16.04LTS Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΠΌΠΈΠ½Π°Π» Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎ RDP ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ Windows. Π’ΠΎ Π΅ΡΡΡ, sudo apt-get -f install -y, ΠΈ Π½ΠΈ ΡΠ°Π½ΡΠΈΠΌΠ΅ΡΡΠ° Π±ΠΎΠ»ΡΡΠ΅.
ΠΠ·ΡΡΠΈΠ² Π²ΠΎΠΏΡΠΎΡ, ΠΊΠ°ΠΊΠ°Ρ OS ΠΈΠ· Linux ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠΉΡΠΈΠ²Π° ΠΈ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½Π° Π΄Π»Ρ ΠΌΠΎΠ΅ΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ, Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΡΡ Π½Π° CentOS 7 Minimal.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Ρ ΡΠ΅ΡΠΈΠ» Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΊΠΎΠΏΠ°ΡΡΡΡ Π² ΡΠ΅ΠΎΡΠΈΠΈ, ΠΏΠΎΠ½ΡΡΡ ΠΊΠ°ΠΊ ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΡΡΡΠΎΠ΅Π½ΠΎ ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠΎΡΠΌΠΎΡΡΠ΅Π» Π²ΠΈΠ΄Π΅ΠΎ ΡΡΠΎΠΊΠΈ Π½Π° ΠΊΠ°Π½Π°Π»Π΅
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Ρ Π·Π°ΠΏΡΡΡΠΈΠ» Π½Π° ΡΠ²ΠΎΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠ΅ Hyper-V, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» ΡΡΠ΄Π° CentOS 7 Minimal, Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠΎΠ·Π΄Π°Π» ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Admin ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΊΡΡΠ» ssh Π΄Π»Ρ root. ΠΠΎΠΏΡΠΎΡΠ°Π²ΡΠΈΡΡ Ρ ΠΊΡΠ°ΡΠΈΠ²ΡΠΌ ΡΠ°Π·Π½ΠΎΡΠ²Π΅ΡΠ½ΡΠΌ ΡΠΊΡΠ°Π½ΠΎΠΌ, ΠΏΠΎΠ³ΡΡΠ·ΠΈΠ»ΡΡ Π² ΡΠ΅ΡΠ½ΠΎ-Π±Π΅Π»ΡΠΉ ΠΌΠΈΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°.
ΠΡΠΌΠ°Ρ, Π½Π΅Ρ ΡΠΌΡΡΠ»Π° ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠΎΡΡΠ°, Π»ΡΡΡΠ΅ Π·Π°ΠΎΡΡΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΊΡΠΈΠΏΡ (ΠΎΠ½ ΠΏΠΎΠ΄ ΠΊΠ°ΡΠΎΠΌ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΡΡΠΈΠ»ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅, Π½ΠΎ Π² ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° Ρ Π²ΡΠ΅ ΡΡΠΎ Π΄Π΅Π»Π°Π», ΡΡΠΎΠ³ΠΎ ΡΠΊΡΠΈΠΏΡΠ° Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ, Π²ΡΠ΅ Π΄Π΅Π»Π°Π»ΠΎΡΡ Π²ΠΏΠ΅ΡΠ²ΡΠ΅, Π½Π° ΠΎΡΡΠΏΡ ΠΈ Π½Π°ΡΠ³Π°Π΄).
Π ΡΠΊΡΠΈΠΏΡΠ΅ Ρ ΠΏΠΎΡΡΠ°ΡΠ°Π»ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΡΡΠΈΠ»ΠΈΡ Π΄Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Selinux, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Epel, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ OpenVPN, ΠΈ ΠΏΡ. ΠΠΈΠΆΠ΅ ΡΠ°ΠΌ ΡΠΊΡΠΈΠΏΡ, ΠΎΠ½ ΠΏΡΠΎΡΡΠΎΠΉ, Π½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. Π Π°Π·Π±ΠΈΡΠ°ΡΡ Π΅Π³ΠΎ Π½Π΅ Π±ΡΠ΄Ρ, Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΊΠΎΠΌΡ-ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΏΠΈΡΠΈΡΠ΅ ΠΎΡΠ²Π΅ΡΡ.
ΠΠΎΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠ° ΠΏΠΎΡΠ²ΠΈΡΡΡΡ ΡΠΆΠ΅ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ OpenVPN, ΠΏΠΎΠ΄ΠΌΠΈΠ³ΠΈΠ²Π°ΡΡΠΈΠΉ Π·Π΅Π»Π΅Π½ΡΠΌ Π³Π»Π°Π·ΠΎΠΌ.
#!/bin/bash
cd /etc/sysconfig/
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' selinux
sudo setenforce 0
cd /home/Admin
sudo yum update -y
sudo yum install epel-release -y
sudo yum install mc -y
sudo yum install nano -y
sudo cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax
sudo yum install chrony -y
sudo systemctl start chronyd
sudo systemctl enable chronyd
sudo yum install net-tools -y
sudo yum install iftop -y
sudo yum install htop -y
sudo yum install lsof -y
sudo yum install dos2unix -y
sudo yum install wget -y
sudo yum install tcpdump -y
sudo yum install openvpn -y
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.3/EasyRSA-3.0.3.tgz
sudo tar -xvzf EasyRSA-3.0.3.tgz
sudo chown -R Admin:Admin /var/log
sudo chmod 755 /var/log
mkdir /var/log/openvpn
mkdir /etc/openvpn/ccd
sudo chown -R Admin:Admin /etc/openvpn/ccd
sudo chown -R Admin:Admin /var/log/openvpn
chmod 755 /etc/openvpn/ccd
chmod 755 /var/log/openvpn
echo >/var/log/openvpn/openvpn-status.log
echo >/var/log/openvpn/openvpn.log
sudo chown -R Admin:Admin /etc/resolv.conf
chmod 755 /etc/resolv.conf
echo nameserver 8.8.8.8 >>/etc/resolv.conf
cd /etc/openvpn/
sudo /home/Admin/EasyRSA-3.0.3/easyrsa init-pki
sudo chown -R Admin:Admin /etc/openvpn
chmod 755 /etc/openvpn
echo set_var EASYRSA_DN "org" >/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_REQ_COUNTRY "RU" >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_KEY_SIZE 4096 >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_REQ_PROVINCE "LIP" >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_REQ_CITY "Lipetsk" >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_REQ_ORG "Cool-Admin" >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_REQ_EMAIL "xxx.ru" >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_REQ_OU "Our_ORG" >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_REQ_CN "changeme" >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_CERT_EXPIRE 3650 >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_DH_KEY_SIZE=2048 >>/home/Admin/EasyRSA-3.0.3/test
sudo /home/Admin/EasyRSA-3.0.3/easyrsa build-ca nopass
sudo /home/Admin/EasyRSA-3.0.3/easyrsa build-server-full Serv nopass
sudo /home/Admin/EasyRSA-3.0.3/easyrsa build-client-full Client1 nopass
sudo /home/Admin/EasyRSA-3.0.3/easyrsa --vars=vars gen-dh
sudo /home/Admin/EasyRSA-3.0.3/easyrsa --vars=vars gen-crl
mkdir keys
sudo chown -R Admin:Admin /etc/openvpn/keys
chmod 755 /etc/openvpn/keys
sudo cp /etc/openvpn/pki/ca.crt /etc/openvpn/keys
sudo cp /etc/openvpn/pki/dh.pem /etc/openvpn/keys
sudo cp /etc/openvpn/pki/crl.pem /etc/openvpn/keys
sudo cp /etc/openvpn/pki/issued/Serv.crt /etc/openvpn/keys
sudo cp /etc/openvpn/pki/private/Serv.key /etc/openvpn/keys
echo port 443 >/etc/openvpn/server.conf
echo proto udp >>/etc/openvpn/server.conf
echo dev tun >>/etc/openvpn/server.conf
echo ca /etc/openvpn/keys/ca.crt >>/etc/openvpn/server.conf
echo cert /etc/openvpn/keys/Serv.crt >>/etc/openvpn/server.conf
echo key /etc/openvpn/keys/Serv.key >>/etc/openvpn/server.conf
echo dh /etc/openvpn/keys/dh.pem >>/etc/openvpn/server.conf
echo crl-verify /etc/openvpn/keys/crl.pem >>/etc/openvpn/server.conf
echo client-config-dir /etc/openvpn/ccd >>/etc/openvpn/server.conf
echo topology subnet >>/etc/openvpn/server.conf
echo server 172.21.0.0 255.255.255.0 >>/etc/openvpn/server.conf
echo route 172.21.0.0 255.255.255.0 >>/etc/openvpn/server.conf
echo push "dhcp-option DNS 8.8.8.8" >>/etc/openvpn/server.conf
echo push "dhcp-option DNS 8.8.4.4" >>/etc/openvpn/server.conf
echo keepalive 10 120 >>/etc/openvpn/server.conf
echo persist-key >>/etc/openvpn/server.conf
echo persist-tun >>/etc/openvpn/server.conf
echo status /var/log/openvpn/openvpn-status.log >>/etc/openvpn/server.conf
echo log-append /var/log/openvpn/openvpn.log >>/etc/openvpn/server.conf
echo verb 2 >>/etc/openvpn/server.conf
echo mute 20 >>/etc/openvpn/server.conf
echo daemon >>/etc/openvpn/server.conf
echo mode server >>/etc/openvpn/server.conf
echo user nobody >>/etc/openvpn/server.conf
echo group nobody >>/etc/openvpn/server.conf
sudo chown -R Admin:Admin /etc/sysctl.conf
chmod 755 /etc/sysctl.conf
echo net.ipv4.ip_forward=1 >>/etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
sudo systemctl enable openvpn@server
sudo systemctl start openvpn@server
sudo systemctl status openvpn@server
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° OpenVPN ΠΏΡΠΎΡΠ»Π° Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
ΠΠ΅ Π·Π½Π°Ρ ΠΏΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΏΡΠ°Π² Π½Π° Linux ΡΠΈΡΡΠ΅ΠΌΠ°Ρ , Ρ ΠΏΠΎΡΡΠ°ΡΠΈΠ» ΠΌΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΎΠ² ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌ ΡΠ°ΠΉΠ»Π°ΠΌ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ ΠΏΡΠ°Π².
ΠΠΎΠ³Π΄Π° ΠΊΠ½ΠΎΠΏΠΊΠ° OpenVPN ΡΡΠ°Π»Π° Π·Π΅Π»Π΅Π½ΠΎΠΉ, Ρ ΠΎΡΠ΅Π½Ρ ΠΎΠ±ΡΠ°Π΄ΠΎΠ²Π°Π»ΡΡ, Π½ΠΎ ΠΊΠ°ΠΊ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠ°Π»ΠΎ. ΠΠΎ ΠΏΡΠΎΡΡΠΎΡΠ΅ Π΄ΡΡΠ΅Π²Π½ΠΎΠΉ, Ρ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π» ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΡΠ½Π΅Π²ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΠΈ ΡΠ°ΠΉΠ» crl.pem, Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π²ΡΠ΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π ΠΈΡΠΎΠ³Π΅, ΠΌΠ½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΠ»ΠΎΡΡ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π° Windows ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ:
Serv.crt β Π‘Π΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°
Serv.key β ΠΠ»ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°
Ca.crt β ΠΠΎΡΠ½Π΅Π²ΠΎΠΉ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ
Ca.key β ΠΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΊΠ»ΡΡ
Crl.pem β Π€Π°ΠΉΠ» ΠΎΡΠΎΠ·Π²Π°Π½Π½ΡΡ
ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ²
Dh.pem β ΠΊΠ»ΡΡΒ ΠΠΈΡΡΠΈ-Π₯Π΅Π»Π»ΠΌΠ°Π½Π°
Index.txt β Π€Π°ΠΉΠ» Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎΠ± Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΡ
ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°Ρ
Serial β ΠΎΠ½ ΡΠΎΠΆΠ΅ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ²
Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»Π°ΡΡ ΠΏΠ°ΠΏΠΊΠ° certs_by_serial, ΡΠ°ΠΉΠ» vars, ΠΈ Π²ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ ΠΊΠ»ΡΡΠΈ ΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ.
ΠΠ° Mikrotik ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΠΎΡΡΠ°Π²Π°Π»ΠΈΡΡ Π½Π° ΠΌΠ΅ΡΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ.
ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ ΠΎΡΠΎΠ·Π²Π°ΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ, ΡΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΎΡ ΡΠ»ΠΎΠ²Π° ΡΠΎΠ²ΡΠ΅ΠΌ β ΡΠ°ΠΉΠ» index.txt Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π² ΡΠΎΡΠΌΠ°Ρ unix, Π° Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ°Π·Ρ Π½Π΅ ΡΠ΄Π΅Π»Π°Π». ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ ΡΡΠΈΠ»ΠΈΡΠΎΠΉ dos2unix.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΠΎΡΠ·ΡΠ²Π°Π»ΠΈΡΡ, Π½ΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Mikrotik Π½Π΅ Π·Π½Π°Π» ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΎΡΠΎΠ·Π²Π°Π½Ρ ΠΈ Π΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΊΠ°ΠΊ-ΡΠΎ ΠΎΠ± ΡΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠΈΡΡ.
ΠΡΠΎΡΠΈΡΠ°Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠΊΠΎΠ½ΡΡΠ»ΡΡΠΈΡΠΎΠ²Π°Π²ΡΠΈΡΡ Ρ ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΠΎΠΌ ΠΠ Π (ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ!), Ρ ΠΏΠΎΠ΄Π½ΡΠ» Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΡΠΎΡΡΠΎΠΉ http ΡΠ΅ΡΠ²Π΅Ρ Apache ΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Π½Π° Π½Π΅ΠΌ ΡΠ°ΠΉΠ» ΠΎΡΠΎΠ·Π²Π°Π½Π½ΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ². ΠΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΊΡΡΠ» ΠΊ Π½Π΅ΠΌΡ Π΄ΠΎΡΡΡΠΏ, ΠΊΡΠΎΠΌΠ΅ ΠΊΠ°ΠΊ ΠΊ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ip.
Π ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ Mikrotik, Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ /System/Certificates/CRL ΡΠΊΠ°Π·Π°Π» ΠΏΡΡΡ ΠΊ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠΌΡ crl.pem. Π’ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΎΡΠ½ΠΈΡΡ, ΡΡΠΎ Mikrotik ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π»Ρ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ CRL ΡΠΎΠ»ΡΠΊΠΎ http ΠΈ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΉ Π°Π΄ΡΠ΅Ρ, Ρ.Π΅. Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΠΎΡ ΡΠ°ΠΊ:
ΠΡΠ΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΉ 6.4.2.Ρ
RouterOS, Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΡΠΊΠ°ΠΌΠΈ, ΠΈ ΡΡΠΎ Π΄Π»Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ»ΠΎ ΠΏΡΠΈΡΠΊΠΎΡΠ±Π½ΠΎ ΠΈ Π²ΡΠ·ΡΠ²Π°Π»ΠΎ ΠΌΠ°ΡΡΡ Π½Π΅ΡΠ΄ΠΎΠ±ΡΡΠ². ΠΠΎΠ³Π΄Π° ΡΠ΅ΡΠ΅Π· Π½Π΅Π΄Π΅Π»Ρ ΠΌΠ½Π΅ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΡΡΠ΄ΠΊΠ° 50 ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², Ρ ΡΠ΅ΡΠΈΠ» ΡΡΠΊΠΎΡΠΈΡΡ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΊΡΡΠΎΡΠ΅ΠΊ ΡΡΠΆΠΎΠ³ΠΎ ΡΠΊΡΠΈΠΏΡΠ°, Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π° ΠΏΡΠΎΡΡΠΎΡΠ°Ρ
ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°.
Π‘ΠΊΡΠΈΠΏΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊ: ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Β«ΠΈΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°Β», ΠΎΡΠ²Π΅ΡΠ°Π΅ΠΌ Π½Π° Π²ΠΎΠΏΡΠΎΡ Β«ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ°ΡΠΎΠ»Ρ ΠΈΠ»ΠΈ Π½Π΅ΡΒ», ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π·Π°Π±ΠΈΡΠ°Π΅ΠΌ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Β«ΠΊΠ»ΠΈΠ΅Π½Ρ.ovpnΒ», Ρ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π² Π½Π΅Π³ΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°ΠΌΠΈ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ. Π§ΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π½Π°Π΄ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ /etc/openvpn. Π― ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΡΡΠΎΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π° ΡΠ²ΠΎΠΉ. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΡΡΠΎ-Π±Ρ ΡΠΊΡΠΈΠΏΡ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΠ» ΠΈΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
#!/bin/bash
function newClient () {
echo ""
echo "Tell me a name for the client."
echo "Use one word only, no special characters."
until [[ "$CLIENT" =~ ^[a-zA-Z0-9_]+$ ]]; do
read -rp "Client name: " -e CLIENT
done
echo ""
echo "Do you want to protect the configuration file with a password?"
echo "(e.g. encrypt the private key with a password)"
echo " 1) Add a passwordless client"
echo " 2) Use a password for the client"
until [[ "$PASS" =~ ^[1-2]$ ]]; do
read -rp "Select an option [1-2]: " -e -i 1 PASS
done
#cd /etc/openvpn/easy-rsa/ || return
case $PASS in
1)
sudo /home/admin/EasyRSA-3.0.3/easyrsa build-client-full "$CLIENT" nopass
;;
2)
echo "You will be asked for the client password below"
./easyrsa build-client-full "$CLIENT"
;;
esac
# Generates the custom client.ovpn
cp /etc/openvpn/client-template.txt "$home/home/admin/IT/Temp/$CLIENT.ovpn"
#ΠΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ
ΡΠ°Π½ΠΈΡΡΡ ΡΠ°ΠΉΠ» Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
#ΠΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
{
echo "<ca>"
cat "/etc/openvpn/pki/ca.crt" #ΠΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°
echo "</ca>"
echo "<cert>"
awk '/BEGIN/,/END/' "/etc/openvpn/pki/issued/$CLIENT.crt" #ΠΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌ #ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
echo "</cert>"
echo "<key>"
cat "/etc/openvpn/pki/private/$CLIENT.key" #ΠΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
echo "</key>"
} >> "$home/home/admin/IT/Temp/$CLIENT.ovpn" #ΠΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΡΠ°ΠΉΠ» #ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
echo ""
echo "Client $CLIENT added, the configuration file is available at $home/admin/IT/OVPN/Temp/$CLIENT.ovpn."
echo "Download the .ovpn file and import it in your OpenVPN client."
exit 0;
}
newClient
Π§Π΅ΡΠ΅Π· Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π½ΠΎΠ²Π°Ρ Π²Π²ΠΎΠ΄Π½Π°Ρ Π½Π° Π·Π°ΠΏΡΠ΅Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° Π²ΡΠ½ΡΠ΄ΠΈΠ»Π° ΡΠ±ΠΈΡΡ ΠΈ ΡΡΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ, ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡΡΡ ΡΠ²ΡΠ·ΠΊΡ Ρ Mikrotik. ΠΡΠ» ΡΠΎΠ·Π΄Π°Π½ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ OpenVPN, Π΄Π»Ρ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² IT-ΠΎΡΠ΄Π΅Π»Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π° CentOS. ΠΠΎ ΡΡΠΎ ΡΠΆΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌ Π΄ΡΡΠ³Π°Ρ ΠΈΡΡΠΎΡΠΈΡ.
ΠΡΡΠ°ΠΆΠ°Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΎΡΡΡ ΠΠ²Π°Π½Ρ ΠΈ ΠΠ°Π²Π»Ρ Π·Π° ΠΏΠΎΠΌΠΎΡΡ Π² ΡΠ΅Π΄Π°ΠΊΡΠΈΠΈ ΡΡΠ°ΡΡΠΈ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com