Каждому системному администратору рано или поздно приходится сталкиваться с 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 |
В роли 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 соединение с использованием сертификатов будет описано в следующей статье.
А как же маскарадинги (NAT) для остальных клиентов каждой из подсетей?
Вы немного не внимательны, здесь я описал режим Point-to-Point (как и написано в оглавлении…), а Вы пишете о client-server схеме, которую я описал в следующей статье
Я говорю, о том, что у вашем случае только 192.168.1.50 и 192.168.100.200 будут видеть друг друга и всё.
Все остальное с этих же сетей друг друга видеть не будет.
Но если под Point-to-Point имеется ввиду только соединение двух хостов с разных подсетей — то да, вы правы.
Ну хорошо, соединили Вы клиента и сервер. А что дальше, хоть один пример покажите, как можно войти в другую сеть или к направить трафик через Public DNS/ хоть что — нибудь. А то получается, что вся возня из — за ping — ов происходит.
В начале статья я подчеркнул, что в пределах данной статьи мы настроим только соединение между клиентом и сервером, чего достаточно для списка задач. И в зависимости от задачи использование VPN кардинально отличается, по этому писать про доступность веб-серверов или других портов(сервисов) на сервере через туннель, и т.п. лишено смысла. А пинг — это самый простой и быстрый способ показать доступность.
О доступности других сетей — описано в следующей статье.
О ДНС — ищите на других ресурсах.