Statistics

Просмотры материалов : 40928
IPSEC для динамических IP Печать E-mail
Рейтинг пользователей: / 1
ХудшийЛучший 
Автор: Alex Gilz   
10.11.2009 12:35

На прошлой недели пришлось решать задачку, с одной стороны простую до безобразия, а с другой потребовавшую много времени для решения, потому как были нюансы как говорится. Так вот что бы было меньше нюансов решил описать все что было сделано. И так исходные данные: имеется 2 Линуксовых компа которые напрямую связаны с интернетом и имеют натуральные IP, которые меняются каждые 24 часа. Эти два компа, далее "Рутера" должны связать две сети через интернет посредством VPN тунеля, в данном случае через IPSEC.

Дистрибутив SLES11, openswan-2.6.16-1.31, ipsec-tools-0.7.1-10.30.

Как настроить DynDNS я уже гдето описывал и обращатся к этому не буду. И так основные конфиги находятся в файлах /etc/ipsec.conf и /etc/ipsec.secrets, рассмотрим первый

 

# /etc/ipsec.conf - Openswan IPsec configuration file
# RCSID $Id: ipsec.conf.in,v 1.16 2005/07/26 12:29:45 ken Exp $
# This file:  /usr/share/doc/packages/openswan/ipsec.conf-sample
#
# Manual:     ipsec.conf.5
version 2.0     # conforms to second version of ipsec.conf specification
# basic configuration
config setup
        # Do not set debug= options to debug configuration issues!
        # plutodebug / klipsdebug = "all", "none" or a combation from below:
        # "raw crypt parsing emitting control klips pfkey natt x509 dpd private"
        # eg:
         plutodebug="control parsing"
        #
        # enable to get logs per-peer
         plutoopts="--perpeerlog"
        #
        # Only enable *debug=all if you are a developer
        #
        # NAT-TRAVERSAL support, see README.NAT-Traversal
        nat_traversal=yes
        # exclude networks used on server side by adding %v4:!a.b.c.0/24
        #virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%4:172.16.0.0/12
        # OE is now off by default. Uncomment and change to on, to enable.
#       OE=off
        # which IPsec stack to use. netkey,klips,mast,auto or none
        protostack=netkey
# default settings for connections
conn %default
        # keyingtries default to %forever
        #keyingtries=3
        # Sig keys (default: %dnsondemand)
#       leftrsasigkey=%cert
#       rightrsasigkey=%cert
        # Lifetimes, defaults are 1h/8hrs
        #ikelifetime=20m
        #keylife=1h
        #rekeymargin=8m
conn buero1.homelinux.net
        auto=start
        auth=esp
        authby=secret
        keyexchange=ike
        pfs=yes
        type=tunnel
        left=buero1.homelinux.net
        right=buero2.homelinux.net
        leftsubnet=192.168.50.0/24
        rightsubnet=192.168.1.0/24

 

/etc/ipsec.secrets

: RSA   {
        # RSA 2048 bits   home1   Tue Nov  3 17:04:34 2009
        # for signatures only, UNSAFE FOR ENCRYPTION
        #pubkey=0sAQPeuYD3m2VrcWziQv14NEWYHIvGQ1lOL7U7ytff2anFpVUThms17zBrzXFCkWCrhzfaPlndqxghSP8EjlQVWNTrFZooaWo9+LLVMtWiiKWatr8JSaPYf6H5aJqsSstEV7wPpSk8ovMKRyKxncd+ecgRHwvMvUawvQ1pD3ZZY7O4HP1YpOuF8z2O+r1oQ
H9lg9UCGc71s2x0pPS/UPlwIH6N2Zmp2iMVEWGZRVlnMZ1XjGF1nTHIJj3vbOZFyeC/vD/0fO4G5xIEfJf6FoW5jqpgKzj4O7j3GZk5Ss4c5ilGDnDSknKTsQvKMhwnvGO2DBIY+AzHlfY7k5MumFXRVOSP
        Modulus: 0xdeb980f79b656b716ce242fd783445981c8bc643594e2fb53bcad7dfd9a9c5a55513866b35ef306bcd71429160ab8737da3e59ddab182148ff048e541558d4eb159a28696a3df8b2d532d5a288a59ab6bf0949a3d87fa1f9689aac4acb44
57bc0fa5293ca2f30a4722b19dc77e79c8111f0bc234p2140d690f765963b3b81cfd58a4eb85f33d8efabd68407f6583d50219cef5b36c74a4f4bf50f970207e8dd999a9da2315116199455967319d578c61759d31c8263def6ce645c9e0bfbc3ff47cee06e71
2047c97fa1685b98eaa602b38f83bb8f71999394ace1ce629460e70d2927293b10bca321c27bc63b60c1218f80cc795f63b93932e9855d154e48f
        PublicExponent: 0x03
        # everything after this point is secret
        PrivateExponent: 0x251eead3ef3b91e83cd0607f9408b64404c1f6608ee25d48df4c794ff99c4b9b8e2debbc88fd32bca23d8b183ac74133f9b50efa472eb036d52b6d0e038ece272e445c1191b4fec878ddce45c170ef1e752c36f0a41545a9916f
1cb721e0b94a029b86df707dd70bdb1d9456987a69a1582fd74cca3672ca2ce6d7e90ee5f34959daa10a54098c3da0a350710321c189f76ca76b1780d55c92cbe3fdea5be803375439e82c0f4154f57eea75e17a7d082228d7a47e99f71ec7c21eb4b69481214ece6
d31a7e08cf77758f4e960c0634cc8a1ffdee0761073174d45149154fbafd53cf358ee2e6f2c281e044bcfd601060db9e68cfe831915ca01b8de8140d96a73
        Prime1: 0xefe436d92dff3a76eef56f1a3asditouaa,93a09e4a67a52e0da3d4194761e78096af0315f514e4099803d19828d0e41eef05933e57b42837099e31b5c4643857dcb9db79d45159e5b71bb7fae0fd5be13dd9f603a9f8b8d633fc196d2e5
a4626a965c128d637f23eabc1922a8e00e86d90a40840a39105af85798c40c31809
        Prime2: 0xedae301a1eaa915437e55313837583d07122b8c81021e18eff59b9a72f69095a5fa789ceb197febc962e924cba8655db4d78bca6ee03d118a9246b50aff4902ec6110a3c29efe6569c8582893c59e0507dfbe502f0ea6e549378569b7b14c
cc8dc75171c543fcae73f569f4b3521e6d750001ac842bc27d1d953e7c20b794dd7
        Exponent1: 0x9fed79e61eaa26f9f4a39f66cb99d82558b1b7c06986efc3740917e2bb84ebefab0f1f5763f8b898066557e1101b35ed69f4ae62298fcd7024b1142123d842d03a9326925138363bee7a127aa740a8e7eb7e914ead1bfb25e422a810f3
743c2ec470ee80c5e4254c29c7d66171b4009af3b5c2b02b17b603ca58fbb2d5d7655b
        Exponent2: 0x9e74201169c70b8d7a98e20d024e57e04b6c7b300ac14109ff91266f74f0b0e6ea6fb1347665547db97461887c598e9233a5d319f4028b65c618478b1ff8601f2eb606d2c69feee4685901b0d2e6958afea7ee01f5f19ee30cfae467a7
63333092f8ba12e2d531ef7f8f14dcce1699e4e00011dad7281a8be637efd6b250de8f
        Coefficient: 0x05a92760d1638bc9154df45e48f75809810876b5132dfcd6c8f279c3cd60169f38c1727c251b49822ce9ffe15479de4ccd0a0838262231880bb9b1937fd8eecc14f72ff66b8aff046743c6f904b9d7d0c7a56fceeb037f5fead978a0
6a9f1d7e0f881fe38e21a6eab6098a5acdf43243151ebd9dc87e4b348f5f944c1e47cd12
  }
: PSK "paroll123456789"
 

 Это два основных конфигурационных файла, теперь небольшое поеснение:

conn buero1.homelinux.net
        auto=start                        ; так как я настраивал оба рутера как сервера, сдесь стоит start, в случае если один из них все же клиент, то на клиенте выставляем add.

        auth=esp
        authby=secret                  ;авторизироватся будем через PSK который находится в /etc/ipsec.secrets

        keyexchange=ike
        pfs=yes
        type=tunnel
        left=buero1.homelinux.net    ; сдесь адрес самой машины

        right=buero2.homelinux.net  ; адрес машины с которой будет происходить соединение

        leftsubnet=192.168.50.0/24 ; адрес локальной сети
        rightsubnet=192.168.1.0/24 ; адрес удаленной сети, эти две сети будут связаны между собой тунелем, и только для етих сетей весь трафик будет идти через тунель

 

 Для второго рутера конфигурационный файл выглядит по аналогии.

 conn buero2.homelinux.net
        auto=start
        auth=esp
        authby=secret
        keyexchange=ike
        pfs=yes
        type=tunnel
        left=buero2.homelinux.net
        right=buero1.homelinux.net
        leftsubnet=192.168.1.0/24
        rightsubnet=192.168.50.0/24

В фаил /etc/ipsec.secrets в конце добавляем наш PSK, есть два способа, либо задаем для какого то специального соединения, актуально если постоянные адреса

bueroX.homelinux.net bueroX.homelinux.net : PSK "parol1234"

либо глобальный тоесть для всех.

: PSK "parol1234"

Я выбрал глобальный, поясняю почему. После разрыва DSL соединения рутер не в состоянии быстро определить новые IP адреса через DynDNS, из за чего задерживается поднятие тунеля. По етой же причине приходится постоянно проверять изменился ли IP адрес и совпадает ли он с тем который выдает DNS.

Еше одна проблемка с которой пришлось столкнутся. По умолчанию в файле ipsec.secrets должен быть уже прописан RSA, но в моем случае его почему то небыло и пришлось его сначала генерировать, а так как конфигурация производиласьчерез ssh сессию то для генерации случайной последовательности пришлось использовать  /dev/urandom. Вообшем если "ipsec showhostkey ..." или "ipsec rsasigkey" недает желаемого результата то используем "ipsec rsasigkey --random /dev/urandom 2048 >> /etc/ipsec.secrets".

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

Теперь о проблеме DNS описаной выше. Еше до использования IPSEC я регулярно проверял наличие DSL соединения, у меня уже имелся готовый скрипт я его только дополнил проверкой DNS и наличиеем IPSEC тунеля. Вот та часть скрипта которая выполняет эту работу, если будет необходимость выложу весь скрипт.

######################################################

BUERO=`nslookup buero1.homelinux.net | awk -f /opt/kom/addr_test.awk`
echo $BUERO > /tmp/nslookup.txt
/sbin/ifconfig dsl0 | awk -f /opt/kom/addr_conf.awk > /tmp/ipconfig.txt
IPSEC_IP=`/usr/sbin/ipsec auto --status | grep $BUERO | wc -l`
IPSEC_SA=`/usr/sbin/ipsec auto --status | grep "IPsec SA established" | wc -l`
##DNS правильно!

        if [ `cat /tmp/nslookup.txt` == `cat /tmp/ipconfig.txt` ]
        then
        echo "`date +%F_%T` DNS ОК!. " >> /var/log/dsl_vpn.log
## ipsec tunnel в наличии

                if [ $IPSEC_SA -gt 0 ]
                then
                        echo "`date +%F_%T` IPSEC-Tunnel ОК. " >> /var/log/dsl_vpn.log
                        else
                        echo "`date +%F_%T` Отсутствие тунеля, перестартовываем IPSEC-Tunnel. " >> /var/log/dsl_vpn.log
                        /usr/sbin/rcipsec restart
                fi
        else
         echo "DNS изменилось, перестартовываем IPSEC-Tunnel." >> /var/log/dsl_vpn.log
        /usr/sbin/rcipsec restart
        fi

 ######################################################

/opt/kom/addr_conf.awk

{if (FNR == 2) { sub("addr:",""); printf("%s\n",$2);}
}

######################################################

 /opt/kom/addr_test.awk

{if (FNR == 6) {printf("%s\n",$2);}
}
 

Script вызывается cronom каждые две минуты! 

P.S Незабываем настроить Стенку, рутер все таки в интернете торчит. 

 

 

Обновлено ( 10.11.2009 14:30 )
 
©2010 stilpunkt