The OpenNET Project / Index page

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

Создание VPN во FreeBSD на базе IPSEC и racoon (freebsd ipsec vpn racoon security tunnel)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: freebsd, ipsec, vpn, racoon, security, tunnel,  (найти похожие документы)
From: Andrew Machulan <machulan@mail.ru> Newsgroups: email Date: Mon, 4 Jul 2003 14:31:37 +0000 (UTC) Subject: Создание VPN во FreeBSD на базе IPSEC и racoon Создание VPN во FreeBSD на базе IPSEC и racoon. Исходим из предположения, что вам понадобилось объединить два офиса, шлюзами для которых в интернет являются машины с установленными на них FreeBSD. Я проделывал все это на FreeBSD 4.8. Исходим из таких адресов на шлюзах: Шлюз 1. Внешний IP (смотрящий в инет) - xxx.xxx.xxx.xxx Внутренний IP (смотрящий в сеть) - 10.1.1.1 Внутренняя сеть - 10.1.1.0/24 Шлюз 2. Внешний IP (смотрящий в инет) - yyy.yyy.yyy.yyy Внутренний IP (смотрящий в сеть) - 10.1.2.1 Внутренняя сеть - 10.1.2.0/24 Приступим. Для начала добавим в ядро поддержку IPSEC: options IPSEC options IPSEC_ESP options IPSEC_DEBUG для старых версий FreeBSD надо еще добавить количество gif интерфейсов, к примеру вот так: pseudo-device gif 4 В моем случае это не нужно, ибо 4.8 версия совсем не старая ;) Пересобираем ядро. Теперь добавим в rc.conf параметры отвечающие за поднятие тоннеля и запуск IPSEC: Шлюз 1. gifconfig_gif0="xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy" ifconfig_gif0="inet 10.1.1.1 10.1.2.1 netmask 255.255.255.0" static_routes="vpn" route_vpn="10.1.2.0/24 10.1.2.1" export route_vpn ipsec_enable="YES" ipsec_file="/etc/ipsec.conf" Шлюз 2. gifconfig_gif0="yyy.yyy.yyy.yyy xxx.xxx.xxx.xxx" ifconfig_gif0="inet 10.1.2.1 10.1.1.1 netmask 255.255.255.0" static_routes="vpn" route_vpn="10.1.1.0/24 10.1.1.1" export route_vpn ipsec_enable="YES" ipsec_file="/etc/ipsec.conf" Одного поднятия тоннеля мало, нам надо настроить еще и IPSEC. Создаем файл /etc/ipsec.conf, в который пишем следующее: Шлюз 1. flush; spdflush; spdadd 10.1.1.0/24 10.1.2.0/24 any -P out ipsec esp/tunnel/xxx.xxx.xxx.xxx-yyy.yyy.yyy.yyy/require; spdadd 10.1.2.0/24 10.1.1.0/24 any -P in ipsec esp/tunnel/yyy.yyy.yyy.yyy-xxx.xxx.xxx.xxx/require; Шлюз 2. flush; spdflush; spdadd 10.1.2.0/24 10.1.1.0/24 any -P out ipsec esp/tunnel/yyy.yyy.yyy.yyy-xxx.xxx.xxx.xxx/require; spdadd 10.1.1.0/24 10.1.2.0/24 any -P in ipsec esp/tunnel/xxx.xxx.xxx.xxx-yyy.yyy.yyy.yyy/require; Осталось только поставить и настроить racoon, который будет заниматься обменом ключей. На обоих шлюзах: cd /usr/ports/security/racoon; make install clean Правим файл конфигурации /usr/local/etc/racoon/racoon.conf # $KAME: racoon.conf.in,v 1.18 2001/08/16 06:33:40 itojun Exp $ # "path" must be placed before it should be used. # You can overwrite which you defined, but it should not use due to confusing. path include "/usr/local/etc/racoon" ; #include "remote.conf" ; # search this file for pre_shared_key with various ID key. path pre_shared_key "/usr/local/etc/racoon/psk.txt" ; # racoon will look for certificate file in the directory, # if the certificate/certificate request payload is received. path certificate "/usr/local/etc/cert" ; # "log" specifies logging level. It is followed by either "notify", "debug" # or "debug2". #log debug; # "padding" defines some parameter of padding. You should not touch these. padding { maximum_length 20; # maximum padding length. randomize off; # enable randomize length. strict_check off; # enable strict check. exclusive_tail off; # extract last one octet. } # if no listen directive is specified, racoon will listen to all # available interface addresses. listen { #isakmp ::1 [7000]; #isakmp 202.249.11.124 [500]; #admin [7002]; # administrative's port by kmpstat. #strict_address; # required all addresses must be bound. } # Specification of default various timer. timer { # These value can be changed per remote node. counter 5; # maximum trying count to send. interval 20 sec; # maximum interval to resend. persend 1; # the number of packets per a send. # timer for waiting to complete each phase. phase1 30 sec; phase2 15 sec; } remote anonymous { #exchange_mode main,aggressive; doi ipsec_doi; situation identity_only; #my_identifier address; #my_identifier user_fqdn "sakane@kame.net"; #peers_identifier user_fqdn "sakane@kame.net"; #certificate_type x509 "mycert" "mypriv"; nonce_size 16; lifetime time 24 hour; # sec,min,hour initial_contact on; support_mip6 on; proposal_check obey; # obey, strict or claim proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method pre_shared_key ; dh_group 2 ; } } sainfo anonymous { pfs_group 1; lifetime time 24 hour; encryption_algorithm 3des ; authentication_algorithm hmac_sha1; compression_algorithm deflate ; } Правим файл usr/local/etc/racoon/psk.txt: #Шлюз 1. yyy.yyy.yyy.yyy password:) #Шлюз 2. xxx.xxx.xxx.xxx password:) Если у вас на шлюзах есть фаервол (а ведь он у вас есть, правда?) тогда нам нужно разрешить трафик по нашему тоннелю, в ipf это делается так pass in log quick proto esp from any to any pass in log quick proto udp from any port = 500 to any port = 500 Желательно поставить это повыше в рулах. Вот и все. Остается собственно только перегрузить шлюзы. Попробуем теперь как это работает. К примеру для Шлюза 1. В одной консоли пишем ping 10.1.2.1, во второй tcpdump -i <внешний интерфейс> ip host yyy.yyy.yyy.yyy Наблюдать мы должный что-то типа: 19:16:13.207380 yyy.yyy.yyy.yyy > xxx.xxx.xxx.xxx: ESP(spi=0x04406f1c,seq=0x11b2) 19:16:14.024904 xxx.xxx.xxx.xxx > yyy.yyy.yyy.yyy: ESP(spi=0x0e57fdd4,seq=0x1581) Если наблюдаем, значит все у нас шифруется, а то что пинги идут доказывает то, что racoon сделал свое темное дело и обменялся ключами :) Возможно вам не захочется чтобы все машины из ваших подсеток видели друг друга, у меня это решено с помощью ipf следующим образом: pass in quick on xl1 from 10.1.1.51/32 to 10.1.2.0/24 pass in quick on xl1 from 10.1.1.58/32 to 10.1.2.0/24 block in quick on xl1 from 10.1.1.0/24 to 10.1.2.0/24 Здесь xl1 мой внутренний интерфейс. Мы пускаем в тоннель только машины 10.1.1.51 и 10.1.1.58 - остальные могут расслабиться :)

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

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, fdm (?), 12:05, 06/10/2003 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    А какие адреса на реальных (физических) интерфейсах смотрящих во внутреннюю сеть?
     
     
  • 2.2, Rabid (?), 15:17, 06/10/2003 [^] [ответить]    [к модератору]
  • +/
    Странный вопрос. Что значит "на реальных". Я ж подробно описал ситуацию. На внутреннем интерфейсе Шлюза 1 - 10.1.1.1, на Шлюзе 2 - 10.1.1.2 Имелись ввиду именно адреса на реальных интерфейсах.
     
  • 1.3, Crow (?), 20:33, 27/10/2003 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    Вроде бы как все сделал правильно, но не работает. Не идет пинг между шлюзами. Т.е. если со шлюза 1 дать команду ping 10.1.2.1, то пинг не проходит, пишет arplookup yyy.yyy.yyy.yyy failed: host is not in local subnet.
    Где я сделал неправильно?
    Заранее спасибо
     
  • 1.4, VVS (?), 14:57, 28/10/2003 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    наверняка где-то дефолтовый шлюз забыл. он же явно пишет, что не может пакет отроутить.
     
     
  • 2.5, Crow (?), 19:10, 28/10/2003 [^] [ответить]    [к модератору]
  • +/
    Спасибо за ответ.
    Да, действительно забыл шлюз. Забыл поставить в  /etc/rc.conf разрешение на создание gif-интерфейса. Сейчас поставил на обоих машинах, в ifconfig и  netstat сети вижу, с одной сети в другую пинг идет, а наоборот - нет :(((((
    Racoon пока отключил, пробую без него.....
     
     
  • 3.6, Crow (?), 17:29, 29/10/2003 [^] [ответить]    [к модератору]  
  • +/
    Все, разобрался. Все работает.
    Еще раз спасибо за ответ.
     
  • 3.16, Andrew (??), 01:36, 17/06/2004 [^] [ответить]     [к модератору]  
  • +/
    Собствено у меня не получается что-то с раконом он пишет после запуска следующее... весь текст скрыт [показать]
     
  • 1.7, tall (?), 14:56, 17/11/2003 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Подскажите плиз как настроить Racoon при такой ситуации
    WIN-192.168.0.0/24<-->192.168.0.1-BSD-81.151.8.92-->212.119.170.30 т.е машина с маской 255.255.255.0 должна попадать в тунель
    двух внешних сетевых карт.  
    Если можно по подробней.
    Спасибо.
     
  • 1.8, ArmanT (?), 09:04, 07/01/2004 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Здравствуйте,

    Можно использовать статью за базу для модификации, есть несколько дополнений и пару картинок. Буду ссылаться на оригиналю. Спасибо

     
     
  • 2.13, Andrew (??), 18:18, 04/06/2004 [^] [ответить]    [к модератору]  
  • +/
    Можно. Да и все что здесь написано просто компиляция прочитанного мной.
     
  • 1.9, jeka (?), 10:59, 05/02/2004 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    у меня все тормознулось на этапе запуска racoon
    : could not parse configuration file
    попробовал racoon -F
    вот что получил:
    1. ERROR: pfkey.c:2394:pk_checkalg(): Must get supported algorithms list first.
    2  ERROR: cftoken.l:494:yyerror(): /usr/local/etc/racoon/racoon.conf:102: ";" algorithm 3DES not supported

    Попробовал перекомпилить openssl
    - тоже
    выхода пока не нашел

     
  • 1.10, anonymous (?), 23:56, 06/02/2004 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    > 2  ERROR: cftoken.l:494:yyerror): /usr/local/etc/racoon/racoon.conf:102: ";" algorithm 3DES not supported

    Ядро пересобери с опцией
    options  IPSEC_ESP

     
  • 1.11, driffire (?), 17:50, 22/03/2004 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Ув. автор. А не наблюдается ли проблемм если понадобится делать NAT на gateways? Допустим, что помимо связи сетей 2-х удаленных офисов надо еще чтобы каждый оффис (разумеется в каждом офисе приватная сеть) имел бы доступ в интернет посредством NAT.
     
     
  • 2.15, Andrew (??), 18:26, 04/06/2004 [^] [ответить]    [к модератору]  
  • +/
    >Ув. автор. А не наблюдается ли проблемм если понадобится делать NAT на
    >gateways? Допустим, что помимо связи сетей 2-х удаленных офисов надо еще
    >чтобы каждый оффис (разумеется в каждом офисе приватная сеть) имел бы
    >доступ в интернет посредством NAT.

    Не наблюдается. Счас семь VPN-ов и наты на два интерфейса глядящих в инет - все работает. Да и почему бы не работать. Нат настраивается на физические интерфейсы, а VPN юзает gif-ы.

     
  • 1.12, B00StER (??), 11:55, 14/05/2004 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Неплохо бы еще в rc.conf добавлять строку:
        gif_interfaces="gif0"

    Иначе интерфейс gif0 не появляется.

     
     
  • 2.14, Andrew (??), 18:21, 04/06/2004 [^] [ответить]    [к модератору]  
  • +/
    Да. Очень дельное замечание. И как я позабыл :(
     
  • 1.17, Mikhael (?), 14:19, 24/06/2004 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    мдааа у меня не заработалло хотя сделал все как сказанно только  у меня не ipf  а ipfw не подскажите рулы для него ????
     
  • 1.18, Алексей (??), 09:46, 20/07/2004 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Еще в виде рекомендации
    1)использовать на gifX маски /32. Это интерфейсы типа point-to-point и более широкие маски тут не к чему. Или вобще обходиться без адресов на этих интерфейсах.
    2) Поставить mtu по меньше.. где нить 1460. есть сообщения что path mtu в FreeBSD 4.x не учитывает ipsec заголовки.
     
  • 1.20, Valentin Nechayev (?), 11:00, 20/07/2004 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Статья, если честно, грубо ошибочная в месте описания создания туннеля. Это можно извинить совершенно неясным и туманным описанием в handbook, и безнадёжно бардачными KAME'шными описалками, но тем не менее. Хотя на качество работы настроенной сети это _почти_ не влияет... см. ниже.

    А суть ситуации следующая: gif в данном случае противоречит туннельному ipsec'у и просто не используется. Он имел бы смысл, если бы строился транспортный IPSEC между шлюзами (как я и посоветовал бы в данном случае - см.ниже), но в случае туннельного IPSEC до него дело просто не доходит:
    правила IPSEC SPD - в частности, правило "криптовать всё с 10.0.1.0/24 на 10.0.2.0/24" срабатывает до раутинга (это принципиально в IPSEC), и тут туннельный ipsec реализует по сути свой gif: строит такой же пакет, как в случае  ipip туннелирования gif'ом, и криптует по ESP содержимое этого пакета. На стороне получателя происходит обратное: обнаружив ESP и адекватную его содержимому SP, расшифровывает, снимает ipip-оболочку и отправляет пакет в стек.

    (продолжить попробую в следующем письме, а то такие большие тексты не хочет постить)

     
     
  • 2.21, Valentin Nechayev (?), 11:02, 20/07/2004 [^] [ответить]    [к модератору]  
  • +/

    К чему же тут явный gif? А к попыткам автора (не данной статьи, а скорее той мягкой бумажки, что в старом handbook'е) восстановить конфигурацию, которая у него хоть как-то работала. При отсутствии работающего SP (KMPD в лице racoon не установил SA) и при вариантах правил в SP use вместо require это даст то, что туннелирование не будет сделано, и пакет отправится далее - по раутингу - попадёт в gif и пойдёт абсолютно идентичным путём, но без криптования содержимого. На приёмной стороне, при отсутствии признака ESP, правила SP вообще не будут применяться, с пакета будет снята туннельная оболочка средствами gif и он пойдёт в сеть. Всё будет работать, но без шифрования ;)                                            
    Если же оставить текущие require, и поставить на обе стороны такие настройки как сейчас... всё снова будет работать. Но в обход gif ;))                        
                                                                                    
    Чем плох такой вариант? Тем, что с туннелями есть проблемы с MTU. Например, мне жаловались, что при MTU 1500 на внешнем линке, IPSEC отправляет обратно ICMP NEEDFRAG с указанием допустимого MTU опять же 1500:( Явный gif честнее в этом плане.

    (опять продолжение следует)

     
  • 2.22, Valentin Nechayev (?), 11:03, 20/07/2004 [^] [ответить]     [к модератору]  
  • +/
    Поэтому, рекомендуемый вариант будет следующий поставить gif точно так же как в... весь текст скрыт [показать]
     
     
  • 3.24, jonik (??), 08:33, 15/08/2004 [^] [ответить]    [к модератору]  
  • +/
    ты чего ?
    думаешь о чем ? о настройке ИПСЕКА или защите сети ?

    так жеж нельзя
    ты предлагаешь защищать транспортом траффик между маршрутизаторными внутренними интерфейсами ? если я правильно понял ...

    так нельзя делать
    в инете будет видно, твою внутреннюю сеть, потому что в гиф0 будет инкапсулирован внутренний пакет , а потом его тело зашифровано, но заголовок его будет виден !!!

    если использовать транспортный режим, то правильнее всего шифровать протокол инкапсуляции между внешними интерфейсами (х.х.х.х у.у.у.у)

    (если зашифруешь весь, то ракун не сможет инициировать обмен ключами, если скажешь не шифровать трафик ракунов, то ракуну будет тяжело понять какую из записей СПД брать и т.д.)

     
     
  • 4.25, Valentin Nechayev (?), 17:08, 15/08/2004 [^] [ответить]    [к модератору]  
  • +/
    >так жеж нельзя
    >ты предлагаешь защищать транспортом траффик между маршрутизаторными внутренними интерфейсами ? если я
    >правильно понял ...
    Нет, внешними, конечно. Внутренними - или работать вообще не будет, или как гланды автогеном вырезать :)

    >если использовать транспортный режим, то правильнее всего шифровать протокол инкапсуляции между внешними
    >интерфейсами (х.х.х.х у.у.у.у)
    Кто бы спорил - я не буду :)

    >(если зашифруешь весь, то ракун не сможет инициировать обмен ключами, если скажешь
    >не шифровать трафик ракунов, то ракуну будет тяжело понять какую из
    >записей СПД брать и т.д.)

    Ну, у меня ISAKMP демоны и так договаривались (за счёт use вместо
    require). Хотя исключить из шифрования порты 22, 443, 500 и прочих отдельными SP перед основным - действительно полезная настройка.

     
  • 2.23, Valentin Nechayev (?), 11:06, 20/07/2004 [^] [ответить]    [к модератору]  
  • +/
    Вроде все. Осталось только заметить, что racoon теряет память и при длительной работе его не мешало бы подпереть перезапускалкой и ulimit'ами.;)) Но на пару статических линков и средний аптайм железки в несколько месяцев это не страшно.    
                                                                                    
    Sorry за некоторый сумбур изложения. И просьба к вебмастерам - сделать постинг как-то более разумно, чем передавать весь текст комментария в URL'е. ;(
     
  • 1.26, Bani (?), 15:00, 25/09/2006 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    а как быть с racoon2? синтаксис тот же?
     
     
  • 2.27, junk (?), 19:56, 23/06/2007 [^] [ответить]    [к модератору]  
  • +/
    а как быть, если FreeBSD находится за NAT ? что-то у меня не поехало никак это дело...
     
  • 1.28, veranyon (??), 19:58, 10/08/2007 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Кто-нибудь делал такую конфу, но из трех сетей, вместо двух, как здесь?

    Отличий много?

     
     
  • 2.29, veranyon (??), 22:45, 11/08/2007 [^] [ответить]    [к модератору]  
  • +/
    racoon -F
    Foreground mode.
    2007-08-11 22:32:07: INFO: @(#)ipsec-tools 0.6.7 (http://ipsec-tools.sourceforge
    .net)
    2007-08-11 22:32:07: INFO: @(#)This product linked OpenSSL 0.9.7e-p1 25 Oct 2004
    (http://www.openssl.org/)
    2007-08-11 22:32:07: WARNING: /usr/local/etc/racoon/racoon.conf:65: "support_mip
    6" it is obsoleted.  use "support_proxy".
    2007-08-11 22:32:07: ERROR: /usr/local/etc/racoon/racoon.conf:74: "}" no exchang
    e mode specified.

    2007-08-11 22:32:07: ERROR: fatal parse failure (1 errors)
    racoon: failed to parse configuration file.

    видимо, много чего нового появилось и удалилось. Люди. Что racoon.conf нужно поменять?

     
     
  • 3.30, akocherov (?), 04:44, 28/08/2007 [^] [ответить]    [к модератору]  
  • +/
    ну вопервых заменить фразу support_mip6 на support_proxy
    ну и конечно     exchange_mode main;  или     exchange_mode aggressive; в секцию remote XXX
     

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





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor