Цель:
Пустить весь траффик с любого из устройств через VPN. Максимальное удобство подключение новых устройств, без создания учетных записей, создание паролей и т.д. Быстрое и шифрованное подключение.
Все шаги были выполнены на CentOS 7.
Установим репозиторий EPEL, если его еще нет в системе и установим нужные пакеты:
yum install epel-release -y yum install openvpn easy-rsa -y
Создаем файл конфигурации:
vim /etc/openvpn/server.conf
И копируем в него следующее:
local CHANGE_THIS_ON_YOUR_PUBLIC_IP port 1194 proto tcp dev-type tun dev tun ca ca.crt cert server.crt key server.key dh dh2048.pem topology subnet server 10.8.0.1255.255.255.0 txqueuelen 250 keepalive 300 900 cipher AES-128-CBC ncp-ciphers AES-128-GCM user nobody group nobody duplicate-cn persist-key persist-tun status openvpn-status.log push "redirect-gateway def1" push "remote-gateway 10.8.0.1" push "dhcp-option DNS 8.8.8.8"
Создаем папку для ключей и копируем нужные скрипты для создания их:
mkdir -p /etc/openvpn/easy-rsa/keys cp -a /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
Для удобства можем сразу в переменные среды указать информацию нужную для создания ключей, дабы в будущем ее постоянно не вводить:
vim /etc/openvpn/easy-rsa/vars
И приведем его к такому виду:
export KEY_COUNTRY="UA" export KEY_PROVINCE="UA" export KEY_CITY="Kiev" export KEY_ORG="openvpn" export KEY_EMAIL="[email protected]" export KEY_OU="VPN" export KEY_NAME="openvpn" export KEY_CN="openvpn.artem.services"
Копируем конфигурацию OpenSSL:
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
Переходим в папку со скриптами для создания ключей, и очищаем содержимое ее для наших будущих ключей:
cd /etc/openvpn/easy-rsa source ./vars ./clean-all
Создадим корневой сертификат:
./build-ca
Создадим ключ и публичный сертификат:
./build-key-server server
Создадим Diffie-Hellman ключ:
./build-dh
Перейдем в каталог с ключами и сертификатами, которые мы создали:
cd /etc/openvpn/easy-rsa/keys
И скопируем нужные нам файлы в каталог OpenVPN’a:
cp -a dh2048.pem ca.crt server.crt server.key /etc/openvpn
(!) Важно чтобы после копирования у этих файлов сохранились права
Создадим сертификат и ключ для клиента:
cd /etc/openvpn/easy-rsa ./build-key client
Дальше конфигурация приводится для iptables, если используется firewalld то отключить его можно следующим образом:
yum install iptables-services -y systemctl mask firewalld systemctl enable iptables systemctl stop firewalld systemctl start iptables iptables --flush
Добавляем правило в iptables и сохраняем:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE iptables-save > /etc/sysconfig/iptables
(!) Обязательно проверьте правильность названия интерфейса, в моем случае это eth0
В файле "/etc/sysctl.conf" разрешаем форвардинг пакетов:
net.ipv4.ip_forward = 1
И перезапускаем службу сети:
systemctl restart network.service
Добавляем службу OpenVPN в автозапуск и стартуем ее:
systemctl -f enable [email protected] systemctl start [email protected]
Создадим файл конфигурации клиента для подключения к серверу, сразу вставив нужные ключи и сертификаты:
vim openvpn.ovpn
И скопируем в него следующее:
client remote artem.services 1194 nobind remote-cert-tls server cipher AES-128-CBC setenv opt ncp-ciphers AES-128-GCM setenv opt block-outside-dns dev tun proto udp <ca> СОДЕРЖИМОЕ ФАЙЛА ca.crt </ca> <cert> СОДЕРЖИМОЕ ФАЙЛА client.crt </cert> <key> СОДЕРЖИМОЕ ФАЙЛА client.key </key>
Дальше этот файл можно импортировать на устройства клиентов и подключаться к серверу.