Skip to content

Организация VPN соединений вида сеть-сеть с использованием IpSec OpenS/WAN

Организация VPN соединений вида сеть-сеть с использованием IpSec OpenS/WAN published on 1 комментарий к записи Организация 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.

http://u.to/LKNQ

Что вам необходимо?

  • Две локальных сети, разделенных на разные сегменты. В данном примере одна сеть, 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=0×3be6c4dc,seq=0×3)
19:16:32.085630 192.168.99.9 > 192.168.0.2: ESP(spi=0×5fdd1cf8,seq=0×6)

На этом осталось совершить финальный акорд, включив автозапуск VPN сети. Для этого в файлах /etc/ipsec/ipsec.conf срочку auto=add заменяем на auto=start.

1 комментарий

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Primary Sidebar