В прошлой своей заметке я описывал 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…
}
InstallGmp()
{
if [ "$isget" = «get» ]
then
rm -rfv ./gmp-6.0.0a
wget -c «gmplib.org/download/gmp/gmp-6.0.0a.tar.bz2»
tar -xf ./gmp-6.0.0a.tar.bz2
fi
cd gmp-6.0.0
make V=0 clean
./configure --prefix=/ --host=$HOST
check_success
make V=0 -j 4
check_success
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 --o utfile 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-certific ate ca-cert.pem --load-ca-privkey ca-key.pem --template server.tmpl --outfile se rver-cert.pem
mv -fv ./server-cert.pem /etc/
mv -fv ./server-key.pem /etc/
ocpasswd root -c /etc/ocpasswd
Файл настроек
cat /etc/ocserv.conf
max-clients = 16
max-same-clients = 16
tcp-port = 443
udp-port = 443
keepalive = 32400
dpd = 90
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 = 40
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.
Ну и в окончание хочу сказать что проект мне очень понравился. я переписывался с разработчиком и он мне очень оперативно и подробно отвечал.
Сервер очень шустрый мне показалось, что скорость не режется вообще
Не проходите мимо!
Автор: Mopper