initial
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
*.deb
|
||||||
39
README.md
Normal file
39
README.md
Normal 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
13
build/Dockerfile
Normal 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
12
build/supervisord.conf
Normal 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
79
configure.sh
Executable 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
11
docker-compose.yml
Normal 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
22
kerio-vpn-mnt.service
Normal 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
18
kerio-vpn.service
Normal 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
|
||||||
Reference in New Issue
Block a user