Установка и настройка OpenVPN на Linux CentOS 7 для доступа к Интернет

Всвязи с современными тенденциями наличие своего VPS-VPN-сервера уже является не чем-то странным, а необходимостью.

Арендуем у хостера самый дешевый VPS, устнанавливаем Centos 7 и начинаем

Обновляем установленные пакеты:

yum update

Установим правильную временную зону:

cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

* в данном примере московское время.

Устанавливаем сервис для синхронизации времени:

yum install chrony

Разрешаем автозапуск службы chrony и запускаем ее:

systemctl enable chronyd

systemctl start chronyd

Отключаем Selinux:

setenforce 0

Чтобы Selinux не включился после перезагрузки, откроем данный файл:

vi /etc/selinux/config

И отредактируем строчку SELINUX=enforcing на:

SELINUX=disabled

Создаем правило для firewalld:

firewall-cmd —permanent —add-port=443/udp

* в данной инструкции мы настроим работу OpenVPN на порту 443 по UDP. Если в вашем случае необходим другие порт и протокол, меняем значения на соответствующие.

… и применяем его:

firewall-cmd —reload

* если используется iptables, правило создаем командой iptables -I 1 INPUT -p udp —dport 443 -j ACCEPT, где 443 — порт, который мы будем использовать для openvpn.

Устанавливаем репозиторий epel:

yum install epel-release

Устанавливаем необходимые пакеты следующей командой:

yum install openvpn easy-rsa

В основе идеи VPN лежит шифрование трафика, а значит для его работы необходимы сертификаты.

Переходим в каталог easy-rsa:

cd /usr/share/easy-rsa/3

* в зависимости от версии easy-rsa, последний каталог может быть другим. Увидеть точное название каталога можно командой ls  /usr/share/easy-rsa/.

Чтобы упростить и ускорить процесс создания ключей, создаем следующий файл:

vi vars

export KEY_COUNTRY=»RU«
export KEY_PROVINCE=»Sankt-Petersburg«
export KEY_CITY=»Sankt-Petersburg«
export KEY_ORG=»SPPEC COMPANY«
export KEY_EMAIL=»master@sppec.ru«
export KEY_CN=»SPPEC«
export KEY_OU=»SPPEC«
export KEY_NAME=»name-openvpn-server.sppec.ru«
export KEY_ALTNAMES=»name-openvpn-server»

* где KEY_CN и KEY_OU: рабочие подразделения (например, можно указать название отдела); KEY_NAME: адрес, по которому будет выполняться подключение (можно указать полное наименование сервера); KEY_ALTNAMES — альтернативный адрес.
* так как мы генерируем самоподписный сертификат, значения данных полей никак не повлияют на работу OpenVPN, однако, для удобства, лучше подставить реальные данные.

Запускаем созданный файл на исполнение:

 ./vars

Инициализируем PKI:

./easyrsa init-pki

Мы должны увидеть:


init-pki complete; you may now create a CA or requests.

… а в текущем каталоге появится папка pki.

Генерируем корневой сертификат:

./easyrsa build-ca

… после ввода Enter обязательно задаем пароль дважды. На запрос ввести Common Name можно просто нажать ввод или написать свое имя:

Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

Создаем ключ Диффи-Хеллмана:

./easyrsa gen-dh

Для создания сертификата сервера необходимо сначала создать файл запроса:

./easyrsa gen-req vpn-server nopass

* на запрос ввода Common Name просто вводим Enter, чтобы использовать настройку из файла vars; nopass можно упустить, если хотим повысить безопасность с помощью пароля на сертификат.

… и на его основе — сам сертификат:

./easyrsa sign-req server vpn-server

После ввода команды подтверждаем правильность данных, введя yes:

  Confirm request details: yes

… и вводим пароль, который указывали при создании корневого сертификата.

Для создания ta ключа используем команду:

openvpn —genkey —secret pki/ta.key

Сертификаты сервера готовы и находятся в каталоге pki.

Создаем каталог в /etc/openvpn, в котором будем хранить сертификаты:

mkdir /etc/openvpn/keys

Копируем в него содержимое каталога pki:

cp -r pki/* /etc/openvpn/keys/

Создаем конфигурационный файл:

vi /etc/openvpn/server.conf

И вставляем в него следующее:

local 192.168.0.15
port 443
proto udp
dev tun
ca keys/ca.crt
cert keys/issued/vpn-server.crt
key keys/private/vpn-server.key
dh keys/dh.pem
tls-auth keys/ta.key 0
server 172.16.10.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
max-clients 32
client-to-client
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 0
mute 20
daemon
mode server
tls-server
comp-lzo

* где из всех параметров, обязательно, внести изменения нужно в следующие — local: IP-адрес, на котором будет обрабатывать запросы OpenVPN; port: сетевой порт (443 позволит избежать проблем при использовании Интернета в общественных местах, но может быть уже занят в вашей системе — посмотреть список используемых портов можно командой ss -tunlp. Если порт занят, используйте любой из свободных, например 1194).

Создаем каталог для логов сервера:

mkdir /var/log/openvpn

Разрешаем автоматический старт сервиса vpn:

systemctl enable openvpn@server

И запускаем его:

systemctl start openvpn@server

Для настройки клиента необходимо на сервере сгенерировать сертификаты, а на клиентском компьютере установить программу openvpn и настроить ее.

На сервере генерируем сертификаты для клиента. Для этого переходим в каталог easy-rsa (если мы из него выходили):

cd /usr/share/easy-rsa/3

Запускаем еще раз vars:

./vars

Создаем запрос и сам сертификат:

./easyrsa gen-req client1 nopass

./easyrsa sign-req client client1

* как и при генерировании сертификата сервера, подтверждаем правильность данных и вводим пароль корневого сертификата. В данном примере мы создадим сертификат для client1.

На сервере скопируем ключи во временную директорию, выполнив последовательно 3 команды:

mkdir /tmp/keys

cp pki/issued/client1.crt pki/private/client1.key pki/dh.pem pki/ca.crt pki/ta.key /tmp/keys

chmod -R a+r /tmp/keys

* сертификаты скопированы в каталог /tmp для удобства переноса их на клиентский компьютер.

Заходим на официальную страницу загрузки openvpn и скачиваем клиента для Windows:

Загрузка клиента openvpn

Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».

Переходим в папку C:\Program Files\OpenVPN\config. И копируем в нее файлы ca.crt, client.crt, client.key, dh2048.pem, ta.key из каталога /tmp/keys на сервере, например, при помощи программы WinSCP.

После переноса файлов, не забываем удалить ключи из временного каталога на сервере:

# rm -R /tmp/keys

Теперь возвращаемся к компьютеру с Windows, открываем блокнот от имени администратора и вставляем следующие строки:

client
resolv-retry infinite
nobind
remote 192.168.0.15 443
proto udp
dev tun
comp-lzo
ca ca.crt
cert client1.crt
key client1.key
dh dh.pem
tls-client
tls-auth ta.key 1
float
keepalive 10 120
persist-key
persist-tun
verb 0

* где 192.168.0.15 443 — IP-адрес OpenVPN-сервера и порт, на котором он принимает запросы.

Сохраняем файл с именем config.ovpn в папке C:\Program Files\OpenVPN\config.

Запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора (это важно).

Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:

Запуск подключения openvpn-клиента к серверу

Произойдет подключение и значок поменяет цвет с серого/желтого на зеленый.

Далее настраиваем доступ в Интернет

Все что нужно настроить — включить перенаправление на уровне ядра. Для этого открываем следующий файл:

vi /etc/sysctl.conf

И добавляем в него следующую строку:

net.ipv4.ip_forward=1

После применяем настройку:

sysctl -p /etc/sysctl.conf

В случае с единым сетевым интерфейсом больше ничего делать не потребуется — CentOS начнет работать как Интернет-шлюз.

В случае с несколькими сетевыми адаптерами, настраиваем сетевой экран.

Рассмотрим настройку фаервола при помощи двух различных популярных утилит — firewalld и iptables.

Firewalld

Настройка выполняется для двух сетевых интерфейсов — ens32 (внутренний) и ens34 (внешний):

firewall-cmd —direct —permanent —add-rule ipv4 nat POSTROUTING 0 -o ens34 -j MASQUERADE

firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens32 -o ens34 -j ACCEPT

firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens34 -o ens32 -m state —state RELATED,ESTABLISHED -j ACCEPT

systemctl restart firewalld

Iptables

Настройка выполняется из расчета, что внутренняя сеть имеет адресацию 192.168.0.0/24:

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

/usr/libexec/iptables/iptables.init save

systemctl restart iptables

По мотивам: https://www.dmosk.ru

Запись опубликована в рубрике Администрирование. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*

code