Pull to refresh

Kerio vpn client для Gentoo

Reading time4 min
Views2.8K
Очень долгое время, для того чтобы пользоваться интернетом, который мне раздается через этот самый kerio vpn client мне нужно было держать отдельный компьютер, с windows на борту, в качестве прокси. Это была единственная машина, за которой приходилось тщательно следить, обновлять антивирусы и т.д. Почему windows? Да потому что вышеупомянутая софтина была только под эту ОС. Почему прокси? Да потому что, kvc как-то странно устанавливает сетевое соединение, что в инет могли выходить только локально установленные приложения… Так или иначе настроить из этой винды шлюз не получалось.
Но недавно узнал, что появился выход для меня (а может быть и еще для кого-то, кто прочтет эту статью)

Итак, начнем.

Состоит софтина из ядерного модуля и сетевого демона, который, собственно, и устанавливает соединение.
На сайте kerio можно скачать готовые *.deb пакеты для Ubuntu/Debian ( download.kerio.com/archive/download.php ). Устанавливать их очень просто, к тому же к ним прилагается инструкция по установке и настройке.
Но мне нужно было все установить и настроить на машине с Gentoo, т.к. домашний роутер у меня под ней крутится.

Установка



К счастью по той же ссылке можно скачать и исходники модуля (как потом выяснилось, в deb-пакете тоже были исходники).
Итак, скачиваем исходникик (kvnet kernel module source). Распаковываем его и переходим в каталог kvnet/drivers/vpn/linux.
Здесь мы видим исходники и Makefile из которого ничего полезного извлечь не удастся. После непродолжительного гугления было найдено решение (т.к. в синтаксисе Makefile я ничего не понимаю, то гугление требовалось) на форуме kerio:
Нужно Makefile привести к следующему виду:

obj-m += kvnet.o
KDIR:= /lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)
kvnet-objs := \
init.o \
io_dev.o \
io_read.o \
io_write.o \
net_dev.o \
queue.o \
vnet.o \
utils.o

EXTRA_CFLAGS += -O -Wall -DMODULE -DWINNT=0 -DDBG=0 -D_LINUX
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
-rm -f *.o *.ko *.cmd *.flags *.mod.c


Теперь по команде make собирается ядерный модуль. Остается только его загрузить, для чего мы проделываем следующую последовательность действий:

  • создаем директорию /lib/modules/тут.версия.вашего.ядра/kernel/net/kvnet
  • копируем в нее файл kvnet.ko
  • depmod -a
  • modprobe kvnet


Модуль должен загрузиться без каких-либо проблем (пробовал на ядрах 2.6.27 — 2.6.30).
Теперь займемся демоном. По той же ссылке, что была приведена в начале статьи качаем файл kerio-kvc_6.6.0-5729-1_i386.deb
Распаковываем его. Далее распаковываем появившийся файл data.tar.gz
Оттуда сразу переносим файлы usr/lib/libkvnet.o и /usr/sbin/kvpnsvc в соответствующие директории. После этого создаем конфигурационный файл /etc/kerio-kvc.conf вот такого содержания:

<config>
 <connections>
 <connection type="persistent">
  <server>ип. сервера</server>
  <port>4090</port>
  <username>имя пользователя</username>
  <password>XOR:пароль в ксоре</password>
  <fingerprint>фингерпринт сервера</fingerprint>
  <active>1</active>
 </connection>
 </connections>
</config>

Как генерировать пароль и фингерпринт я к сожалению не знаю, а позаимствовал конфиг с виртуальной машины с ubuntu, на которой я первоначально проводил испытания. Там настройка производилась следующей командой: dpkg-reconfigure kerio-kvc, после чего в интерактивном режиме я вводил ип сервера, логин и пароль, а ксорился пароль и запрашивался фингерпринт сервера автоматически.
Как только у меня появится соотвествующая информация, я тут же добавлю ее в статью.

Конфиг написали, теперь пробуем запускать:

kvpnsvc

Демон вывалился с ошибкой

kvpncsvc: symbol lookup error: ./kvpncsvc: undefined symbol: gzopen64

Решение было найдено также на форуме kerio. Необходим открыть файл kvpncsvc в hex-редакторе и найти строчку содержащую gzopen64. Последние 2 символа нужно убрать. Т.е. вместо байтов 36 34 вписать 00 00. После этого все запустится ровно.
Следует обратить внимание на то, что демон создает папку с логами в той директории, в которой его запустили.
К тому же программисты из kerio при написании демона были в своем репертуаре. Демон при соединении должен сам установить шлюз по умолчанию из тех настроек, что он получит с сервера, иначе он просто откажется маршрутизировать что либо через свое соединение. Возможно я что-то недопонимаю, но когда я устанавливал соединение и выставлял необходимый шлюз вручную, то инета у меня не было, а в логах демон говорил, что не может маршрутизировать пакеты. Поэтому перед запуском демона надо удалить шлюз по умолчанию (и прописать нужные маршруты, чтобы локалка работала).

Проблема маршрутов была решена добавлением их в файл /etc/conf.d/net
А для запуска демона были созданы следующие файлы:
/sbin/kerio_start:

#!/bin/bash
route del default
modprobe kvnet
cd /var/log/kvnet
kvpncsvc


/etc/init.d/kerio

#!/sbin/runscript
# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

depend() {
need net
}

start() {
ebegin "Startung Kerio VPN Client Daemon"
start-stop-daemon --start --quiet --chuid root --exec /sbin/start_kerio
eend 0
}

stop() {
ebegin "Stopping Kerio VPN Client Daemon"
start-stop-daemon --stop --quiet --user dconnect --retry 5 --signal 9 --exec kvpncsvc
eend 0
}


Нужно сделать эти файлы исполняемыми и можно запускать соединение

/etc/init.d/kerio start
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 7: ↑3 and ↓4-1
Comments2

Articles