Как стать автором
Обновить

Бесплатный аналог AnyConnect VPN Server

Время на прочтение3 мин
Количество просмотров43K

В прошлой своей заметке я описывал Softether VPN Server и как его установить из исходников. За прошедшее время я очень сильно разочаровался в данном сервере так как за все время мне не удалось заставить его работать с нормальной скоростью. Я писал на форум разработчиков, но так и не получил внятного ответа в чем же дело Ну делать нечего придется выбрать другое решение.

Я пробовал StrongSwan VPN server, но сервер оказался сложным в настройке, а также он не сумел заработать через http-Proxy (и кстати не должен).
В итоге я остановил свой выбор на Open Connect Server, бесплатной и отличной реализацией Cisco AnyConnect server.
я думаю многим из вас знаком Any Connect server, проприетарный vpnserver для роутеров Cisco.

К сожалению у меня нет сведений есть ли данная программа в репозитории Debian или в каком либо еще, но мы можем собрать ее из исходников.



InstallNettle()
{
if [ "$isget" = «get» ]
then
rm -rfv ./nettle*
wget -c ftp.gnu.org/gnu/nettle/nettle-2.7.1.tar.gz
tar -xvf nettle-2.7.1.tar.gz
fi
cd nettle-2.7.1
#autoreconf
./configure --prefix=/ --host=$HOST
check_success
make V=0 -j 4 LDFLAGS="-ldl"
check_success
make V=0 install DESTDIR=$SYSROOT
check_success
cd…
}

InstallGnutls()
{
if [ "$isget" = «get» ]
then
rm -rfv ./gnutls*
git clone git://gitorious.org/gnutls/gnutls.git
fi
cd gnutls
make autoreconf
check_success
./configure --prefix=/ --host=$HOST NETTLE_CFLAGS="-I$SYSROOT/include" NETTLE_LIBS="-L$SYSROOT/lib -lnettle" \
HOGWEED_CFLAGS="-I$SYSROOT/include" HOGWEED_LIBS="-L$SYSROOT/lib -lhogweed" \
--disable-doc --with-default-trust-store-file="/etc/ssl/ca-bundle.crt" --enable-local-libopts=yes


check_success
make V=0 -j 4
check_success
make V=0 install DESTDIR=$SYSROOT
check_success
cd…

InstallOpenConnect()
{
if [ "$isget" = «get» ]
then
rm -rfv ./ocserv*
git clone git://git.infradead.org/ocserv.git
fi
cd ocserv
make autoreconf
chmod +x ./autogen.sh
./autogen.sh
./configure --prefix=/ --host=$HOST LIBGNUTLS_CFLAGS="-I$SYSROOT/include" LIBGNUTLS_LIBS="-L$SYSROOT/lib -lgnutls" \
LIBREADLINE_CFLAGS="-I$SYSROOT/include/readline" LIBREADLINE_LIBS="-L$SYSROOT/lib -lreadline -lncurses" \
--enable-local-libopts=yes

check_success
make V=0 AUTOGEN=«autogen»
check_success
sed -i -e 's|/bin/true|autogen|g' ./doc/Makefile
make V=0 install DESTDIR=$SYSROOT
check_success
cd…
}
}


Генерация сертификатов


#!/bin/bash

certtool --generate-privkey --outfile ca-key.pem
cat << _EOF_ >ca.tmpl
cn = «loft.dtdns.net»
organization = «loft inc.»
serial = 1
expiration_days = 999
ca
signing_key
cert_signing_key
crl_signing_key
_EOF_

certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem

certtool --generate-privkey --outfile server-key.pem
cat << _EOF_ >server.tmpl
cn = «loft.dtdns.net»
organization = «loft inc.»
serial = 2
expiration_days = 999
signing_key
encryption_key #only if the generated key is an RSA one
tls_www_server
_EOF_

certtool --generate-certificate --load-privkey server-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template server.tmpl --outfile server-cert.pem

mv -fv ./server-cert.pem /etc/
mv -fv ./server-key.pem /etc/
ocpasswd root -c /etc/ocpasswd


Файл настроек


max-clients = 16
max-same-clients = 16
tcp-port = 443
udp-port = 443
keepalive = 32400
dpd = 1900
mobile-dpd = 1800
try-mtu-discovery = false
auth = «plain[/etc/ocpasswd]»

server-cert = /etc/server-cert.pem
server-key = /etc/server-key.pem

tls-priorities = «NORMAL:%SERVER_PRECEDENCE:%COMPAT»

auth-timeout = 4000
cookie-timeout = 300
deny-roaming = false
rekey-time = 172800
rekey-method = ssl

use-utmp = true
use-occtl = true

pid-file = /var/run/ocserv.pid
socket-file = /var/run/ocserv-socket

run-as-user = root
run-as-group = root
cgroup = «cpuset,cpu:test»
device = vpns
cisco-client-compat = true
predictable-ips = true

default-domain = example.com

# The pool of addresses that leases will be given from.
ipv4-network = 192.168.2.0
ipv4-netmask = 255.255.255.0

dns = 8.8.8.8

ping-leases = false



Юнит для запуска в systemd


[Unit]
Description=OpenConnect server
After=network.target [Service]
Type=forking Environment=«LD_LIBRARY_PATH=/lib:/lib» PIDFile=/var/run/ocserv.pid
ExecStart=/sbin/ocserv --config=/etc/ocserv.conf Restart=always
[Install]
WantedBy=multi-user.target


После запуска сервера командой "/sbin/ocserv --config=/etc/ocserv.conf"
мы можем подключится при помощи официального AnyConnect Клиента.

через официальное приложение IOS.


Ну и в окончание хочу сказать что проект мне очень понравился. я переписывался с разработчиком и он мне очень оперативно и подробно отвечал.
Сервер очень шустрый мне показалось, что скорость не режется вообще
Не проходите мимо!
Теги:
Хабы:
Всего голосов 12: ↑8 и ↓4+4
Комментарии22

Публикации

Истории

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань