OpenVPN. Установка и настройка point-to-point соединения

vpn-point
Каждому системному администратору рано или поздно приходится сталкиваться с VPN. Приватные сети нужны во многих случаях, к примеру соединить два удаленных офиса через Internet, настроить туннель между двумя удаленными серверами, настроить доступ в удаленную локальную сеть и т.п. VPN – это понятие довольно широкое и имеется очень много различного программного обеспечения которое позволяет настраивать различные типы VPN соединения как и с серверной так и клиентской стороны. В этой серии статей я расскажу о своем небольшом опыте настройки VPN сети на основе OpenVPN.

1. OpenVPN в режиме point-to-point

Для начала настроим VPN туннель с минимальными настройками и уровнем безопасности в режиме point-to-point. В этом режиме одновременно у нас может быть только одно соединение между клиентом и сервером, но иногда этого может быть достаточно в зависимости от поставленной задачи.

Таблица 1.1 – IP-адреса удаленных узлов.

 

WAN IP

LAN IP

VPN tun IP

Client

46.125.50.50

192.168.1.50

10.90.90.2

Server

82.30.5.200

192.168.100.200

10.90.90.1

point-to-point
Рисунок 1 – Схема сети

В роли OpenVPN сервера и клиент будет выступать Ubuntu 14.04.

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

Вся нужная информация у нас есть, пора приступить к настройке серверной части. Подключаемся к серверу и устанавливаем OpenVPN сервер.

root@vpnserver:~# apt-get install openvpn

Далее, генерируем общий секретный ключ.

root@vpnserver:~# openvpn --genkey --secret secret.key
root@vpnserver:~# ls
secret.key
root@vpnserver:~# cat secret.key
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
0ebc79af89f9da0e719e5100b28d86fb
df81bee8b86ea1e9bb1e1b97ed6dae9e
37a57097013e74094bc1110fbd3b76fc
f898fe328535da8ccbcfbb783b4c85fb
01e8d2802fbdfedd6fca60dfd1ae44c0
528c7b05d8f9df221161231f6fd3a702
fc4a1841433b03c6b92f82db3d4691bc
2142f56e44b00e258c94db7781204e92
dbc6f88ce5030d31dd2e91ade57cc8d3
ef869e64b0fe85f365fa2369babc627d
745caffd216a8384c83b080abf535208
6c3e00731a83f0a7818ad8d7fca5ac95
1671d4cb2ba128f2c1aa61fdf042a082
f28c52753c82ddfd4f20384591167022
70aef84d12152f1b2b232fd19f026350
005710cb4943ca1baafd6294e9ddc736
-----END OpenVPN Static key V1-----

Сразу скопируем ключ на удаленный клиент (только это нужно делать безопасным способом, а не через открытый канал).

root@vpnserver:~# rsync -avP secret.key 46.125.50.50:/root/
vagrant@46.125.50.50's password:
sending incremental file list
secret.key
            636 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)

sent 731 bytes  received 35 bytes  139.27 bytes/sec
total size is 636  speedup is 0.83

OpenVPN можно запускать используя конфигурационный файл или напрямую из командной строки используя опции. В данной случаи мы будем использовать опции.
Запускаем OpenVPN сервер.

root@vpnserver:~# openvpn --ifconfig 10.90.90.1 10.90.90.2 --dev tun --secret secret.key 0 --route 192.168.1.0 255.255.255.0 --verb 7

Здесь был запущен OpenVPN сервер в режиме tun с секретным ключом (направление 0) и дополнительным маршрутом к клиентской локальной сети. Ключ с «направлением» позволяет использовать разные ключи для кодирования и декодирования передаваемых данных. Как вы можете увидеть из полученного вывода.

root@vpnserver:~# openvpn --ifconfig 10.90.90.1 10.90.90.2 --dev tun --secret secret.key 0 --route 192.168.1.0 255.255.255.0 --verb 7
…
Wed Jan  6 23:06:33 2016 us=393091 Static Encrypt: CIPHER KEY: 0ebc79af 89f9da0e 719e5100 b28d86fb
Wed Jan  6 23:06:33 2016 us=394943 Static Encrypt: HMAC KEY: 01e8d280 2fbdfedd 6fca60df d1ae44c0 528c7b05
…
Wed Jan  6 23:06:33 2016 us=395570 Static Decrypt: CIPHER KEY: dbc6f88c e5030d31 dd2e91ad e57cc8d3
Wed Jan  6 23:06:33 2016 us=395777 Static Decrypt: HMAC KEY: 1671d4cb 2ba128f2 c1aa61fd f042a082 f28c5275
…

Переходим к настройке OpenVPN клиента.

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

Секретный ключ у нас есть, теперь устанавливаем OpenVPN клиент.

root@vpnclient:~# apt-get install openvpn

Теперь осталось запустить OpenVPN клиент.

root@vpnclient:~# openvpn --ifconfig 10.90.90.2 10.90.90.1 --dev tun --secret secret.key 1 --remote 82.30.5.200 --route 192.168.100.0 255.255.255.0 --verb 7
…
Wed Jan  6 23:24:48 2016 us=175790 Initialization Sequence Completed
…

Этот вывод означает, что мы успешно подключились к серверу. Здесь было добавлено дополнительный маршрут к серверной локальной сети.

1.3 Тестируем соединение

Теперь осталось проверить доступны ли все нужные сети с клиентской и серверной сторон.
Пингуем все адреса нашего клиент с сервера.

root@vpnserver:~# ping -c 4 46.125.50.50
PING 46.125.50.50 (46.125.50.50) 56(84) bytes of data.
64 bytes from 46.125.50.50: icmp_seq=1 ttl=53 time=126 ms
64 bytes from 46.125.50.50: icmp_seq=2 ttl=53 time=153 ms
64 bytes from 46.125.50.50: icmp_seq=3 ttl=53 time=122 ms
64 bytes from 46.125.50.50: icmp_seq=4 ttl=53 time=124 ms

root@vpnserver:~# ping -c 4 10.90.90.2
PING 10.90.90.2 (10.90.90.2) 56(84) bytes of data.
64 bytes from 10.90.90.2: icmp_seq=1 ttl=53 time=120 ms
64 bytes from 10.90.90.2: icmp_seq=2 ttl=53 time=146 ms
64 bytes from 10.90.90.2: icmp_seq=3 ttl=53 time=114 ms
64 bytes from 10.90.90.2: icmp_seq=4 ttl=53 time=116 ms

root@vpnserver:~# ping -c 4 192.168.1.50
PING 192.168.1.50 (192.168.1.50) 56(84) bytes of data.
64 bytes from 192.168.1.50: icmp_seq=1 ttl=53 time=134 ms
64 bytes from 192.168.1.50: icmp_seq=2 ttl=53 time=142 ms
64 bytes from 192.168.1.50: icmp_seq=3 ttl=53 time=141 ms
64 bytes from 192.168.1.50: icmp_seq=4 ttl=53 time=127 ms

Сначала проверено доступность клиент через public IP, потом доступность по OpenVPN IP адресу и на остаток доступ к клиентскому LAN IP.

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

root@vpnclient:~# ping -c 4 82.30.5.200
PING 82.30.5.200 (82.30.5.200) 56(84) bytes of data.
64 bytes from 82.30.5.200: icmp_seq=1 ttl=55 time=147 ms
64 bytes from 82.30.5.200: icmp_seq=2 ttl=55 time=145 ms
64 bytes from 82.30.5.200: icmp_seq=3 ttl=55 time=137 ms
64 bytes from 82.30.5.200: icmp_seq=4 ttl=55 time=138 ms

root@vpnclient:~# ping -c 4 10.90.90.1
PING 10.90.90.1 (10.90.90.1) 56(84) bytes of data.
64 bytes from 10.90.90.1: icmp_seq=1 ttl=55 time=124 ms
64 bytes from 10.90.90.1: icmp_seq=2 ttl=55 time=120 ms
64 bytes from 10.90.90.1: icmp_seq=3 ttl=55 time=126 ms
64 bytes from 10.90.90.1: icmp_seq=4 ttl=55 time=117 ms

