
Установка openvpn на RedHat/CentOS/Fedora
OpenVPN является полнофункциональной утилитой с открытыми исходниками для решение VPN, что позволяет использовать широкий диапазон конфигураций, в том числе удаленного доступа, Wi-Fi безопасности и многое другое. OpenVPN предлагает экономическое и эффективное решение — это альтернативное решение других технологий VPN, которая целенаправленна для разных предприятий. В статье «Установка openvpn на RedHat/CentOS/Fedora» хотел бы рассказать как можно объединить группу компьютеров двух или более разных сетей для совместного использования на примере установки openVPN для RedHat, CentOS а так же для Fedora.
И так имеем, у меня есть сервер на которой установлена ОС — CentOSи у нее имеется ИП адрес 78.140.189.243. На этот сервер мы сейчас и установим наш OpenVPN сервер.
До всей установки нужно подключить repo EPEL:
Как включить EPEL репозиторий на CentOS
1. Устанавливаем OpenPN сервер, к нему и будем подключаться ( на том компьютере с которого мы будем подключаться мы установим клиентскую ее часть, но об этом немного попозже):
# yum install openvpn
Как только все установится нужно скопировать файлы в созданную папку:
# mkdir -p /etc/openvpn/easy-rsa/keys # cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa/keys
Но это уже не работает в новых версиях OpenVPN (в него уже не входит этот пакет), по этому нужно сделать «финт ушами», по этому мы установим вручную:
# sudo yum install easy-rsa
После этого мы создаем папку и скопируем нужные данные в нее:
# mkdir -p /etc/openvpn/easy-rsa/keys # cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
После того как мы скопировали нужные для работы файлы, нам еще нужно сгенерировать ключики и так же сертификаты, делаем по следующей схеме:
# vim /etc/openvpn/easy-rsa/vars #в этом файле нужно изменить Страну, город..... [...] # не оставляйте поля пустыми! export KEY_COUNTRY="UA" export KEY_PROVINCE="LG" export KEY_CITY="Lug" export KEY_ORG="linux-notes" export KEY_EMAIL="solo.metal@bigmir.net" export KEY_OU="my_server" [...]
Переходим в директорию и начнем работу:
# cd /etc/openvpn/easy-rsa/
Введите следующие команды для инициализации центра сертификации:
# cp openssl-1.0.0.cnf openssl.cnf # source ./vars # ./clean-all
Затем выполните следующую команду, чтобы создать сертификат и ключ CA:
# ./build-ca
Нас попросят ввести данные ( но нам это не интересно, т.к мы это все уже прописать немного выше), но мы просто на каждый вопрос нажимаем «Enter»
Далее создаем сертификат и ключик для моего сервера my_server:
# ./build-key-server my_server
Нас просят ввести кое какие данные, я привел то что нужно нажимать на следующем скриншоте:
Создадим сертификат и ключ для VPN клиентов:
# ./build-key client
Если вы хотите создать сертификат и файлы ключей для каждого клиента, вы должны заменить параметр клиента своим уникальным идентификатором! Но т.к я буду использовать его сам, то мне хватит и 1 клиентского сертификата.
Отвечаем на вопросы точно так же как и на предыдущем рисунке:
Создадим параметр Диффи Хеллмана
Введите следующую команду, чтобы создать параметр DH:
# ./build-dh
Запустится генерация и это займет определенное время ( не более 1 мин).
Нужные ключики и сертификаты будут генерироваться в /etc/openvpn/easy-rsa/keys/. Скопируйте следующие сертификаты и файлы ключей в каталог/etc/openvpn/:
- ca.crt
- dh2048.pem
- my_server.crt
- my_server.key
Чтобы это сделать, перейдите в папку и скопируем все это:
# cd /etc/openvpn/easy-rsa/keys/ # cp dh2048.pem ca.crt my_server.crt my_server.key /etc/openvpn/
И потом, вы должны скопировать все сертификаты клиентов и ключики к удаленным клиентам VPN для аутентификации на сервере VPN. В нашем случае, мы сформировали сертификаты и ключи только для одного клиент, поэтому мы должны скопируйте следующие файлы клиенту VPN:
- ca.crt
- client.crt
- client.key
Убедитесь, что вы установили OpenVPN пакет на клиентских системах. Затем скопируйте вышеуказанные файлы в вашу систему VPN клиента, выполняем:
# scp ca.crt client.crt client.key root@78.140.189.243:/etc/openvpn
Или можно это сделать по отдельности!
# sudo scp root@78.140.189.243:/etc/openvpn/easy-rsa/keys/ca.key /etc/openvpn/ # sudo scp root@78.140.189.243:/etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/ # sudo scp root@78.140.189.243:/etc/openvpn/easy-rsa/keys/client.crt /etc/openvpn/ #sudo scp root@78.140.189.243:/etc/openvpn/easy-rsa/keys/client.key /etc/openvpn/
Если не знаете как пользоваться SCP, то следующий материал поможет Вам:
Как скопировать данные через SCP в Linux
Удаление доступа клиентов к серверу VPN
Если вы хотите удалить доступ пользователя(ей) к серверу VPN, введите и выполните:
# . /etc/openvpn/easy-rsa/2.0/vars # . /etc/openvpn/easy-rsa/2.0/revoke-full client
Эти команды служат для удаления пользователей, которые имеют сертификаты для доступа к серверу VPN.
Настройка VPN сервера
Теперь, мы должны настроить наш сервер VPN. Скопируйте файл server.conf в /etc/openvpn/, для этого выполните:
# cp /usr/share/doc/openvpn-2.3.2/sample/sample-config-files/server.conf /etc/openvpn/
Сейчас отредактируем данный конфигурационный файл и настроим мы его под себя:
# vim /etc/openvpn/server.conf
#Найти и раскомментируйте следующие строки [...] # (see "pkcs12" directive in man page). ca ca.crt cert my_server.crt key my_server.key [...] # 2048 bit keys. dh dh2048.pem [...] push "redirect-gateway def1 bypass-dhcp" [...] Кроме того, Раскомментировать и измените DNS-сервера, чтобы отразить свои собственные значения DNS. Здесь я использую Google серверы общих ДНС. [...] push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" [...] user nobody group nobody [...]
Сохраните и закройте файл.
ПС: Если у Вас не будет что то работать, то проверьте правильность ключей ( именно их расположение) и если что пропишите полный путь к ключам. Можно проверить работоспособность нашего конфига, для этого служит следующая команда:
# sudo openvpn --config /etc/openvpn/server.conf
Тогда нам нужно скопировать и отредактировать файл client.conf. Этот файл должны быть передан в VPN клиентам. Во-первых скопируйте файл в любое место (напр./home/your_user/ ).
# cp /usr/share/doc/openvpn-2.3.2/sample/sample-config-files/client.conf /home/captain/
И сейчас я его поправлю:
# vim /home/captain/client.conf
Установите для сервера хост имя / IP-адрес для VPN: # Имя хоста / IP + порт сервера. # Вы можете иметь несколько удаленных записей # Для балансировки нагрузки между серверами. remote 78.140.189.243 1194
ПС: Если у Вас не будет что то работать, то проверьте правильность ключей ( именно их расположение) и если что пропишите полный путь к ключам.
Здесь 78.140.189.243 мой IP адрес сервера VPN. Затем Скопируйте файл client.conf на машину клиента:
# sudo scp root@78.140.189.243:/home/admin/client.conf /etc/openvpn/
IP экспедирование(forwarding) и маршрутизация (routing) конфигурации
Нужно отредактировать sysctl.conf и внести некоторые изменения:
# vim /etc/sysctl.conf
Найдите следующую строку и установить значение «1», чтобы включить переадресацию IP.
# Управляет пересылку IP-пакетов (Controls IP packet forwarding) net.ipv4.ip_forward = 1
Выполните следующую команду, чтобы применить изменения Sysctl:
# sysctl -p
Отрегулируйте IPTables для передачи трафика через VPN должным образом, для этого введите следующие команды один за другим:
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Сохраните изменения в IPTABLES с помощью:
# service iptables save
После чего перезапускаем:
# service iptables restart
Наконец, запустите сервис OpenVPN и сделайте чтобы стартавал при запуске вашей ОС:
# service openvpn start # chkconfig openvpn on
В это время, вы должны иметь работающий сервер OpenVPN. Далее, давайте перейдем к конфигурации на стороне клиента.
Убедитесь, что интерфейс VPN (tun0) создается с помощью команды Ifconfig:
# ifconfig
Должно быть что то типа этого!
Конфигурация OpenVPN на стороне клиента
1. Если клиентская машина использует CentOS или Fedora, RedHat
2. Если клиентская машина использует Debian, Ubuntu или Linux Mint
На этом я завершаю данную тему «Установка openvpn на RedHat/CentOS/Fedora», спасибо за посещение своего сайта http://linux-notes.org
Автозапуск на Centos 7
systemctl enable openvpn@client.service
systemctl start openvpn@server.service
Спасибо за дополнение 🙂