commit 7c3a656b86780fdf2b0b0a558308b5d7cff26a66 Author: Keller Date: Sun Nov 30 16:47:35 2025 +0300 initial diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c00df13 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.deb diff --git a/README.md b/README.md new file mode 100644 index 0000000..a2343c6 --- /dev/null +++ b/README.md @@ -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 +``` diff --git a/build/Dockerfile b/build/Dockerfile new file mode 100644 index 0000000..1342bff --- /dev/null +++ b/build/Dockerfile @@ -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"] diff --git a/build/supervisord.conf b/build/supervisord.conf new file mode 100644 index 0000000..b261008 --- /dev/null +++ b/build/supervisord.conf @@ -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 \ No newline at end of file diff --git a/configure.sh b/configure.sh new file mode 100755 index 0000000..28eb9c5 --- /dev/null +++ b/configure.sh @@ -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 + + + + ${SERVER} + ${PORT} + ${USERNAME} + XOR:${XOR} + ${FINGERPRINT} + 1 + + + +EOF diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..2882214 --- /dev/null +++ b/docker-compose.yml @@ -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 \ No newline at end of file diff --git a/kerio-vpn-mnt.service b/kerio-vpn-mnt.service new file mode 100644 index 0000000..42a6ca2 --- /dev/null +++ b/kerio-vpn-mnt.service @@ -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 diff --git a/kerio-vpn.service b/kerio-vpn.service new file mode 100644 index 0000000..7efe5d0 --- /dev/null +++ b/kerio-vpn.service @@ -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 \ No newline at end of file