![](https://habrastorage.org/getpro/habr/post_images/819/593/3c3/8195933c3abfa8f91a17cabb5b200a79.png)
В прошлой своей заметке я описывал 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 Клиента.
![](https://habrastorage.org/getpro/habr/post_images/bde/61e/520/bde61e5202302f4b916c7d1ac35d46ab.jpg)
через официальное приложение IOS.
![](https://habrastorage.org/getpro/habr/post_images/fa1/621/20f/fa162120f6d31a18a20f39f02dd55857.png)
Ну и в окончание хочу сказать что проект мне очень понравился. я переписывался с разработчиком и он мне очень оперативно и подробно отвечал.
Сервер очень шустрый мне показалось, что скорость не режется вообще
Не проходите мимо!