Сетевая конфигурация сервера
На этом этапе нужно заняться настройкой сетевой конфигурации сервера для того, чтобы OpenVPN правильно перенаправлял трафик.
Отправка IP
Сначала необходимо дать возможность серверу перенаправлять трафик. Это очень важный момент для корректного функционирования VPN сервера.
Изменения необходимо вносить в файл /etc/sysctl.conf, поэтому сначала нужно открыть его:
$ sudo nano /etc/sysctl.conf
Теперь найдите строку с net.ipv4.ip_forward. Раскомментируйте ее, удалив знак решетки в начале:
net.ipv4.ip_forward=1
Затем сохраните и закройте файл.
Для того, чтобы применить изменения к вашему сеансу, наберите:
$ sudo sysctl -p
Настройка UFW правил для сокрытия клиентских соединений
Наверняка у вас на сервере фаервол уже используется для того, чтобы блокировать нежелательный трафик. В случае работы с OpenVPN фаервол поможет работать с тем трафиком, который поступает на сервер. Вам будет необходимо изменить файл с правилами для того, чтобы включить маскарадинг (или по-английски masquerading, маскировка). Маскарадинг – это определенный тип трансляции сетевого адреса, при котором отправитель имеет адрес, подставляемый динамически. Перед тем, как перейти к настройке фаервола и включению маскарадинга, нужно найти публичный интерфейс сети используемой машины. Введите команду:
$ ip route | grep default
Название вашего публичного интерфейса будет иди сразу после слова “dev’. В примере ниже интерфейс называется wlp22s0:
default via 203.0.113.1 dev wlp22s0 proto static metric 600
Увидели и запомнили название интерфейса? Тогда идем дальше. Откройте файл /etc/ufw/before.rules для того, чтобы добавить нужную конфигурацию:
$ sudo nano /etc/ufw/before.rules
В этом файле содержатся настройки, которые следует внести до того, как будут применены правила UFW. Ближе к началу файла добавьте строки, написанные ниже (вставить их можно после закомментированного блока rules.before):
# START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT # Allow traffic from OpenVPN client to wlp22s0 (change to the interface you discovered!) -A POSTROUTING -s 10.8.0.0/8 -o wlp22s0 -j MASQUERADE COMMIT # END OPENVPN RULES
Обратите внимание, что в строчке -A POSTROUTING нужно вставить то название интерфейса, которое вы выяснили ранее. Внесенное изменение позволяет установить правила
которые по умолчанию будут применяться к цепочке POSTROUTING (именно эта цепочка отвечает за маскарадинг) в таблице nat, и весь трафик, который идет от VPN, будет скрыт
Внесенное изменение позволяет установить правила. которые по умолчанию будут применяться к цепочке POSTROUTING (именно эта цепочка отвечает за маскарадинг) в таблице nat, и весь трафик, который идет от VPN, будет скрыт.
После внесенного изменения сохраните и закройте файл.
Теперь нужно сделать так, что фаервол по умолчанию пропускал перенаправленные пакеты. Для этого откройте вот этот файл:
$ sudo nano /etc/default/ufw
И в нем найдите директиву DEFAULT_FORWARD_POLICY. Ее значение с DROP нужно изменить на ACCEPT.
DEFAULT_FORWARD_POLICY="ACCEPT"
Затем сохраните и закройте файл.Открытие порта OpenVPN и применение изменений
Теперь перейдем к настройке фаервола, так как необходимо, чтобы он пропускал трафик в OpenVPN.
Если ранее вы не меняли номер порта и протокол в файле /etc/openvpn/server.conf, то вам нужно открыть трафик UDP для порта 1194. Соответственно, если вы используете другой порт и протокол, то в настройках вам нужно будет использовать ваши значения.
Также нужно будет добавить SSH-порт (если ранее вы этого не сделали):
$ sudo ufw allow 1194/udp $ sudo ufw allow OpenSSH
После этого для того, чтобы изменения вступили в силу, вам нужно выключить включить фаервол:
$ sudo ufw disable $ sudo ufw enable
Теперь сервер настроен правильно для того, чтобы работать с OpenVPN трафиком.
Шаг 3 — Генерация ключей и сертификатов
Easy RSA использует набор скриптов, поставляемых вместе с программой, для генерации ключей и сертификатов. Чтобы избежать переконфигурации каждый раз, когда вам нужно создать сертификат, вы можете изменить конфигурацию Easy RSA, чтобы определить значения по умолчанию, которые он будет использовать для полей сертификата, включая вашу страну, город и предпочитаемый адрес электронной почты.
Прокрутите до конца файла и измените значения, которые начинаются с, чтобы соответствовать вашей информации. Те, которые наиболее важны:
- Здесь введите домен или поддомен, который разрешается на ваш сервер.
- : Вы должны войти сюда. Если ввести что — то другое, вы также должны обновить конфигурационные файлы , которые ссылаются и .
Другие переменные в этом файле, которые вы можете изменить:
- : Для этой переменной введите двухбуквенное сокращение страны вашего проживания.
- : Это должно быть название или сокращение штата вашего проживания.
- : Здесь введите название города, в котором вы живете.
- Это должно быть название вашей организации или компании.
- : Введите адрес электронной почты, который вы хотите подключить к сертификату безопасности.
- Это должно быть название «Подразделения организации», к которому вы принадлежите, обычно название вашего отдела или группы
Остальные переменные могут быть безопасно проигнорированы вне конкретных случаев использования. После внесения изменений файл должен выглядеть следующим образом:
Теперь, когда все необходимые ключи и сертификаты созданы для вашего сервера и клиента, вы можете перейти к настройке маршрутизации между двумя компьютерами.
Настройка службы OpenVPN
Теперь, когда у вас есть сертификат сервера, подписанный вашим центром сертификации и переданный на сервер OpenVPN , пора настроить службу OpenVPN.
Мы будем использовать образец файла конфигурации, поставляемый с установочным пакетом OpenVPN, в качестве отправной точки, а затем добавим в него наши собственные параметры конфигурации.
Начните с извлечения файла конфигурации в каталог :
Откройте файл в любимом текстовом редакторе:
-
Найдите директивы параметров Certificate, Key и DH и измените имена файлов:
/etc/openvpn/server1.conf
-
Чтобы перенаправить трафик клиентов через VPN, найдите и раскомментируйте параметры и :
/etc/openvpn/server1.conf
По умолчанию используются распознаватели OpenDNS. Вы можете изменить его и использовать CloudFlare, Google или любые другие преобразователи DNS, которые захотите.
-
Найдите директивы и и раскомментируйте эти настройки, удалив символ « ”В начале каждой строки:
/etc/openvpn/server1.conf
-
Добавьте следующую строку в конец файла. Эта директива изменит алгоритм аутентификации сообщений (HMAC) с SHA1 на SHA256.
/etc/openvpn/server1.conf
Как только вы закончите, конфигурационный файл сервера (без комментариев) должен выглядеть примерно так:
/etc/openvpn/server1.conf
Настройка Easy-RSA 3
Скопируем скрипты easy-rsa в каталог /etc/openvpn/
Переходим в каталог /etc/openvpn/easy-rsa/3/ и создаем там файл vars
Содержимое файла:
Делаем файл исполняемым
Создание ключа и сертификата для OpenVPN Сервера
Прежде чем создавать ключ, нам нужно инициализировать каталог PKI и создать ключ CA.
На этом необходимо придумать пароль для своего CA-ключа, чтобы сгенерировались файлы ‘ca.crt’ и ‘ca.key’ в каталоге ‘pki’. Этот пароль нам потребуется дальше
Создаем корневой сертификат
Создадим ключ сервера (название сервера srv-openvpn)
опция nopass — отключение пароля для srv-openvpn
Создаем ключ сервера
Подпишем ключ srv-openvpn используя наш CA-сертификат
В процессе у нас спросят пароль, который мы задавали ранее
Подписываем ключ, используя CA-сертификат
Проверим файлы сертификата, что бы убедится, что сертификаты сгенерировались без ошибок
Все сертификата OpenVPN сервера созданы.
- Корневой сертификат расположен: ‘pki/ca.crt’
- Закрытый ключ сервера расположен: ‘pki/private/srv-openvpn.key’
- Сертификат сервера расположен: ‘pki/issued/srv-openvpn.crt’
Создание ключа клиента
Сгенерируем ключ клиента client-01
Генерируем ключ клиента
Теперь подпишем ключ client-01, используя наш CA сертификат
В процессе у нас спросят пароль, который мы задавали ранее
Подписываем ключ клиента, используя корневой сертификат
Проверим файлы сертификата
Дополнительная настройка OpenVPN сервера
Сгенерируем ключ Диффи-Хеллмана
Генерация ключа Диффи-Хеллмана
Если мы в дальнейшем планируем отзывать клиентские сертификаты, нам необходимо сгенерировать CRL ключ
В процессе у нас спросят пароль, который мы задавали ранее
Генерируем CRL-ключ
Для того, что бы отозвать сертификат надо выполнить команду:
где client-02 имя сертификата, который мы отзываем
Все необходимые сертификаты созданы, теперь их надо скопировать в директории
Копируем сертификаты сервера
Копируем сертификаты клиента
Копируем ключи DH и CRL
!!! Проверить, надо ли перегенерировать CRL и заново копировать его в каталог /etc/openvpn/server/ после отзыва сертификата !!!
Решение проблем при установке VPN
Хотя проблемы возникают редко, чтобы сэкономить ваше время на поиск решений при настройке VPN вот вам краткий обзор некоторых проблем при установке
Сервис VPN не запускается
Посмотрите что находится в журнале
Скорее всего не хватает какого-нибудь файла, который мы копировали выше (команда cp). Вернитесь на шаги назад и проверьте — все ли файлы скопировались.
Сообщение FirewallD is not running
На вашей машине не запущен файрвол. Необходимо запустить его сервис (отдельный мануал ). По умолчанию он не блокирует доступ через ssh (через telnet), но правила для http и https необходимо будет добавить, если на вашем сервере крутятся сайты. Это не сложно. Вот эти команды (плюсом еще доступ по ftp)
Плюс надо будет заново пройтись по секции с firewall-cmd этого текста (заново ввести правила и команды для файрвола).
Настройка OpenVPN-клиента
Для настройки клиента необходимо на сервере сгенерировать сертификаты, а на клиентском компьютере установить программу openvpn и настроить ее.
Создание сертификатов
На сервере генерируем сертификаты для клиента. Для этого снова переходим в каталог easy-rsa:
cd /usr/share/easy-rsa/3
Запускаем еще раз vars:
. ./vars
Создаем клиентский сертификат:
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
* в данном примере будет создан сертификат для client1.
Мы должны увидеть запрос на подтверждение намерения выпустить сертификат — вводим yes:
Confirm request details: yes
После появится запрос на ввод пароля для ключа ca:
Enter pass phrase for /usr/share/easy-rsa/3/pki/private/ca.key:
Вводим его.
На сервере скопируем ключи во временную директорию, выполнив последовательно 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 для удобства переноса их на клиентский компьютер.
Сертификаты готовы для скачивания.
На клиенте
В качестве примера, выполним подключение к нашему серверу с компьютеров Windows и Linux. Более подробно процесс настройки клиента описан в инструкции Настройка OpenVPN клиента.
Windows
1. Заходим на официальную страницу загрузки openvpn и скачиваем клиента для Windows:
Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».
2. Переходим в папку C:\Program Files\OpenVPN\config.
Копируем в нее файлы ca.crt, client1.crt, client1.key, dh.pem, ta.key из каталога /tmp/keys на сервере, например, при помощи программы WinSCP.
После переноса файлов, не забываем удалить ключи из временного каталога на сервере:
rm -R /tmp/keys
3. Возвращаемся к компьютеру с Windows, открываем блокнот от имени администратора и вставляем следующие строки:
client
resolv-retry infinite
nobind
remote 192.168.0.15 443
proto udp
dev tun
comp-lzo no
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.
4. Запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора.
Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Произойдет подключение и значок поменяет цвет с серого/желтого на зеленый.
5. Для автозапуска клиента, открываем службы Windows, находим и настраиваем службу OpenVPNService для автозапуска:
Linux
1. Устанавливаем клиента одной из команд.
а) для Rocky Linux / CentOS:
yum install epel-release
yum install openvpn
б) для Ubuntu / Debian:
apt-get install openvpn
2. Создаем каталог:
mkdir /etc/openvpn/client
И переходим в него:
cd /etc/openvpn/client
Копируем в каталог файлы ca.crt, client1.crt, client1.key, dh.pem, ta.key из каталога /tmp/keys на сервере, например, при помощи утилиты scp:
scp admin@192.168.0.15:/tmp/keys/* .
* где admin — имя пользователя, под которым можно подключиться к серверу по SSH; 192.168.0.15 — IP-адрес сервера.
Для закрытых ключей разрешаем доступ только для владельца:
chmod 600 client1.key ta.key
После переноса файлов, не забываем удалить ключи из временного каталога на сервере:
rm -R /tmp/keys
3. Создаем конфигурационный файл:
vi /etc/openvpn/client/client.conf
client
resolv-retry infinite
nobind
remote 192.168.0.15 443
proto udp
dev tun
comp-lzo no
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-сервера и порт, на котором он принимает запросы.
4. Разово запустим клиента:
cd /etc/openvpn/client
openvpn —config /etc/openvpn/client/client.conf
Соединение должно выполниться. Мы можем увидеть предупреждения — по желанию, межете их исправить самостоятельно.
5. Прерываем выполнение подключения комбинацией Ctrl + C и запустим клиента в качестве службы:
systemctl enable openvpn-client@client —now
Проверить, что соединение состоялось можно пинганув сервер по VPN-адресу:
ping 172.16.10.1
Установка OpenVPN и EasyRSA
Наш следующий шаг — установить пакет OpenVPN, который доступен в репозиториях EPEL, и загрузить последнюю версию EasyRSA.
Следующие шаги выполняются на сервере OpenVPN .
-
Включите репозиторий EPEL , набрав:
-
После включения репозитория установите OpenVPN с помощью следующей команды:
-
Загрузите последнюю версию EasyRSA:
После завершения загрузки введите следующую команду для извлечения архива:
Хотя мы уже инициализировали PKI на машине CA, нам также необходимо создать новую PKI на сервере OpenVPN. Для этого используйте те же команды, что и раньше:
Если вам все еще интересно, зачем нам две установки EasyRSA, это потому, что мы будем использовать этот экземпляр EasyRSA для генерации запросов на сертификаты, которые будут подписаны с помощью экземпляра EasyRSA на машине CA.
Это может показаться сложным и немного запутанным, но как только вы прочитаете весь учебник, вы увидите, что это действительно несложно.
Настройка сервера openvpn Centos 7:
Официальная страница openvpn
Подключаем репозитарий epel
yum install epel-release
Устанавливаем openvpn и Easy-RSA
yum -y install openvpn yum -y install easy-rsa
В директории для документации OpenVPN содержатся файлы для тестовой конфигурации программ. Скопируем в папку с openvpn и отредактируем конфигурационный файл. На момент написания статьи версия openvpn-2.4.1 — убедитесь в своей версии, ссылка и путь скорее всего будут уже другие, или просто поэтапно пройдите по пути нажимая первые буквы категорий и нажимая TAB.
cp /usr/share/doc/openvpn-2.4.1/sample/sample-config-files/server.conf /etc/openvpn/
Редактируем server.conf
vi /etc/openvpn/server.conf
Убираем комментарий «#» со строки где хранятся файлы клиента
client-config-dir ccd
Изменить строку на следующую. Если эта строка закомментирована то будет просто подключение к VPN серверу а трафик будет идти в обход VPN. У вас будет интернет но не будет через шлюз.
push "redirect-gateway def1 bypass-dhcp"
Уберем «;» и заменим ip в строках push «dhcp-option DNS 208.67.222.222» и push «dhcp-option DNS 208.67.220.220» на сервера google
push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 4.4.4.4"
Убираем привилегии для openvpn. Удалить «;» для строк
user nobody group nobody
Полная настройка конфигурационного файла сервера VPN /etc/openvpn/server.conf
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh2048.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt client-config-dir ccd push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 4.4.4.4" keepalive 10 120 tls-auth ta.key 0 cipher AES-256-CBC user nobody group nobody persist-key persist-tun status openvpn-status.log verb 3 explicit-exit-notify 1
Настройка анонимности
Для обеспечения полной анонимности при использовании VPN-сервера, делаем дополнительные настройки.
1. Необходимо, чтобы время на сервере совпадало с временем на компьютере.
На стороне сервера необходимо задать часовой пояс, например, если наш прокси находится в Германии, вводим:
timedatectl set-timezone Europe/Berlin
На стороне клиента либо меняем часовой пояс в системе, либо устанавливаем плагин для браузера, например, для Mozilla Firefox и меняем часовой пояс уже в нем.
2. Отключение icmp. По времени ответа на ping можно определить отдаленноесть клиента от прокси. Чтобы проверку нельзя было выполнить, отключаем на сервере icmp. Для этого создаем файл:
vi /etc/sysctl.d/icmp.conf
net.ipv4.icmp_echo_ignore_all=1
И применяем настройки:
sysctl -p /etc/sysctl.d/icmp.conf
3. Настройка MTU.
Для решения проблем с VPN fingerprint, на стороне сервера добавляем 2 опции:
vi /etc/openvpn/server.conf
…
tun-mtu 1500
mssfix 1620
Перезапускаем сервис:
systemctl restart openvpn@server
На стороне клиента также добавляем в конфигурационный файл 2 опции:
…
tun-mtu 1500
mssfix 1620
Переподключаемся к серверу VPN.
4. Проверяем настройки.
Открываем браузер, который работает через прокси и переходим на страницу 2ip.ru/privacy — кликаем по Проверить:
Будет выполнена проверка анонимности нашего сервера.
Клиентские ключи
Создадим ключ для клиента openvpn:
# cd /etc/openvpn/keys/EasyRSA-3.0.8
# ./easyrsa gen-req client1 nopass
# ./easyrsa sign-req client client1
Опять можно отметить, что могут быть ситуации, когда лучше ключ клиента защищать паролем, хотя бы несложным. Тогда всякий раз при подключении к VPN необходимо будет ввести пароль. Это может быть удобным, если вы не хотите, например, чтобы ваш ребенок случайно подключился к вашей рабочей сети и натворил делов. Для этого просто не надо указывать «nopass» в конце команды выше.
В итоге мы получим два файла:
Публичный сертификат клиента:
Приватный ключ клиента:
Клиенту вместе с конфигом (см ниже) нужно будет передать копии следующих файлов:
которые все используются в клиентском конфиге. Никакие иные файлы, кроме тех, которые указаны в конфиге клиента, передавать клиенту не надо!
Аутентификация через Active Directory
Проверка подлинности через активный каталог от Microsoft в xl2tp выполняется с помощью winbind и samba.
Подготовка сервера
Для корректной работы сервера с Active Directory необходимо задать ему имя (hostname), которое будет доступно в DNS. Также на сервере должно быть задано точное время.
1. Необходимо убедиться, что сервер доступен по своему доменному имени. Если серверу так и не было задано вменяемого имени, вводим команду:
hostnamectl set-hostname vpn.dmosk.local
* где vpn — имя сервера; dmosk.local — домен.
После добавляем в DNS наш сервер VPN. Ждем минут 15 (если у нас используется доменная инфраструктура с несколькими сайтами, иначе ждать не нужно).
2. Задаем временную зону:
\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
* в данном примере мы задаем зону по московскому времени.
Устанавливаем утилиту для синхронизации времени, разрешаем запуск демона и стартуем его.
yum install chrony
systemctl enable chronyd
systemctl restart chronyd
Присоединяем сервер к домену
Устанавливаем необходимые компоненты:
dnf install samba-client samba-winbind samba-winbind-clients krb5-workstation
Открываем конфигурационный файл samba:
vi /etc/samba/smb.conf
В разделе редактируем следующие опции:
workgroup = DMOSK
security = ads
* где DMOSK — NETBIOS имя домена; ads — указывает, что для samba будет использоваться модель безопасности LDAP Active Directory.
Также в добавим следующие строки:
kerberos method = secrets and keytab
realm = DMOSK.LOCAL
winbind enum groups = Yes
winbind enum users = Yes
idmap config * : rangesize = 1000000
idmap config * : range = 1000000-19999999
idmap config * : backend = autorid
* где:
- kerberos method — метод проверки kerberos. В данном примере сначала используется secretts.tdb, а затем системная таблица ключей.
- realm — сервер Active Directory. В нашем примере прописан домен, так как по нему можно обратиться к любому из серверов AD.
- winbind enum groups — задает пределы перечисления групп через setgrent(), getgrent() и endgrent().
- winbind enum users — задает пределы перечисления пользователей через setpwent(), getpwent()и endpwent().
- idmap config * : rangesize — определяет количество доступных uids и gids в каждом доменном диапазоне.
- idmap config * : range — определяет доступные совпадающие диапазоны uid и gid, для которых серверная часть является авторитетной.
- idmap config * : backend — задает idmap плагин для использования в качестве SID/uid/gid подсистемы
Вводим сервер в домен:
net ads join -U Administrator@dmosk.local
* где Administrator — учетная запись пользователя AD с правами на ввод компьютеров в домен; dmosk.local — наш домен.
Мы должны увидеть, примерно, следующее:
Using short domain name — DMOSK
Joined ‘SAMBA’ to dns domain ‘dmosk.local’
Разрешаем автозапуск winbind и стартуем его:
systemctl enable winbind —now
Выбираем профиль для аутентификации:
authselect select winbind —force
Проверяем, что наш сервер может получить список пользователей Active Directory:
wbinfo -u
… и групп:
wbinfo -g
Если мы увидели список пользователей и групп, то присоединение сервера к домену завершено.
После проверяем, что аутентификация в AD через модуль ntlm_auth работает корректно:
ntlm_auth —request-nt-key —domain=DMOSK.LOCAL —username=Administrator
* где DMOSK.LOCAL — наш домен; Administrator — пользователь, под которым будем логиниться для проверки работы модуля.
Настройка PPP для аутентификации через AD
Открываем конфигурационный файл options.xl2tpd:
vi /etc/ppp/options.xl2tpd
Добавляем в самый низ:
…
plugin winbind.so
ntlm_auth-helper ‘/usr/bin/ntlm_auth —helper-protocol=ntlm-server-1 —require-membership-of=»DMOSK\\VPN Users»‘
* где VPN Users — группа в AD, пользователи который будут иметь возможность использовать VPN.
Перезапускаем xl2tpd:
systemctl restart xl2tpd
Проверка
В Active Directory добавляем группу VPN Users (если еще нет). Группа должна быть локальная в домене. В группу добавим пользователей, которым хотим дать доступ для VPN-подключения.
В настройках подключения к серверу меняем пользователя и пароль на доменные.
Настройка клиента openvpn Centos 7:
Устанавлвиваем клиент OpenVPN, скачать можно тут. После установки OpenVPN скачиваем файлы ca.crt client.crt client.key ta.key с папки /etc/openvpn/easy-rsa/keys/ в папку машины с которой планируем подключаться C:\Program Files\OpenVPN\config\ и создаем в ней файл clientfirst.ovpn например, но лучше не просто client.ovpn потому что VPN клиент уже содержит пример подключения в папке C:\Program Files\OpenVPN\sample-config\
Строку «ЗДЕСЬ IP ВАШЕГО СЕРВЕРА» замените ip адресом вашего VDS/VPS или сервера.
client dev tun proto udp remote ЗДЕСЬ IP ВАШЕГО СЕРВЕРА 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client.crt key client.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-CBC verb 3
Запускаем OpenVPN, работаем.
Некоторые заметки:tls-auth ta.key 0 — На стороне сервера tls-auth ta.key 1 — На стороне клиента.
Возможно в какой-то момент пропущена необходимость перезагрузки сервера. Бывает еще какая-то ошибка из-за несоответствия времени.
Если вам нужно просто сменить ip адрес в браузере то можете рассмотреть эту статью:прокcи сервер centos 7
Настройка openvpn на CentOS 7
Теперь приступаем к настройке. Создаем файл конфигурации openvpn:
# mcedit /etc/openvpn/server.conf
port 13555 # я предпочитаю использовать нестандартные порты для работы proto udp # протокол может быт и tcp, если есть необходимость в этом dev tun ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh.pem server 10.0.0.0 255.255.255.0 # подсеть для туннеля, может быть любой route 192.168.20.0 255.255.255.0 # указываем подсеть, к которой будем обращаться через vpn push "route 192.168.20.0 255.255.255.0" # передаем маршрут клиентам ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet - ip client-to-client # позволяет клиентам openvpn подключаться друг к другу client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками клиентов keepalive 10 120 comp-lzo persist-key persist-tun status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log verb 3
Создаем необходимые директории:
# mkdir /etc/openvpn/ccd && mkdir /var/log/openvpn
Создаем файл конфигурации клиента в папке, указанной в параметре client-config-dir :
mcedit /etc/openvpn/ccd/client
iroute 192.168.20.0 255.255.255.0
Здесь client — имя сертификата пользователя. Параметр iroute означает, что за подсеть 192.168.20.0/24 отвечает именно этот клиент. Если в openvpn не передать эту настройку, то сеть, находящуюся за клиентом будет не видно, при этом сам клиент будет видеть всю сеть, которую обслуживает сервер. Такой вариант подходит для подключения удаленных сотрудников.
Выбор устройства openvpn — TAP или TUN
Чуть подробнее остановлюсь на этом моменте. В моей конфигурации я использую tun интерфейс. В чем отличие tun от tap можно прочитать на википедии. Прокомментирую своими словами. Если вам нужно объединить две разные локальные сети в одну условно общую, но с разной адресацией, то вам нужен tun. То есть в нашем случае мы объединяем две сети 192.168.10.0/24 и 192.168.20.0/24 для взаимного совместного доступа.
Если же у вас стоит задача объединить 2 удаленные сети в единое адресное пространство, например сделать и в офисе и в филиале единую сеть 192.168.10.0/24, то тогда бы мы использовали tap интерфейс и указывали бы на компьютерах в обоих сетях не пересекающиеся адреса из одной подсети. В таком состоянии openvpn работает в режиме моста. По мне так удобнее первый вариант. Я еще не сталкивался с задачей, где бы мне нужен был tap. Вернемся к настройке.
Запускаем сервер:
# systemctl start
Если сервер не запустился, а в логе ошибка:
TCP/UDP: Socket bind failed on local address : Permission denied
Значит вам нужно либо правильно настроить, либо . В данном материале я не хочу касаться настройки SELinux, поэтому просто отключаем его:
# mcedit /etc/sysconfig/selinux
меняем значение
SELINUX=disabled
Чтобы изменения вступили в силу, перезагружаемся:
# reboot
Пробуем снова запустить openvpn сервер:
# systemctl start
Проверяем, запустился или нет:
# netstat -tulnp | grep 13555 udp 0 0 0.0.0.0:13555 0.0.0.0:* 2472/openvpn
Отлично, запустился на указанном порту.
Добавляем сервер openvpn в автозагрузку:
# systemctl enable ln -s '/usr/lib/systemd/system/' '/etc/systemd/system/multi-user.target.wants/'
Теперь внимательно проверим корректность всех настроек на сервере. Сначала посмотрим информацию о сетевых интерфейсах:
Обращаем внимание на адреса туннеля vpn. Теперь проверяем статические маршруты:
Тут тоже все в порядке. Траффик из подсети филиала 192.168.20.0/24 будет маршрутизироваться в тоннель. С настройкой сервера закончили, идем теперь на клиент.
Установка, настройка и запуск VPN-сервера
Установка 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
* где 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) :
Создаем ключ Диффи-Хеллмана:
./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/
Настройка OpenVPN-сервера
Создаем конфигурационный файл:
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
Проверим, что сервис корректно работает:
systemctl status openvpn@server
Заключение
В заключение необходимо отметить, что настройка сети VPN – довольно трудоёмкое и ответственное занятие
Особое внимание здесь нужно уделять организации ЦС, распространению ключей и сертификатов, а также форвардингу пакетов
Поэтому для таких задач очень важно иметь хорошую квалификацию по администрированию сетей. Также стоит учитывать, что была рассмотрена настройка OpenVPN для систем Ubuntu, однако принципиальной разницы для других дистрибутивов нет
Также стоит учитывать, что была рассмотрена настройка OpenVPN для систем Ubuntu, однако принципиальной разницы для других дистрибутивов нет.