The OpenNET Project / Index page

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

Организация VPN соединений вида сеть-сеть с использованием IpSec OpenS/WAN. (tunnel crypt ipsec vpn linux)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: tunnel, crypt, ipsec, vpn, linux,  (найти похожие документы)
From: Vyacheslav Khudyakov <slava@in4net.info.> Newsgroups: email Date: Mon, 12 Sep 2005 18:21:07 +0000 (UTC) Subject: Организация VPN соединений вида сеть-сеть с использованием IpSec OpenS/WAN. У вас есть две локальных сети, расположенных в территориально разделенных офисах или даже в разных городах. Рано или поздно перед вами встает задача объединения этих офисов в единую распределенную сеть, задача построения VPN (Virtual Private Network). Для включения данных сетей в VPN вам потребуется решить несколько вопросов: * В каком виде передавать информацию(трафик) между данными сетями? * Как обезопасить соединение, убедиться что на другой его стороне ваша сеть а не взломщик? * Какие образом организовать среду передачи данных, канал между сетями? На этим и многие другие вопросы отвечает протокол IpSec и его реализация OpenS/WAN. OpenS/WAN, http://www.openswan.org , это проект, в который по ряду причин был преобразован FreeS/WAN, http://www.freeswan.org , первая и самая распространенная реализация IpSec для Linux. В то время, как OpenS/WAN продолжает развиваться и поддерживает на данный момент ядра Linux 2.4, 2.6, развитие FreeS/WAN остановлено из-за существующих в штатах ограничений на экспорт технологий шифрования. Эти системы практически идентичны, как в области конфигурирования, так и идеалогии и кода. OpenS/WAN обеспечивает стек протоколов IpSec:AH и ESP для ядра Линукс, а также инструментарий для управления ими. IpSec позволяет шифровать данные между хостами, обеспечивая сохранность передаваемой информации. Шифрование, в IPSEC, выполняется протоколом ESP (Encapsulating Security Payload -- Инкапсулированные Защищенные Данные), аутентификация -- протоколом AH (Authentication Header -- Заголовок Аутентификации). В ветке 2.5 ядра Линукс появилась встроенная реализация IpSec, а также крипто-апи Джеймса Морриса, которые доступны сейчас уже "из коробки" любому пользователю системы с ядром 2.6. Стоит также отметить, что проект OpenS/WAN для ветки ядра 2.6 предоставляет свободу маневра, предлагая использовать как встроенную, NETKEY реализацию IpSec, так собственную KLIPS, обеспечивая пользователя, в обоих случаях, нужным инструментарием для организации VPN каналов. Для ветки 2.4, вы ограничены в выборе исключтельно KLIPS реализации протокола IpSec. В данной статье рассмотрен пример организации VPN сети, на основе шлюзов с Linux с ядрами 2.4, 2.6 и KLIPS реализации OpenS/WAN. Что вам необходимо? * Две локальных сети, разделенных на разные сегменты. В данном примере одна сеть, base.testnet.org, находится в адресном пространстве 192.168.0.0/24, а вторая сеть, head.testnet.org, находится в адресном пространстве 192.168.99.0/24. * Две шлюзовых машины с установленными Linux с ядрами 2.4, либо 2.6 и iptables. * По одному реальному IP адресу со стороны каждой сети, назначенному шлюзу в данной сети. Инсталяция IpSec и OpenS/WAN. Скачиваем последний стабильный пакет системы OpenS/WAN, в моем случае это 2.3.1. Если вы используете ядро 2.6 и решили воспользоваться встроенным в ядро проктолом IpSec, то при пересборке ядра включите опции PF_KEY, AH, ESP и все опции в CryptoAPI В том числе, рекомендую, включить ESPinUDP, позволяющий организовывать IpSec сквозь NAT провайдера. Если вы используете KLIPS реализацию IpSec для ядра 2.6, либо у вас система с ядром 2.4, то вам необходимо пропатчить ядро, для появления в нем поддержки IpSec. Переходим в каталог с исходными кодами OpenS/WAN. Патчим ядро # make KERNELSRC=/usr/src/linux precheck verset kpatch Также накатываем nappatch, реализующий nat traversal, что дает возможность организовывать IpSec каналы сквозь NAT провайдера: # make nattpatch | (cd /usr/src/linux && patch -p1) Кофигурируем и пересобираем патченное ядро, с включенными IpSec и Nat-T. Заключительным этапом ставим OpenS/WAN на систему, выполнив # make KERNELSRC=/usr/src/linux programs install в каталоге с OpenS/WAN. Конфигурирования OpenS/WAN. В первую очередь вам необходимо сформировать ключи, используемые шлюзами для аунтификации. Запускаем на обеих системах ipsec newhostkey, генерируя нужные нам ключи. Просматриваем части ключей, запустив на base.testnet.org: # ipsec showhostkey --left и на head.testnet.org: # ipsec showhostkey --right Получаем примерно такой вывод: # ipsec showhostkey --left # RSA 2192 bits head.testnet.org Tue Sep 6 16:40:56 2005 leftrsasigkey=0sAQNYqzYcTyd5I+Wta9XP... Переходим к файлу конфигурации. Файл конфигурации OpenS/WAN: /etc/ipsec/ipsec.conf version 2.0 # указание что файл отвечает версии 2.0 спецификации # конфигурация демона config setup forwardcontrol=yes # контроль форвардинга пакетов klipsdebug=none nat_traversal=yes # включем использование nat traversal plutodebug=none # соединения conn testnet-vpn #left шлюз нашей сети left=195.14.50.1 #ip адрес шлюза в первой сети leftid=@base.testnet.org # символический идентификатор сети leftsubnet=192.168.0.0/24 #RSA 2192 bits base.testnet.org Tue Sep 6 16:40:56 2005 leftrsasigkey=0sAQNYqzYcTyd5I+Wta... leftnexthop=%defaultroute #шлюз по умолчанию в данной сети, #либо указывается явно, либо берется из таблицы роутинга #Right шлюз нашей сети right=81.200.2.30 #ip адрес шлюза второй сети rightid=@head.testnet.org rightsubnet=192.168.99.0/24 #RSA 2192 bits base.testnet.org Tue Sep 6 21:03:39 2005 rightrsasigkey=0sAQOTjCqa0L70Yf2h... rightnexthop=%defaultroute #шлюз по умолчанию в данной сети, #либо указывается явно, либо берется из таблицы роутинга auto=add #действие, производимое при старте ipsec -- #в данном случае добавлять сеть, но не запускать Обращаю ваше внимание на то, что секции файла конфигурации отделены от заголовков секций знаком табуляции. Отсутствие данного раздедения будет приводить к ошибкам вида: # ipsec_setup: (/etc/ipsec/ipsec.conf, line 22) section header "left=195.14.50.1" has wrong number of fields (1) -- `stop' aborted На втором шлюзе создаем полностью аналогичный конфиг # scp /etc/ipsec/ipsec.conf root@head.tesnet.org:/etc/ipec/ipsec.conf Конфигурация Iptables. Для работы IpSec необходимо открыть во внешний мир и во внутрь 500 порт, по которому идет обмен сертификатам и ключами, а также разрешить свободное использование IpSec на обоих шлюзах нашей VPN сети: $IPTABLES -A INPUT -i $EXTERNAL_INT -p udp -s $IPSECSG --sport 500 --dport 500 -j ACCEPT $IPTABLES -A OUTPUT -o $EXTERNAL_INT -p udp -d $IPSECSG --sport 500 --dport 500 -j ACCEPT $IPTABLES -A INPUT -i $EXTERNAL_INT -p 50 -s $IPSECSG -j ACCEPT $IPTABLES -A OUTPUT -o $EXTERNAL_INT -p 50 -d $IPSECSG -j ACCEPT $IPTABLES -A INPUT -i $EXTERNAL_INT -p 51 -s $IPSECSG -j ACCEPT $IPTABLES -A OUTPUT -o $EXTERNAL_INT -p 51 -d $IPSECSG -j ACCEPT $IPTABLES -A INPUT -i $FREESWANVI -s $ANYWHERE -d $ANYWHERE -j ACCEPT $IPTABLES -A OUTPUT -o $FREESWANVI -s $ANYWHERE -d $ANYWHERE -j ACCEPT $IPTABLES -A FORWARD -p all -s 192.168.99.0/24 -d 192.168.0.0/24 -j ACCEPT $IPTABLES -A FORWARD -p all -s 192.168.0.0/24 -d 192.168.99.0/24 -j ACCEPT где $EXTERNAL_INT - внешний интерфейс сети, в нашем случае $EXTERNAL_INT="eth0" $FREESWANVI - интерфейс OpenS/Wan сети, в нашем случае $FREESWANVI="ipsec0" $IPSECSG - IP адрес шлюза на противолополженном конце сети, в нашем случае $IPSECSG=81.200.2.30 для base.tesnet.org и $IPSECSG=195.14.50.1 для head.testnet.org Кроме того, необходимо изменить политику для NAT, а именно не производить маскарадинг для пакетов, которые отправляются в противоложенную часть VPN сети: для base.testnet.org: $IPTABLES -t nat -A POSTROUTING -s $LAN_1 -d! 192.168.99.0/24 -j SNAT --to-source $IPADDR $IPTABLES -t nat -A POSTROUTING -s $IPADDR -d 192.168.99.0/24 -j SNAT --to-source $LOCALIP для head.testnet.org: $IPTABLES -t nat -A POSTROUTING -s $LAN_1 -d! 192.168.0.0/24 -j SNAT --to-source $IPADDR $IPTABLES -t nat -A POSTROUTING -s $IPADDR -d 192.168.0.0/24 -j SNAT --to-source $LOCALIP где $LAN_1 - ваша внутрення сеть, для base.tesnet.org $LAN_1="192.168.0.0/24", для head.tetnet.org LAN_1="192.168.99.0/24". $IPADDR - ip адрес шлюзовой машины, для base.testnet.org $IPADDR=195.14.50.1 а для head.testnet.org $IPSECSG=81.200.2.30. $LOCALIP - внутренний ip адрес шлюзовой машины, для base.testnet.org $LOCALIP=192.168.0.99 а для head.testnet.org $LOCALIP=192.168.99.99. Запуск и тестирование. Переходим к окончательной части реализации VPN. Осталось запустить организованную нами сеть и проверить ее работоспособность. Для этого стартуем на обоих шлюзах демон ipsec: # /etc/inint.d/ipsec start * Starting IPSEC ... ...ipsec_setup: Starting Openswan IPsec 2.3.1... [ ok ] На любом из них запускаем нашу тестовую сеть: # ipsec auto --up testnet-vpn 104 "net-net" #223: STATE_MAIN_I1: initiate 106 "net-net" #223: STATE_MAIN_I2: sent MI2, expecting MR2 108 "net-net" #223: STATE_MAIN_I3: sent MI3, expecting MR3 004 "net-net" #223: STATE_MAIN_I4: ISAKMP SA established 112 "net-net" #224: STATE_QUICK_I1: initiate 004 "net-net" #224: STATE_QUICK_I2: sent QI2, IPsec SA established при этом получаем на консоль вывод, из которого убеждаемся что соединение успешно установлено. Осталось протестировать как работает наша сеть. Пробем пингануть с любой машины внутри локальной сети head.testnet.org любую машину внутри сети base.testnet.org: # ping 192.168.0.100 PING 192.168.0.100 (192.168.0.100) 56(84) bytes of data. 64 bytes from 192.168.0.100: icmp_seq=1 ttl=127 time=15.2 ms 64 bytes from 192.168.0.100: icmp_seq=2 ttl=127 time=15.6 ms 64 bytes from 192.168.0.100: icmp_seq=3 ttl=127 time=16.2 ms --- 192.168.0.100 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2024ms rtt min/avg/max/mdev = 15.231/15.735/16.283/0.442 ms пинг проходит, осталось убедиться, что он проходит зашифрованным в пакетах IpSec. Для этого, в то время как вы пингуете с _любой_ машины _кроме_ шлюза одной сети _любую_ машину, _кроме_ шлюза второй сети на любом из шлюзов запускаем # tcpdump icmp -i ipsec0 В случае, если IpSec работает корректно, вы должны наблюдать примерно следующую картину: 19:16:32.046220 192.168.0.2 > 192.168.99.9: ESP(spi=0x3be6c4dc,seq=0x3) 19:16:32.085630 192.168.99.9 > 192.168.0.2: ESP(spi=0x5fdd1cf8,seq=0x6) На этом осталось совершить финальный акорд, включив автозапуск VPN сети. Для этого в файлах /etc/ipsec/ipsec.conf срочку auto=add заменяем на auto=start. Vyacheslav Khudyakov <slava@in4net.info.>

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, peterwork (?), 12:41, 13/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Давно есть здесь
    http://gentoo-wiki.com/HOWTO_OpenSwan_2.6_kernel
     
     
  • 2.2, Vyacheslav Khudyakov (?), 13:28, 13/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Круто, не знал =)
    Сам же работаю с дженту и под нее же ставил, там, кстати, ошибка в ebuild, не ставится необходимый для OpenS/WAN пакет при инсталяции.
     
  • 2.3, Vyacheslav Khudyakov (?), 14:15, 13/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Ну там все-таки иная инструкция, не так подробно расписано, не на русском, без общего описания протокола и принципов, без того как сделать проверку, без правил iptables, не описан процесс для ярда 2.4... и т.п.
     

  • 1.4, Serge (??), 15:47, 13/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А вот как быть в случае, если я хочу сделать отношение один-ко-многим? Т.е. с одного адреса (внешнего) бросить, например, 2 туннеля ?
     
     
  • 2.6, Romirin (?), 19:56, 13/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >А вот как быть в случае, если я хочу сделать отношение один-ко-многим?
    >Т.е. с одного адреса (внешнего) бросить, например, 2 туннеля ?

    в этом случае ставиш dlink dfl-1500 а на клиентах можно даже dfl-600 и все сеть готова! :)
    это самый простой вариант, при котором не нужно знать ни чего, кроме настроек этих фаерволов!

     

  • 1.5, Vaso Petrovi4 (?), 15:57, 13/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    pptp заюзай, так проще будет
     
  • 1.8, sypperpit (??), 11:13, 15/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    во Фри есть встроеное устроество VPN оно там только называется gif и условие чтоб с другой стороны была тоже FreeBSD
     
  • 1.9, Oleg (??), 15:48, 15/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Очень неплохо.
    Просто, доходчево, понятно даже тем, кто с этой темой на Линуксе сталкивается первый раз (например я). Спасибо
     
  • 1.10, Ash (?), 23:50, 28/07/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это конечно всё здорово, но ребята - тема такая - две локальные сети - одна машина, Windows. Можно какнибудь сделать чтоб любой пользователь из одной сети установив VPN соединение с моим компом смог связыватся с компами из другой сети?
     
  • 1.11, помогите пожалуйста (?), 11:14, 01/11/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Подскажите, тут описан пример в котором объеденяют 2-сети как зделать тоже самое если в одну сеть надо объеденить 3 и более офиса???
     
  • 1.12, Space (??), 08:48, 14/02/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    всё сделал по мануалу, vpn работает, соединение поднимается, но траффик идёт через обычный интерфэйс, а надо через секурный ! Интерфэйс ipsec0 не поднимается и не появляется. От чего такая батва?
     
  • 1.13, Rus (??), 17:23, 07/07/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кстати да!  Такая же проблема,   сделал как написано, а ipsec0  нету (

    Где копать?

     
  • 1.14, sisop (?), 11:06, 19/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а он и не должен появляться, если вы используете ядро 2.6 с NETKEY
     
  • 1.15, i (??), 20:15, 03/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а есть ли возможность поменять порт с 500 на другой?
     

    игнорирование участников | лог модерирования

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




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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