|
На прошлой недели пришлось решать задачку, с одной стороны простую до безобразия, а с другой потребовавшую много времени для решения, потому как были нюансы как говорится. Так вот что бы было меньше нюансов решил описать все что было сделано. И так исходные данные: имеется 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 Незабываем настроить Стенку, рутер все таки в интернете торчит.
|