OpenVPN установка и настройка, организация VPN канала

Часто при удаленной работе требуется организовать доступ сотрудника к корпоративной сети. Делается это обычно при помощи построения VPN канала. Часто используется пакет OpenVPN установка и настройка которого довольно просты.

Для доступа будут использоваться клиентский и серверный сертификаты и приватные ключи.

Помимо доступа к корпоративным ресурсам VPN может использоваться для сокрытия IP адреса и обхода любых блокировок.

 

 

OpenVPN установка и настройка на Ubuntu

Установим необходимые пакеты стандартным способом — из репозитория

apt-get install openvpn openssl iptables easy-rsa

 

Создаем каталог,  переходим в него и копируем все содержимое /usr/share/eary-rsa, оно было добавлено при установке пакета на предыдущем шаге

 

mkdir /etc/openvpn/easy-rsa

cd /etc/openvpn/easy-rsa

cp -r /usr/share/eary-rsa/* /etc/openvpn/easy-rsa

 

 

Корректируем настройки локализации в файле vars

mcedit vars

export KEY_COUNTRY=»RU»

 

Указываем подходящие параметры в директивах определяющих страну, город, организацию, отдел организации и email.

 

Также требуется задать имя сервера

export KEY_NAME=»server»

 

Несколькими последующими шагами мы создаем центр сертификации

 

source ./vars

Теперь при создании сертификатов будут подставляться данные указанные в файле vars.

 

./clean-all

./buld-ca

 

Последовательно несколько раз принимаем настройки указав произвольные данные
[ENTER]
[ENTER]

 

При создании ключа задаем имя сервера (server)

./build-key-server server

 

[ENTER]
[ENTER]

Задаем пароль

serverpassword

 

 

 

 

Теперь переходим к созданию ключа пользователя

source ./vars

./build-key-pass user1

 

В диалоге указываем имя пользователя и пароль, которые не должны совпадать с именем и паролем сервера

 

Чтобы обеспечить шифрование траффика создаем ключи ДиффиХеллмана (также применяется при установке SSL сертификатов на Nginx )

./build-dh

 

И ключи для tls аутентификации

openvpn —genkey —secret keys/ta.key

 

 

Создаем каталог под сертификаты и ключи пользователя

mkdir -p /etc/openvpn/keys

 

Копируем сгенерированные файлы, относящиеся к серверу

cp -r server.crt server.key ca.crt dh2048.pem ta.key  /etc/openvpn/

 

И файлы, относящиеся к пользователю

cp -r user* ca.key vpn.crt dh2048.pem vpn.key ca.crt ta.key /etc/openvpn/keys

 

Создаем конфигурационный файл

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | tee /etc/openvpn/vpn.conf

 

 

Создадим базовый конфиг openvpn

Сначала приведен весь файл, затем объяснения основных директив

mcedit server.conf

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
tls-auth ta.key 0
cipher AES-256-CBC
server 10.0.0.0 255.255.255.0
keepalive 10 120
persist-key
persist-tun
comp lzo
verb 3
client-config-dir ccd
status serbername-status.log
log /var/log/server.log
sndbuf 0
rcvbuf 0

ns-cert-type server

resolv-retry infinite
push «redirect-gateway def1»
push «dhcp-options DNS 8.8.8.8»

 

 

Указывается порт и используемый протокол, а также тип подключения — tun в данным случае — используется в большинстве случаев (для построения мостов применяется tub — отличие в необходимости )

port 1194
proto udp
dev tun
ca ca.crt
cert servername.crt
key servername.key
dh dh2048.pem
tls-auth ta.key 0

 

Указываем имена файлов сертификатов и ключей и tls-auth ta.key 0 — на стороне клиента будет тот же параметр, но с — 1

 

Задаем шифрование
cipher AES-256-CBC

server 10.0.0.0 255.255.255.0

 

Адрес клиенту будет выдаваться из диапазона, указанного на последнем шаге

 

По прошествии 120 секунд после обрыва связи будет производиться попытка переподключения
keepalive 10 120

persist-key
persist-tun

 

Последняя опция обеспечит восстановление канала после обрыва связи

 

Включаем компрессию
comp lzo

 

Уровень «подробности» логов — от 1 до 9
verb 3
client-config-dir ccd
status serbername-status.log
log /var/log/servername.log
sndbuf 0
rcvbuf 0

resolv-retry infinite

 

Не делать перерывы между попытками переподключения

ns-cert-type server

 

Это параметр, позволяющий предотвратить перехват трафика

 

Убираем ограничения буфера
push «redirect-gateway def1»

 

Включаем перенаправление трафика в канал
push «dhcp-options DNS 8.8.8.8»

 

 

Настройка пакета ограничивается созданием конфигурационного файла

Перезапускаем сервис

service openvpn restart

 

В случае возникновения неполадок в работе можно запускать openvpn указывая созданный файл

openvpn —config server.conf

netstat -npl

 

Разрешаем форвардинг пактов IP v4

mcedit /etc/sysctl.conf

net.ipv4.ip_foreward=1

 

sysctl -p

 

Перезапускаем сервер или выполняем команду

echo '1' > /proc/sys/net/ipv4/conf/all/forewarding

 

 

 

Производим настройку iptables для работы OpenVPN

iptables -t nat -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE

iptables-save

 

atp-get install iptables-persistent

service iptables-persistent start

 

Перезапускаем и проверяем работу iptables-persistent

 

shutdown -r now

netstat -npl

iptables -L -t nat

 

 

Теперь создаем конфигурационный файл для пользователя

cd /etc/openvpn/ccd

 

Он практически идентичен конфигурационному файлу сервера

mcedit user1.conf

client
dev tun
proto udp
remote vpnserver_ip 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert user1.crt
key user1.crt
tls-auth ta.key 1
cipher AES-256-CBC
ns-cert-type server
comp-lzo
log user1.log
verb 3
sndbuf 0
rcvbuf 0

 

Упаковываем конфигурационные файлы пользователя в архив отправляем их на пользовательский ПК тем или иным способом

 

cd /etc/openvpn/ccd

tar -cvf user1.conf user1.crt user1.key ta.key ca.cert user1.tar

 

Если у пользователя статический IP адрес можно использовать scp, если нет FileZilla и sftp

 

scp tar.tar user1@ip

 

Переходим на компьютер пользователя

 

Распаковываем архив

tar -xvf user1.tar

sudo openvpn —config user1.conf

 

Вводим пароль пользователя

Проверяем IP адрес

curl https://www.whatismyip.com/my-ip-information/

 

Убеждаемся в том, что сейчас работаем через VPN

Прерываем связь комбинацией клавиш CTRL+C

 

Можно подключаться не через консоль, а использовать Network Manager. В качестве VPN в этом случае нужно указывать vpnserver_ip:1194:udp

 

Также подключиться можно и с Windows клиента, однако эта возможность рассматриваться эта будет).

При работе через VPN могут появиться небольшие задержки, которые можно измерить. Они вызваны особенностями работы сети.