This commit is contained in:
Keller
2025-11-30 16:47:35 +03:00
commit 7c3a656b86
8 changed files with 195 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*.deb

39
README.md Normal file
View File

@@ -0,0 +1,39 @@
# Kerio VPN Client под Linux
## Установка
Используется керио-клиент под линукс в виде 32 бит сборки.
Здесь реализован вариант его запуска в виде докер-контейнера.
На целевой ОС должен быть установлен докер (вариант установки):
```
curl -fsSL https://get.docker.com -o get-docker.sh
sh ./get-docker.sh
```
Сгенерировать файл конфигурации для нужного сервера (понадобятся адрес и fingerprint серта сервера, а также имя и пароль учетки в керио):
```
./configure.sh > /etc/kerio/kerio-kvc.conf
```
Прилагается docker-compose.yml для запуска.
В нем нужно проверить и привести в соответствие путь к ранее сгенерированному файлу конфигурации
(по умолчанию - /etc/kerio/kerio-kvc.conf) в параметрах маппинга "volumes".
Запустить керио-клиент:
```
docker compose up -d
```
Для запуска можно использовать systemd-сервис kerio-vpn.service (прилагается).
В нем требуется привести в соответствие параметр WorkingDirectory (указать путь к файлу docker-compose.yml).
Есть также вариант kerio-vpn-mnt.service, который может быть полезным, если керио-впн сервис нужно запускать
после монтирования тома в системе (полезно, если конфигурацию подключения держать на шифрованном разделе).
Регистрация и старт сервиса (файл сервиса положить предварительно в /etc/systemd/system/):
```
sudo systemctl daemon-reload
sudo systemctl enable kerio-vpn.service
sudo systemctl start kerio-vpn.service
```
## Сборка докер-образа
Если есть необходимось собрать докер-образ с керио-клиентом самостоятельно, в репозитории есть Dockerfile (в build/).
Перед сборкой нужно загрузить deb-пакет:
```
curl -OJ https://pub.git.art-bank.ru/api/packages/tools/generic/kerio-control-vpnclient/8.1.1/kerio-control-vpnclient-8.1.1-1212-p3-linux.deb
```

13
build/Dockerfile Normal file
View File

@@ -0,0 +1,13 @@
FROM i386/debian:bullseye
COPY kerio-control-vpnclient-8.1.1-1212-p3-linux.deb /tmp/
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& dpkg --unpack /tmp/kerio-control-vpnclient-8.1.1-1212-p3-linux.deb \
&& rm -f /var/lib/dpkg/info/kerio-control-vpnclient.postinst \
&& apt-get install -y -f \
&& apt-get install -y -f supervisor debconf \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
COPY supervisord.conf /etc/supervisor/conf.d/kerio.conf
WORKDIR /root
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]

12
build/supervisord.conf Normal file
View File

@@ -0,0 +1,12 @@
[supervisord]
nodaemon=true
[program:kerio-vpn]
command=/etc/init.d/kerio-kvc start
autostart=true
autorestart=true
process_name=kvpncsvc
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

79
configure.sh Executable file
View File

@@ -0,0 +1,79 @@
#!/bin/bash
echo "*** kerio config generator ***" >&2
while true; do
echo -n "Enter server address: " >&2
read SERVER < /dev/tty
echo >&2
if [[ -z "$SERVER" ]]; then
echo "Server address cannot be empty. Try again." >&2
else
break
fi
done
while true; do
echo -n "Enter server fingerprint: " >&2
read FINGERPRINT < /dev/tty
echo >&2
if [[ -z "$FINGERPRINT" ]]; then
echo "Server fingerprint cannot be empty. Try again." >&2
else
break
fi
done
while true; do
echo -n "Enter username: " >&2
read USERNAME < /dev/tty
echo >&2
if [[ -z "$USERNAME" ]]; then
echo "Username cannot be empty. Try again." >&2
else
break
fi
done
while true; do
echo -n "Enter password: " >&2
read -s PASSWORD < /dev/tty
echo >&2
echo -n "Confirm password: " >&2
read -s PASSWORDCONF < /dev/tty
echo >&2
if [[ -z "${PASSWORD}" ]]; then
echo "Password cannot be empty. Try again." >&2
elif [[ "${PASSWORD}" != "${PASSWORDCONF}" ]]; then
echo "Passwords do not match. Try again." >&2
else
break
fi
done
case "$SERVER" in
*:*) PORT=`echo $SERVER | sed 's/.*://'`; SERVER=`echo $SERVER | sed 's/:.*//'`;;
*) PORT=4090;;
esac
XOR=""
for i in `echo -n "$PASSWORD" | od -t d1 -A n`; do XOR=$(printf "%s%02x" "$XOR" $((i ^ 85))); done
cat << EOF
<config>
<connections>
<connection type="persistent">
<server>${SERVER}</server>
<port>${PORT}</port>
<username>${USERNAME}</username>
<password>XOR:${XOR}</password>
<fingerprint>${FINGERPRINT}</fingerprint>
<active>1</active>
</connection>
</connections>
</config>
EOF

11
docker-compose.yml Normal file
View File

@@ -0,0 +1,11 @@
services:
kerio-vpn:
image: pub.git.art-bank.ru/tools/kerio-vpnclient:8.1.1
container_name: kerio-vpn
privileged: true
network_mode: host
volumes:
- /etc/kerio/kerio-kvc.conf:/etc/kerio-kvc.conf:ro
stdin_open: true
tty: true
restart: unless-stopped

22
kerio-vpn-mnt.service Normal file
View File

@@ -0,0 +1,22 @@
[Unit]
Description=Kerio VPN Docker Service
RequiresMountsFor=/mnt/T
Requires=docker.service
After=docker.service mnt-T.mount
Before=umount.target local-fs.target
Conflicts=umount.target
BindsTo=mnt-T.mount
DefaultDependencies=no
[Service]
Type=forking
RemainAfterExit=yes
WorkingDirectory=/opt/kerio
ExecStartPre=/bin/bash -c '/usr/bin/docker container rm -f kerio-vpn'
ExecStart=/usr/bin/docker compose up -d
ExecStop=/bin/bash -c '/usr/bin/docker compose down && while docker compose ps -q 2>/dev/null | grep -q .; do sleep 1; done'
TimeoutStartSec=60
TimeoutStopSec=90
[Install]
WantedBy=mnt-T.mount

18
kerio-vpn.service Normal file
View File

@@ -0,0 +1,18 @@
[Unit]
Description=Kerio VPN Client
After=network-online.target docker.service
Wants=network-online.target
Requires=docker.service
[Service]
Type=forking
RemainAfterExit=yes
WorkingDirectory=/opt/kerio
ExecStartPre=/usr/bin/docker container rm -f kerio-vpn
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
TimeoutStartSec=60
TimeoutStopSec=90
[Install]
WantedBy=multi-user.target