The OpenNET Project / Index page

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

Создание 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 точно так же как в статье, обмен ключами - точно так же, но правила в SPD заменить на следующие (для первого шлюза; для второго - аналогично):                                    
                                                                                    
    spdadd 10.1.1.1 10.1.2.1 any -P out ipsec esp/transport//require;              
    spdadd 10.1.2.1 10.1.1.1 any -P in ipsec esp/transport//require;                
                                                                                    
    С точки зрения формата и содержимого пакетов вообще ничего не поменяется (так что менять можно даже на одной из сторон;)), но будет меньше проблем с MTU. Проблема с MTU будет решаться в драйвере gif (который на порядок более прозрачен и в котором это решено), остаётся только выставить там разумное MTU (например, 1440). Другое преимущество этого варианта - возможность поддержки динамического раутинга дополнительных сетей (средствами zebra/quagga/gated/routed/аналогов): IPSEC SPD не содержит маршруты сетей они пишутся вместо этого  в таблицу раутинга, где с ними значительно легче разбираться. В варианте же с туннельным IPSEC требуется продираться через глупости конструкции SPD (принципиально требуемый по RFC последовательный порядок правил и отсутствие возможности вставлять правила в начало/середину).                                                                      
                                                                                    
    И вариант с транспортным IPSEC и 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:
    Заголовок:
    Текст:




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

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