Coding Overhead

Do the best with what you have

OpenVPN

Создание серверных сертификатов

Устанавливаем необходимые утилиты. В Arch Linux делается следующей командой:

$ yaourt -S openvpn easy-rsa

На сервере нам понадобятся следующие файлы:

  1. /etc/openvpn/server/ca.crt
  2. /etc/openvpn/server/servername.crt and /etc/openvpn/server/servername.key
  3. /etc/openvpn/server/dh.pem
  4. /etc/openvpn/server/ta.key

Certificate Authority (CA)

  1. В первую очередь поднимаем собственный удостоверяющий центр с помощью easy-rsa.
# cd /etc/easy-rsa
# export EASYRSA=$(pwd)
# easyrsa init-pki
# easyrsa build-ca

Копируем сгенерированный публичный сертификат удостоверяющего центра в директорию openvpn:

# cp /etc/easy-rsa/pki/ca.crt /etc/openvpn/server/
  1. Генерируем сертификат и приватный ключ сервера:
# easyrsa gen-req servername nopass
# cp /etc/easy-rsa/pki/private/servername.key /etc/openvpn/server/

Сам сертификат необходимо подписать прежде чем копировать в директорию openvpn:

# easyrsa sign-req server servername
# cp /etc/easy-rsa/pki/issued/servername.crt /etc/openvpn/server/
  1. Diffie-Hellman (DH) файл
# openssl dhparam -out /etc/openvpn/server/dh.pem 2048
  1. Hash-based Message Authentication Code (HMAC) ключ
# openvpn --genkey --secret /etc/openvpn/server/ta.key

Создание клиентских сертификатов

# easyrsa gen-req client1 nopass
# easyrsa sign-req client client1

Сертификат будет сгенерирован в файле /etc/easy-rsa/pki/issued/client1.crt

Настройка сервера

# cp /usr/share/openvpn/examples/server.conf /etc/openvpn/server/server.conf

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

ca ca.crt
cert elmer.crt
key elmer.key

dh dh.pem

tls-auth ta.key 0
key-direction 0

user nobody
group nobody

Маршрутизация

Для начала необходимо включить постоянную пересылку пакетов. Для этого отредактируем файл /etc/sysctl.d/99-sysctl.conf:

net.ipv4.ip_forward=1

Для включения без перезагрузки:

# echo 1 > /proc/sys/net/ipv4/ip_forward

Чтобы предоставить доступ клиентам к сетям сервера редактируем файл /etc/openvpn/server/server.conf:

push "route 10.66.0.0 255.255.255.0"

По умолчанию клиенты не видят друг друга. Чтобы разрешить обмениваться пакетами между клиентами и клиентскими сетями добавляем следующую строку в файл /etc/openvpn/server/server.conf:

client-to-client

Для перенаправления всего траффика через сервер и указания dns-сервера добавляем:

push "redirect-gateway def1"
push "dhcp-option DNS <адрес dns>"

Для перенаправления так же понадобится настроить фаервол ufw или iptables.

ufw

Редактируем файл /etc/default/ufw:

DEFAULT_FORWARD_POLICY="ACCEPT"

В файл /etc/ufw/before.rules перед *filter добавляем (меняем enp1s0 на наш интерфейс):

# NAT (Network Address Translation) table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Allow traffic from clients to enp1s0
-A POSTROUTING -s 10.8.0.0/8 -o enp1s0 -j MASQUERADE

# don't delete the "COMMIT" line or the NAT table rules above won't be processed
COMMIT

И открываем порт командой:

# ufw allow 1194

iptables

# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o enp1s0 -j MASQUERADE
# iptables-save > /etc/iptables/iptables.rules

Настройка клиента

# cp /usr/share/openvpn/examples/client.conf /etc/openvpn/client/client.conf

Отредактируем файл /etc/openvpn/client/client.conf, указав следующие параметры:

remote <адрес сервера> 1194

ca ca.crt
cert client.crt
key client.key

tls-auth ta.key 1
key-direction 1

user nobody
group nobody

Вместо того, чтобы указывать пути к файлам ca.crt, client.crt, client.key и ta.key можно закоммертировать соответствующие строки и добавить в конец файла содержимое этих файлов следующим образом:

;ca ca.crt
;cert client.crt
;key client.key

;tls-auth ta.key 1

...

<ca>
<содержимое ca.crt>
</ca>

<cert>
<содержимое client.crt>
</cert>

<key>
<содержимое client.key>
</key>

<tls-auth>
<содержимое ta.key>
</tls-auth>