root@vpnclient:~# ping -c 4 192.168.100.200
PING 192.168.100.200 (192.168.100.200) 56(84) bytes of data.
64 bytes from 192.168.100.200: icmp_seq=1 ttl=55 time=129 ms
64 bytes from 192.168.100.200: icmp_seq=2 ttl=55 time=121 ms
64 bytes from 192.168.100.200: icmp_seq=3 ttl=55 time=119 ms
64 bytes from 192.168.100.200: icmp_seq=4 ttl=55 time=122 ms

1.4 Использование конфигурационных файлов

До этого мы работали с командной строкой и писали долгую строку с набором опций, что не совсем удобно. Все эти опции можно прописать в конфигурационном файле и запустить OpenVPN как демон с выводом логов в отдельный файл. Конфигурационный файл OpenVPN сервера будет выглядеть следующим образом.

root@vpnserver:~# cat /etc/openvpn/vpnserver.conf
dev tun
proto udp
local 82.30.5.200
lport 1500
remote 46.125.50.50
rport 5000
secret /root/keystor/secret.key 0
ifconfig 10.90.90.1 10.90.90.2
route 192.168.1.0 255.255.255.0
user nobody # On Ubuntu
group nogroup # On Ubuntu
persist-tun
persist-key
keepalive 10 60
ping-timer-rem
verb 7
daemon
log-append /var/log/openvpn-server.log

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

root@vpnclient:~# cat /etc/openvpn/vpnclient.conf
dev tun
proto udp
local 46.125.50.50
lport 5000
remote 82.30.5.200
rport 1500
secret /root/keystor/secret.key 1
ifconfig 10.90.90.2 10.90.90.1
route 192.168.100.0 255.255.255.0
user nobody # On Ubuntu
group nogroup # On Ubuntu
persist-tun
persist-key
keepalive 10 60
ping-timer-rem
verb 7
daemon
log-append /var/log/openvpn-client.log

Теперь осталось запустить OpenVPN демон на обоих точках.

root@vpnserver:~# /etc/init.d/openvpn start
root@vpnclient:~# /etc/init.d/openvpn start

В данном случаи все логи будут перенаправлены в файл и OpenVPN будет работать в фоновом режиме. Настройка более безопасного VPN соединение с использованием сертификатов будет описано в следующей статье.

Автор: admin, 7 января 2016
Рубрики: Безопасность
Метки:
5 комментариев к сообщению: “OpenVPN. Установка и настройка point-to-point соединения”
  1. test_user:

    А как же маскарадинги (NAT) для остальных клиентов каждой из подсетей?

    • Вы немного не внимательны, здесь я описал режим Point-to-Point (как и написано в оглавлении…), а Вы пишете о client-server схеме, которую я описал в следующей статье

      • test_user:

        Я говорю, о том, что у вашем случае только 192.168.1.50 и 192.168.100.200 будут видеть друг друга и всё.
        Все остальное с этих же сетей друг друга видеть не будет.

        Но если под Point-to-Point имеется ввиду только соединение двух хостов с разных подсетей — то да, вы правы.

  2. Василий:

    Ну хорошо, соединили Вы клиента и сервер. А что дальше, хоть один пример покажите, как можно войти в другую сеть или к направить трафик через Public DNS/ хоть что — нибудь. А то получается, что вся возня из — за ping — ов происходит.

    • В начале статья я подчеркнул, что в пределах данной статьи мы настроим только соединение между клиентом и сервером, чего достаточно для списка задач. И в зависимости от задачи использование VPN кардинально отличается, по этому писать про доступность веб-серверов или других портов(сервисов) на сервере через туннель, и т.п. лишено смысла. А пинг — это самый простой и быстрый способ показать доступность.
      О доступности других сетей — описано в следующей статье.
      О ДНС — ищите на других ресурсах.

Написать комментарий

Последние статьи

Яндекс.Метрика
?>