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