The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

OpenVPN на Ubuntu Server (openvpn tunnel ubuntu vpn)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: openvpn, tunnel, ubuntu, vpn,  (найти похожие документы)
From: Alchemist <lipovetskiy@yandex.ru.> Newsgroups: email Date: Mon, 21 Dec 2008 17:02:14 +0000 (UTC) Subject: OpenVPN на Ubuntu Server Объединение центрального офиса с филиалами, складами и т.д. в единую сеть - это то, с чем приходится довольно часто сталкиваться администратору сети. Объединять сети можно "хардвардным" способом на железяках (Cisco, D-Link, etc) и "программным" на серваках под разными ОС (Windows, Linux, BSD). При наличии сервера на железяки можно не разоряться, а воспользоваться тем что есть, тем более что функционал в этом случае будет более широкий. В связи с планирующимся расширением фирмы, я решил заранее выбрать и обкатать наиболее подходящую схему объединения офисов. Немного погуглив, остановился на OpenVPN, как на более защищенном и не особо замороченом способе. Дистрибутивом взял Ubuntu Server 8,04 i386 т.к. очень хотелось пощупать Убунту в виде сервера и посмотреть на что она способна. Экспериментировал в виртуальных сетях под VMware Server. Схема соединения сетей следующая: 192.168.120.0 <serv1> 10.0.0.0 <serv2> 192.168.110.0 На каждом сервере поднят межсетевой экран iptables и nat. Для того, чтобы серверы могли устанавливать ПО из реальной глобальной сети, я подключал к ним третий bridged интерфейс. Далее в конфигурационных файлах я его упоминать не стал. Устанавливаем сервер (serv1) После нетривиальной установки, которую не буду описывать, конфигурируем сетевые интерфейсы: # cat /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.0.0.10 netmask 255.255.255.0 auto eth1 iface eth1 inet static address 192.168.120.20 netmask 255.255.255.0 Делаем из него роутер путем добавления в /etc/sysctl.conf строчки: net.ipv4.ip_forward=1 Настраиваем путь к репозиторям из которых будем устанавливать ПО: # cat /etc/apt/sources.list deb http://ru.archive.ubuntu.com/ubuntu/ hardy main contrib non-free restricted universe multiverse deb-src http://ru.archive.ubuntu.com/ubuntu/ hardy main contrib non-free restricted universe multiverse deb http://ru.archive.ubuntu.com/ubuntu/ hardy-updates main contrib non-free restricted universe multiverse deb-src http://ru.archive.ubuntu.com/ubuntu/ hardy-updates main contrib non-free restricted universe multiverse deb http://ru.archive.ubuntu.com/ubuntu/ hardy-security main contrib non-free restricted universe multiverse deb-src http://ru.archive.ubuntu.com/ubuntu/ hardy-security main contrib non-free restricted universe multiverse Дальше устанавливаем дополнительное ПО, предварительно обновившись: # aptitude update # aptitude upgrade # aptitude install console-cyrillic mc traceroute openvpn vsftpd Для работы OpenVPN необходимо создать сретификаты и конфигурационный файл openvpn.conf. Для генерирования сертификатов переходим в каталог easy-rsa: # cd /usr/share/doc/openvpn/examples/easy-rsa/2,0 Заполняем шаблонный файл с пременными vars. Я заполнил только последнюю часть с данными о фирме, городе и т.п., плюс изменил директорию с ключами: export KEY_DIR="/etc/openvpn/keys" Генерируем сертификаты: # ./build-dh # ./pkitool -initca # ./pkitool -server server # ./pkitool client Созданные сертификаты должны появиться в вышеуказанной папке, если конечно вы ее предварительно создали. Дальше пишем конфиг сервера. Читал разные статьи на эту тему, наступал на грабли, но в итоге плюнул и без проблем все сделал по примерам, которые лежат в папке /usr/share/doc/openvpn/examples/sample-config-files. В итоге получился такой конфиг: #cat /etc/openvpn/openvpn.conf dev tun tls-server proto udp port 3333 comp-lzo persist-tun persist-key # указываем узловые точки виртуальной сети ifconfig 10.1.0.1 10.1.0.2 # добавляем маршрут к локальной сети филиала route 192.168.110.0 255.255.255.0 dh /etc/openvpn/keys/dh1024.pem ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key log /var/log/openvpn.log verb 3 Все готово, делаем рестарт сервера и убеждаемся в том, что все ОК: # /etc/init.d/openvpn restart # ps -ely | grep openvpn Для полного счастья добавляем правила в iptables (приведенный ниже вариант может отличаться, в зависимости от вашей конфигурации): iptables -A INPUT -p udp -dport 3333 -j ACCEPT iptables -A INPUT -i tun0 -j ACCEPT iptables -A FORWARD -i tun0 -j ACCEPT iptables -A FORWARD -o tun0 -j ACCEPT Установка клиента (serv2) В плане установки и настройки системы проделываем то же самое, что и с предыдущем сервером. # cat /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.0.0.20 netmask 255.255.255.0 auto eth1 iface eth1 inet static address 192.168.110.10 netmask 255.255.255.0 Сертификаты нужно скопировать с центрального сервера. Я для этих целей поднимал там ftp. dev tun tls-client remote 10.0.0.10 proto udp port 3333 comp-lzo persist-tun persist-key # указываем узловые точки виртуальной сети ifconfig 10.1.0.2 10.1.0.1 # добавляем маршрут к локальной сети офиса route 192.168.120.0 255.255.255.0 dh /etc/openvpn/keys/dh1024.pem ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/client.crt key /etc/openvpn/keys/client.key log /var/log/openvpn.log verb 3 Запускаем: # /etc/init.d/openvpn restart Правим фаервол: iptables -A INPUT -i tun0 -j ACCEPT iptables -A FORWARD -i tun0 -j ACCEPT iptables -A FORWARD -o tun0 -j ACCEPT Пингуем хосты противоположных сетей по их внутренним адресам с обоих серверов и с клиентских машин каждой локальной сети. Итоговые впечатления: все стабильно, секьюрно и удобно, а Ubuntu Server может быть достойной заменой Debian.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Genix (?), 11:27, 25/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Соединение точка точка получилось, которое еще придется и руками править роутинг в случае изменения адресов (добавления новых сетей) на серверной стороне.
    Вместо этого лучше было бы заиспользовать push со стороны сервера на клиента -- тогда достаточно было бы только изменить конфиг и перестартануть сервер.
    Плюс в вашей схеме офисы не будут видеть друг друга.
     
     
  • 2.27, Alchemist (ok), 00:18, 16/01/2009 [^] [^^] [^^^] [ответить]  
  • +/
    В моей схеме офисы друг друга видели, иначе я эту статью не написал бы ;)
     

  • 1.2, гость (?), 12:04, 25/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    делал подобное, клиенты - win сервера с openvpn. а так всё в бою работает, сети связывает... бывает тока у винды слетают маршруты, repair интерфейса делать приходиться, пока не нашёл почему и как
     
  • 1.3, metallic (?), 13:42, 25/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сделал сервер на линуксе, клиент винда (openvpn-gui)
    Скажите, можно ли несколько сертификатов нагенерить, чтобы у каждого клиента свои были? Типа как пароли. И может ли сервер держать несколько соединений одновременно?
     
     
  • 2.4, f00fc7c8 (?), 13:50, 25/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    >Сделал сервер на линуксе, клиент винда (openvpn-gui)
    >Скажите, можно ли несколько сертификатов нагенерить, чтобы у каждого клиента свои были?
    >Типа как пароли. И может ли сервер держать несколько соединений одновременно?
    >

    Ответ на все вопросы - Да.

     
     
  • 3.5, metallic (?), 13:54, 25/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Еще два попроса.
    1. А можно вместо сертификатов использовать пароли?
    2. А можно вместе с сертификатами использовать пароли?
     
     
  • 4.7, StreSS (?), 15:20, 25/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    1. точно да
    2. не уверен, но кажется тоже да
     
     
  • 5.8, Zl0 (?), 16:41, 25/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    2. корневой сертификат клиенту все равно будет нужен, но если на сервер указать авторизацию по паролям то клиент не обменивается ключами, а сразу просит ввести логин/пароль
     
  • 5.11, Max (??), 18:41, 25/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Как без сертификатов?

    Тут сертификат подтверждает, что к серверу подключился тот у кого, есть права и клиент знает, что подключился настоящему серверу.

    Я сомневаюсь, что можно без сертификатов.

    Если просто использовать пароль у клиента, то как узнать, что это настоящий сервер?

    В броузерах есть стандартные корневые сертефикаты.
    Тут корневой серт делаешь руками сам.

     
     
  • 6.15, User294 (??), 19:30, 25/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    >Как без сертификатов?

    Shared secret'ом наприимер можно.Тогда сертификаты не нужны но у метода есть ряд недостатков как то 1 клиент - 1 сервер.Хорошо для соединений точка-точка по быстрому, но не более того.

    P.S. а на сайт openvpn'а зайти религия не позволяет?Там примеры есть.

     
  • 6.18, Zl0 (?), 07:29, 26/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    У нас сертификат используется как раз для того чтобы проверить что сервер настоящий, а авторизация сама происходит через радиус по учетки из АД, как альтернатива pptpd получается, правда не совсем полноценная.
     
  • 4.17, el torito (?), 23:15, 25/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Я вместо как бы пароля использовал passphrase на ключ сертификата. Это, конечно, не пароль в прямом смысле слова, потому как проверяется исключительно локально, но по сути ограничивает доступ тем, кто passphrase не знает :)
     
     
  • 5.24, User294 (??), 18:20, 26/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    >Я вместо как бы пароля использовал passphrase на ключ сертификата. Это, конечно,
    >не пароль в прямом смысле слова, потому как проверяется исключительно локально,

    Он не проверяется локально, он позволяет локальному юзеру сертификат поюзать.Без знания passphrase сертификат бесполезен: как я понимаю passphrase шифрует приватный ключ и соответственно без знания passphrase сертификат не более чем куча мусора.Только смысла то в разных passphrase если как я понимаю юзеры аутентифицируются их сертификатами?Разве что на случай когда у юзера сертификат сперли?И то - при такой прыти хаксоры его вместе с паролем упрут если уж они знают что стырить надо :)

     

  • 1.6, Аноним (6), 14:26, 25/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    комментарии полезнее чем сама заметка.
    тем более поржал над поднятием ФТП для передачи секретных ключей!!!
    осильте man scp

     
     
  • 2.9, metallic (?), 17:23, 25/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    >комментарии полезнее чем сама заметка.
    >тем более поржал над поднятием ФТП для передачи секретных ключей!!!
    >осильте man scp
    >

    Ну мне статья помогла, я как раз второй день инет рыл в поисках нормального руководства степ бай степ, так сказать, раньше ничего на openvpn не делал. Везде что-то было не понятно, эта статья более мение ясность внесла, но опять же пользовался еще другими.

     
     
  • 3.19, f00fc7c8 (?), 09:24, 26/12/2008 [^] [^^] [^^^] [ответить]  
  • +/

    >Ну мне статья помогла, я как раз второй день инет рыл в
    >поисках нормального руководства степ бай степ, так сказать

    "Степ бай степ, пока от монитора не ослеп."
    Извините не удержался :)

     
  • 2.28, Alchemist (ok), 00:24, 16/01/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >тем более поржал над поднятием ФТП для передачи секретных ключей!!!
    >осильте man scp
    >

    Все и сразу знать не возможно. Спасибо за идею ;)

     

  • 1.10, metallic (?), 17:34, 25/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кстати, в чем разница демон на tcp порту или udp?
     
     
  • 2.12, Max (??), 18:46, 25/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    UDP будет быстрей.

    TCP 0.5mbit
    UDP 2-4mbit

    Это реальный пример впн

    UDP содержет в себе IP пакет
    UDP передаються не последовательно и без гарантии
    TCP передаёт последовательно и с гарантией.
    Если есть потери то будет сильно тормазить.

     
  • 2.14, User294 (??), 19:21, 25/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    >Кстати, в чем разница демон на tcp порту или udp?

    Тем что TCP - это на крайний случай, когда UDP не пролезает, например бывает так что в некоторых конфигурациях файрвол или нат совсем мочат весь UDP траффик.Но если есть возможность использовать UDP - следует пользоваться именно им.Поскольку TCP своими повторами передач изрядно испортит жизнь протоколам пропихнутым в туннеле, которые на такую услугу не рассчитывают.Поэтому как правило данная услуга TCP оказывается медвежъей - в случае таймаута начинается штопор из потуг перепослать пакеты как TCP стэком так и теми протоколами которые внутри конекции жили, поскольку они обычно на надежность канала не рассчитывают(например TCP в впн не знает о том что он уже работает по надежному каналу).Ничего хорошего из такого штопора обычно не получается, обычно в итоге сильно просаживается скорость.Так что TCP - это на крайний случай, когда UDP не пролезает.

     
  • 2.16, Stell (??), 22:10, 25/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Подробно минусы TCP внутри TCP описаны здесь:
    http://sites.inka.de/sites/bigred/devel/tcp-tcp.html

    TCP, как и было сказано выше - компромисс, когда например туннель надо пропустить через HTTP proxy, с разрешенным методом CONNECT.

     
  • 2.25, remi (?), 15:37, 27/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Может быть, я чего-то не понимаю, или не до конца разобрался, но в использовании UDP я нашел несколько неприятных моментов:

    1) В UDP-режиме невозможно использовать опцию mode server. Если верить man openvpn именно эта опция дает "multi-client server capability", и по логике вещей, без нее ваш экземпляр openvpn будет работать только с одним клиентом.

    2) Если на подключающейся машине в конфиге указана опция explicit-exit-notify, то при завершении работы openvpn на этой машине соответствующий экземпляр на сервере также завершает свою работу (!). С учетом сказанного в п. 1, это делает UDP непригодным для использования там, где к серверу подключаются пользователи.

    2) В случае использования UDP считается, что в соединении участвуют не клиенты и серверы, а "peers". Поэтому каждый запущенный экземпляр openvpn открывает для прослушивания порт 1194/udp на каждой из участвующих в соединении машин, независимо от того, кто к кому подключается.
    Для подключающейся машины это может быть нежелательно (или неприемлемо), особенно если на ней брандмауэр отключен (как, например, это имеет место в Ubuntu по умолчанию).

    Как избежать подобных неприятностей при использовании UDP, я что-то не нашел.
    Поправьте/просветите, если ошибаюсь.

     

  • 1.13, Boris (??), 18:55, 25/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    разнича в том что по udp не требуется подтверждение о доставке пакетов и вся логика лежит на проге, у меня например по tcp голос заикается, а по udp всё хорошо.

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

    в серверном конфиге нужно прописать маршруты, тут это сделано
    route 192.168.110.0 255.255.255.0

    на на стороне клиента или через папку ccd(параметры отсылаемые клиенту) на стороне сервера
    нужно установить
    iroute 192.168.110.0 255.255.255.0

     
  • 1.20, metallic (?), 10:13, 26/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Еще вопрос, на клиенте (Windows, Openvpn GUI)
    Я использую такие настройки ключей:

    ca "c:\\key\\ca.crt"
    cert "C:\\key\\client.crt"
    key "C:\\key\\client.key"

    Т.е. клиентом используется три ключа для подключения, это нормально? Насколько это все безопасно. На сервере побольше ключей лежит, скажите, где можно теорию почитать, какой ключ какую роль выполняет.

     
     
  • 2.21, Zl0 (?), 12:08, 26/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Это нормально и безопасно, точнее безопасность зависит не от того сколько у тебя сертификатов, а как они сгенерированы.
    Почитай
    http://openvpn.org/index.php/documentation/miscellaneous/rsa-key-management.h
     
     
  • 3.22, metallic (?), 12:13, 26/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    по дефолту KEY_SIZE=1024
    Этого хватит? Есть смысл 2048 ставить и более?
     

  • 1.23, DP (?), 17:00, 26/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    У меня так уже месяц работает, только вот начал думать о ФАЙЛ-Оваре.
    Типа на сервера написать
    Local IP1
    Local IP2
    REMOTE IP3


    BRANCH
    Local IP3
    REMOTE IP1
    REMOTE IP2
    будет работать?

     
     
  • 2.26, Анонм (?), 18:22, 30/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    >Типа на сервера написать

    Маркером на крышке корпуса?
    >будет работать?

    Думаю на работе сервера это не как не скажется, хотя он (сервер) может и обидеться :D

     

  • 1.29, Xaionaro (ok), 13:51, 30/12/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Найденные описки:
    < # cd /usr/share/doc/openvpn/examples/easy-rsa/2,0
    > # cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
    ># ./pkitool -initca
    ># ./pkitool -server server

    <# ./pkitool --initca
    <# ./pkitool --server server

     
     
  • 2.30, Xaionaro (ok), 13:52, 30/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Сам описался :). Найденные описки:
    < # cd /usr/share/doc/openvpn/examples/easy-rsa/2,0
    > # cd /usr/share/doc/openvpn/examples/easy-rsa/2.0

    <# ./pkitool -initca
    <# ./pkitool -server server
    ># ./pkitool --initca
    ># ./pkitool --server server

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру