Настройка openvpn linux fedora

OpenVPN Fedora Server

Установка и настройка OpenVPN сервера на Fedora (на момент написания стати 35 релиз) — дистрибутив, который отлично подходит для запуска персонального VPN сервера. Он достаточно стабилен для такой задачи, а всё необходимое для настройки VPN доступно в основных репозиториях системы.

OpenVPN сервер.

1. Первичная подготовка.

Устанавливаем необходимые пакеты и готовим окружение.

# dnf install openvpn easy-rsa firewalld zip # mkdir -p /etc/openvpn/easy-rsa/keys # cp -arvp /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/ # cp /etc/openvpn/easy-rsa/openssl-easyrsa.cnf /etc/openvpn/easy-rsa/openssl.cnf
2. Создаём сертификаты.

Открываем файл /etc/openvpn/easy-rsa/vars и при необходимости указываем в нём нужные данные:

export KEY_COUNTRY="RU" export KEY_PROVINCE="RU" export KEY_CITY="Vologda" export KEY_ORG="VologdaVPN" export KEY_EMAIL="info@vologdavpn.com" export KEY_OU="VologdaVPN"

Генерируем сертификат и ключ для сервера. Стоит отметить, что при выполнении команд здесь используется параметр nopass. При необходимости использования дополнительных паролей, генерировать сертификаты нужно без nopass.

# cd /etc/openvpn/easy-rsa # ./easyrsa init-pki # ./easyrsa build-ca # ./easyrsa gen-dh # ./easyrsa build-server-full server nopass # ./easyrsa gen-crl # openvpn --genkey --secret /etc/openvpn/easy-rsa/pki/ta.key # cp -rp /etc/openvpn/easy-rsa/pki/ /etc/openvpn/server/
3. Пишем конфиг OpenVPN сервера.

Открываем файл /etc/openvpn/server/server.conf и прописываем следующее…

# cat /etc/openvpn/server.conf local 1.2.3.4 port 3333 proto udp dev tun ca ca.crt cert issued/server.crt key private/server.key dh dh.pem crl-verify crl.pem tls-auth ta.key 0 server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" keepalive 10 120 user nobody group nobody persist-key persist-tun mssfix fragment 1300 sndbuf 524288 rcvbuf 524288 push "sndbuf 524288" push "rcvbuf 524288" log openvpn.log verb 5

1.2.3.4 здесь — это IP сервера, 3333 — порт, на котором будет работать сервер. При необходимости, ведение лога можно перенаправить в /dev/null. В данной конфигурации так же используется увеличенный буфер. Подробнее об этом нужно прочитать в отдельной заметке.

Читайте также:  Разработчики операционной системы линукс

Конфиг сохраняем, сервис openvpn перезапускаем и добавляем его в автозапуск.

# systemctl -f enable openvpn-server@server.service # systemctl restart openvpn-server@server.service
4. Настраиваем firewalld и разрешаем форвардинг.

Запускаем firewalld, если он ещё не был запущен ранее.

# systemctl -f enable firewalld # systemctl restart firewalld
# firewall-cmd --permanent --add-masquerade # INTFS=$(ip route get 8.8.8.8 | awk 'NR==1 ') # firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $INTFS -j MASQUERADE # firewall-cmd --reload
# cat /etc/sysctl.conf net.ipv4.ip_forward = 1 # sysctl -p

Открываем порт для соединения (в нашем случае это 3333). Для работы VPN по UDP, открыть нужно UDP порт:

# firewall-cmd --permanent --zone=public --add-port=3333/udp

Для работы по TCP, соответственно:

# firewall-cmd --permanent --zone=public --add-port=3333/tcp

Не забываем перезапустить firewalld:

5. Не забываем о SELinux:

Порт 3333 нужно заменить на тот, что будет использоваться в конфиге сервера. В примере ниже разрешение даётся для udp на 3333 порте.

# semanage port -a -t openvpn_port_t -p udp 3333
6. Создаём сертификаты для клиента.

В примере, для клиента используется имя client, пароль для его сертификата так же не указывается. Для создания сертификата с паролем, вторая команда должна быть выполнена без nopass.

# cd /etc/openvpn/easy-rsa # ./easyrsa build-client-full client nopass # mkdir /root/clientserts # cp /etc/openvpn/easy-rsa/pki/ /root/clientserts/ # cd /root/ # zip -r -9 clientserts.zip clientserts/
7. Отзываем сертификат для клиента.

При необходимости отозвать сертификат и не дать возможности клиенту подключиться к серверу, необходимо сделать следующее (в примере описан отзыв для клиента client):

# cd /etc/openvpn/easy-rsa/ # ./easyrsa revoke client

Генерируем список отозванных сертификатов (CRL). И копируем его в директорию vpn сервера:

# ./easyrsa gen-crl # mv /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/server/

CRL в конфиге сервера подключается с помощью строки:

Файл нужно переносить в директорию vpn сервера каждый раз, как новый сертификат будет отозван. После этого, сервер необходимо перезаустить:

# systemctl restart openvpn-server@server.service

OpenVPN клиенты.

Настраиваем подключение в Linux, с помощью NetworkManager следующим образом…

Читайте также:  Linux history удалить несколько строк

Источник

OpenVPN SOP

OpenVPN is our server→server VPN solution. It is deployed in a routeless manner and uses ansible managed keys for authentication. All hosts should be given static IP’s and a hostname.vpn.fedoraproject.org DNS address.

Contact Information

Fedora Infrastructure Team

Provides vpn solution for our infrastructure.

Add a new host

Create/sign the keys

From batcave01 check out the private repo:

# This is to ensure that the clone is not world-readable at any point. RESTORE_UMASK=$(umask -p) umask 0077 git clone /srv/git/ansible-private $RESTORE_UMASK cd ansible-private/vpn/openvpn

Next prepare your environment and run the build-key script. This example is for host «proxy4.fedora.iad2.redhat.com»:

. ./vars ./build-key $FQDN # ./revoke-full $FQDN to revoke keys that are no longer used. git add . git commit -a git push

Create Static IP

Giving static IP’s out in openvpn is mostly painless. Take a look at other examples but each host gets a file and 2 IP’s.:

git clone https://pagure.io/fedora-infra/ansible.git vi ansible/roles/openvpn/server/files/ccd/$FQDN

The file format should look like this:

ifconfig-push 192.168.1.314 192.168.0.314

Basically the first IP is the IP that is contactable over the vpn and should always take the format «192.168.1.x» and the PtPIP is the same ip on a different network: «192.168.0.x»

git add . git commit -m "What have you done?" git push

And then push that out to bastion:

sudo -i ansible-playbook $(pwd)/playbooks/groups/bastion.yml -t openvpn

Create DNS entry

After you have your static IP ready, just add the entry to DNS:

git clone /srv/git/dns && cd dns vi master/168.192.in-addr.arpa # pick out an ip that's unused vi master/vpn.fedoraproject.org git commit -m "What have you done?" ./do-domains git commit -m "done build." git push

And push that out to the name servers with:

sudo -i ansible ns\* -a "/usr/local/bin/update-dns"

Update resolv.conf on the client

To make sure traffic actually goes over the VPN, make sure the search line in /etc/resolv.conf looks like:

search vpn.fedoraproject.org fedoraproject.org
search iad2.fedoraproject.org vpn.fedoraproject.org fedoraproject.org

Remove a host

# This is to ensure that the clone is not world-readable at any point. RESTORE_UMASK=$(umask -p) umask 0077 git clone /srv/git/ansible-private $RESTORE_UMASK cd ansible-private/vpn/openvpn

Next prepare your environment and run the build-key script. This example is for host «proxy4.fedora.iad2.redhat.com»:

. ./vars ./revoke-full $FQDN git add . git commit -a git push

TODO

Deploy an additional VPN server outside of IAD2. OpenVPN does support failover automatically so if configured properly, when the primary VPN server goes down all hosts should connect to the next host in the list.

Читайте также:  How to open linux in ubuntu

All Fedora Documentation content available under CC BY-SA 4.0 or, when specifically noted, under another accepted free and open content license.

Fedora Logo

Last build: 2023-07-13 23:51:42 UTC | Last content update: 2021-09-07

Источник

Оцените статью
Adblock
detector