Стоит у меня несколько Cisco и прокинуты по ним туннели GRE между организациями, объединенные в свою сегментную сеть. Когда работал на форточках, проблем с подключением к сети не было. VPN клиент для Cisco под форточки работает прекрасно, но в связи с полным отказом от Windows возник вопрос запуска сие чуда на Debian. Как оказалось, стандартные средства организации vpn, входящие в состав репозитария системы, не обеспечивают решения данной задачи. Вот такую задачу мы и будем сегодня решать.
Поиски решения данной задачи в Гугле не привели к конкретному решению, поэтому все пришлось ставить путем проб и ошибок. Загруженные клиенты не хотели собираться в Debian. Спросите, почему нельзя получить клиента у поставщика, ответ: клиент может быть загружен только после регистрации и получения определенного статуса, вот так. Не у каждого есть возможность получить соответствующие права для загрузки. Поэтому принято решение получить все необходимое ПО из свободных источников. Предыстория понятна, пора начать все реализовывать. Все действия будем производить в консоли.
user$ su root# cd /usr/src root# wget http://projects.tuxx-home.at/ciscovpn/clients/linux/4.8.02/vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz --2009-06-09 04:06:33-- http://projects.tuxx-home.at/ciscovpn/clients/linux/4.8.02/vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz Распознаётся projects.tuxx-home.at... 88.198.57.56 Устанавливается соединение с projects.tuxx-home.at|88.198.57.56|:80... соединение установлено. Запрос HTTP послан, ожидается ответ... 200 OK Длина: 2050813 (2,0M) [application/x-gzip] Сохраняется в каталог: `vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz'. 36% [=============> ] 746 577 21,9K/s ОВП 56s
Клиент загружен (эта копия того, который предлагает Cisco у себя на сайте), теперь распакуем и запустим установку. Стоит заметить, что перед запуском установки стоит проверить, есть у вас исходные коды ядра системы. Если нет, то их необходимо установить. Проверить это можно следующим способом.
root# ls /usr/src vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz
Как видите, здесь лежит только загруженный нами ранее vpn клиент Cisco. Необходимо установить исходники ядра, но перед установкой рекомендую обновить пакеты, дабы не наставить дырявого и устаревшего ПО.
root# aptitude update root# aptitude upgrade
Систему обновили, теперь посмотрим, что у нас есть по ядрам в пакетах.
root#aptitude search linux-image v linux-image - v linux-image-2.6 - p linux-image-2.6-486 - Linux 2.6 image on x86 i linux-image-2.6-686 - Linux 2.6 image on PPro/Celeron/PII/PIII/P4 p linux-image-2.6-amd64 - Linux 2.6 image on AMD64 p linux-image-2.6-k7 - Linux 2.6 image on AMD K7 - transition package p linux-image-2.6.26-1-486 - Linux 2.6.26 image on x86 i A linux-image-2.6.26-1-686 - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4 p linux-image-2.6.26-1-686-bigmem - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4 p linux-image-2.6.26-1-amd64 - Linux 2.6.26 image on AMD64 p linux-image-2.6.26-1-openvz-686 - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, OpenVZ suppor p linux-image-2.6.26-1-vserver-686 - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, Linux-VServer p linux-image-2.6.26-1-vserver-686-bigmem - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, Linux-VServer p linux-image-2.6.26-1-xen-686 - Linux 2.6.26 image on i686, oldstyle Xen support p linux-image-2.6.26-2-486 - Linux 2.6.26 image on x86 p linux-image-2.6.26-2-686 - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4 p linux-image-2.6.26-2-686-bigmem - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4 p linux-image-2.6.26-2-amd64 - Linux 2.6.26 image on AMD64 p linux-image-2.6.26-2-openvz-686 - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, OpenVZ suppor p linux-image-2.6.26-2-vserver-686 - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, Linux-VServer p linux-image-2.6.26-2-vserver-686-bigmem - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, Linux-VServer p linux-image-2.6.26-2-xen-686 - Linux 2.6.26 image on i686, oldstyle Xen support p linux-image-686 - Linux image on PPro/Celeron/PII/PIII/P4
Имеется новое ядро. Вот его и поставим. Напомню, что мы работаем со стабильной веткой Debian, если вы ставите эксперименты на боевой машине (сервере), подумайте хорошо — сделайте копию. Ставим новое ядро и исходники к нему. Необходимые дополнительные библиотеки aptitude подхватит и установит сам. На всякий случай проверьте установлена ли утилита сборки проектов make. У меня ее почему-то не оказалось.
root# aptitude install linux-image-2.6.26-2-686 linux-headers-2.6.26-2-686 make
Проверяем содержимое …
root# ls -l /usr/src итого 2020 drwxr-xr-x 4 root root 4096 Июн 9 06:30 linux-headers-2.6.26-2-686 drwxr-xr-x 18 root root 4096 Июн 9 06:30 linux-headers-2.6.26-2-common drwxr-xr-x 3 root root 4096 Июн 9 06:30 linux-kbuild-2.6.26 -rw-r--r-- 1 root src 2050813 Май 20 19:16 vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz
Новое ядро установлено, исходные коды ядра тоже на месте, осталось только сделать рестарт системы и можно приступать к настройке и установке vpn клиента для Cisco.
root# reboot
Рестарт системы сделан. У нас имеется архив с клиентом, надо его распаковать и запустить сборку. Приступаем.
user$ su root# cd usr/src root# tar xzvf vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz root# cd vpnclient
Далее идут вопросы установщика и сборщика, отвечаем утвердительно.
root# ./vpn_install Cisco Systems VPN Client Version 4.8.02 (0030) Linux Installer Copyright (C) 1998-2006 Cisco Systems, Inc. All Rights Reserved. By installing this product you agree that you have read the license.txt file (The VPN Client license) and will comply with its terms. Directory where binaries will be installed [/usr/local/bin] Automatically start the VPN service at boot time [yes] In order to build the VPN kernel module, you must have the kernel headers for the version of the kernel you are running. Directory containing linux kernel source code [/lib/modules/2.6.26-2-686/build] * Binaries will be installed in "/usr/local/bin". * Modules will be installed in "/lib/modules/2.6.26-2-686/CiscoVPN". * The VPN service will be started AUTOMATICALLY at boot time. * Kernel source from "/lib/modules/2.6.26-2-686/build" will be used to build the module. Is the above correct [y] Making module make -C /lib/modules/2.6.26-2-686/build SUBDIRS=/usr/src/vpnclient modules make[1]: Entering directory `/usr/src/linux-headers-2.6.26-2-686' CC [M] /usr/src/vpnclient/linuxcniapi.o CC [M] /usr/src/vpnclient/frag.o CC [M] /usr/src/vpnclient/IPSecDrvOS_linux.o CC [M] /usr/src/vpnclient/interceptor.o CC [M] /usr/src/vpnclient/linuxkernelapi.o LD [M] /usr/src/vpnclient/cisco_ipsec.o Building modules, stage 2. MODPOST 1 modules CC /usr/src/vpnclient/cisco_ipsec.mod.o LD [M] /usr/src/vpnclient/cisco_ipsec.ko make[1]: Leaving directory `/usr/src/linux-headers-2.6.26-2-686' Create module directory "/lib/modules/2.6.26-2-686/CiscoVPN". Copying module to directory "/lib/modules/2.6.26-2-686/CiscoVPN". Already have group 'bin' Creating start/stop script "/etc/init.d/vpnclient_init". /etc/init.d/vpnclient_init Enabling start/stop script for run level 3,4 and 5. Creating global config /etc/opt/cisco-vpnclient Installing license.txt (VPN Client license) in "/opt/cisco-vpnclient/": /opt/cisco-vpnclient/license.txt Installing bundled user profiles in "/etc/opt/cisco-vpnclient/Profiles/": * New Profiles : sample Copying binaries to directory "/opt/cisco-vpnclient/bin". Adding symlinks to "/usr/local/bin". /opt/cisco-vpnclient/bin/vpnclient /opt/cisco-vpnclient/bin/cisco_cert_mgr /opt/cisco-vpnclient/bin/ipseclog Copying setuid binaries to directory "/opt/cisco-vpnclient/bin". /opt/cisco-vpnclient/bin/cvpnd Copying libraries to directory "/opt/cisco-vpnclient/lib". /opt/cisco-vpnclient/lib/libvpnapi.so Copying header files to directory "/opt/cisco-vpnclient/include". /opt/cisco-vpnclient/include/vpnapi.h Setting permissions. /opt/cisco-vpnclient/bin/cvpnd (setuid root) /opt/cisco-vpnclient (group bin readable) /etc/opt/cisco-vpnclient (group bin readable) /etc/opt/cisco-vpnclient/Profiles (group bin readable) /etc/opt/cisco-vpnclient/Certificates (group bin readable) * You may wish to change these permissions to restrict access to root. * You must run "/etc/init.d/vpnclient_init start" before using the client. * This script will be run AUTOMATICALLY every time you reboot your computer.
Клиент собрался и установлена поддержка в ядро необходимых протоколов для работы VPN клиента Cisco. Далее необходимо создать конфигурацию и инициализировать клиента. Инициализация требуется один раз, если вы после этого перезапустите систему, то клиент инициализируется сам и при последующих запусках тоже. Если этого не происходит (как в моем случае), то можно произвести инициализацию вручную. Пока не стал разбираться, почему автомат не работает.
root# /etc/init.d/vpnclient_init start
Теперь готовим файл конфигурации:
root# cd /etc/CiscoSystemsVPNClient/Profiles root# cp sample.pcf имя_нового_профиля.pcf
Если по каким-либо причинам профиль примера не создался, то вот его примерное содержимое:
root# cat sample.pcf [main] Description=sample user profile Host=10.212.20.52 AuthType=1 GroupName=monkeys EnableISPConnect=0 ISPConnectType=0 ISPConnect= ISPCommand= Username=chimchim SaveUserPassword=0 EnableBackup=0 BackupServer= EnableNat=1 CertStore=0 CertName= CertPath= CertSubjectName= CertSerialHash=00000000000000000000000000000000 DHGroup=2 ForceKeepAlives=0
Собствено редактирование профиля сводится к некоторым изменениям (чтоб их не вводить вручном режиме постоянно). Ниже выдержка, что необходимо поправить:
root# pwd /etc/CiscoSystemsVPNClient/Profiles root# mcedit имя_нового_профиля.pcf
строки для правки:
Description=Краткое описание вашего профиля
Host=IP_адрес_вашей_Cisco
…
GroupName=Имя_вашей_группы_в_домене
…
Username=Ваше_имя_в_домене_NT
…
NTDomain=Имя_вашего_домена
Остальное можно оставить без изменения, но можно и не править ничего, при первом запуске у вас все это спросит клиент и автоматически запишет в файл конфигурации профиля. Подготовка клиента завершена, можно произвести пробное подключение.
root# # vpnclient connect имя_вашего_профиля Cisco Systems VPN Client Version 4.8.01 (0640) Copyright (C) 1998-2007 Cisco Systems, Inc. All Rights Reserved. Client Type(s): Linux Running on: Linux 2.6.26-2-686 #1 SMP Thu May 28 15:39:35 UTC 2009 i686 Config file directory: /etc/opt/cisco-vpnclient Initializing the VPN connection. Contacting the gateway at <span style="color: red; font-weight: bold;">IP_адрес_вашей_Cisco</span> User Authentication for <span style="color: red; font-weight: bold;">имя_вашего_профиля</span>... The server has requested the following information to complete the user authentication: Username [<span style="color: red; font-weight: bold;">Ваше_имя_в_домене_NT</span>]: Password []: Authenticating user. Negotiating security policies. Securing communication channel. Your VPN connection is secure. VPN tunnel information. Client address: <span style="color: red; font-weight: bold;">Ваш_локальный_адрес</span> Server address: <span style="color: red; font-weight: bold;">IP_адрес_вашей_Cisco</span> Encryption: 168-bit 3-DES Authentication: HMAC-SHA IP Compression: None NAT passthrough is active on port UDP 4500 Local LAN Access is disabled
Подключение успешно выполнено. Как видим туннель на удаленную сеть открыт и готов к транспорту пакетов. Отключение можно выполнить банальным сочетанием Ctrl+C или в другой консоли вводом команды разрыва соединения.
root# vpnclient disconnect
В другой консоли можно проверить ping любого адреса в удаленной сети. Можете запускать RDP, VNC или другую систему управления серверами или компьютерами. Адреса указывайте такие, как будто вы находитесь в домашней сети. Все это можно оформить аккуратней, но как всегда лень. Зато у вас будет желание сделать все красивее и качественней. Удачи с экспериментами.











