Стоит у меня несколько 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 или другую систему управления серверами или компьютерами. Адреса указывайте такие, как будто вы находитесь в домашней сети. Все это можно оформить аккуратней, но как всегда лень. Зато у вас будет желание сделать все красивее и качественней. Удачи с экспериментами.
http://www.qdesnic.ru/page/cisco_vpnclient.html