Показаны сообщения с ярлыком openconnect. Показать все сообщения
Показаны сообщения с ярлыком openconnect. Показать все сообщения

суббота, 1 февраля 2020 г.

OpenConnect подключение клиента

Для windows переименовать ca-sert.pem в ca-sert.crt

ca-sert.crt установить в Доверенные корневые центры сертификации




 
Ввести пароль:

http://10.10.10.2/k_transgaz
 

суббота, 7 сентября 2019 г.

Astra Orel 2.12 установка openconnect

Установка openconnect

$ sudo apt install debian-archive-keyring dirmngr
$ sudo nano /etc/apt/sources.list

Добавить:

deb http://deb.debian.org/debian/ stretch main
#deb https://mirror.yandex.ru/debian/ stretch main contrib non-free


Сохранить.

$ sudo apt update
$ sudo apt install openconnect

воскресенье, 21 июля 2019 г.

Установка OpenConnect с самоподписанным сертификатом

Setup OpenConnect VPN Server for Cisco AnyConnect on Ubuntu 14.04 x64
Install OpenConnect Server on Ubuntu 16.04
Set up OpenConnect VPN Server (ocserv) on Ubuntu 16.04/17.10 with Let’s Encrypt
How to install ocserv (OpenConnect server, aka: free version of Cisco's Anyconnect) on Ubuntu 14.04
OCserv on Ubuntu for Cisco AnyConnect Client
Install OpenConnect VPN Server with Trusted Certificate from Let's Encrypt
OpenConnect Server with Duo Two-Factor Auth in Ubuntu 16.04
OpenConnect VPN Server Installation
在 Ubuntu 16.04.1 Server 上建置 OpenConnect SSL VPN Server
Openconnect 服务端 ocserv 的部署
How to Set up an OpenConnect VPN Server


мануал
Ocserv Firewall - iptables IPv4
Настройка iptables
Скрипт centos
Скрипт ubuntu
Linode CentOS 配置 ocserv 


Клиент Windows 10:
After installing the GUI in Windows 10 ...
Windows 10 - invalid routes
Ссылка на рабочий клиент 1.51 !!! (не старше)
Установка с картинками



В данном описании вариант для 1С без перенаправления интернет трафика: 

# apt update
# apt upgrade
# apt install mc
# adduser user
# usermod -aG sudo user
# su user
$ cd ~
$ mkdir ~/.ssh
$ cd ~/.ssh
$ ip a
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):user@X.X.X.X
$ ls
Скачать и использовать для входа /home/user/.ssh/user@X.X.X.X
$ cp ~/.ssh/user@X.X.X.X.pub ~/.ssh/authorized_keys
$ rm ~/.ssh/user@X.X.X.X.pub
$ rm ~/.ssh/user@X.X.X.X
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ exit
# nano /etc/ssh/sshd_config

Проверить:

PasswordAuthentication no
.....

PubkeyAuthentication yes
ChallengeResponseAuthentication no

PermitRootLogin no
 
Сохранить.

$ sudo systemctl reload sshd

Зайти от user


# отключим ipv6
$ sudo /bin/su -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
$ sudo /bin/su -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
$ sudo /bin/su -c "echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf"
$ sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
$ sudo sysctl -p

=========================================================

$ sudo apt install ocserv
$ sudo apt install gnutls-bin
$ sudo mkdir /etc/ocserv/ssl/
$ cd /etc/ocserv/ssl/
$ sudo -i

Все сертификаты формируем в /etc/ocserv/ssl/ !!!

Генерация CA


(Если есть уже подготовленные кладем в root ca-key.pem ca-cert.pem)

# certtool --generate-privkey --outfile ca-key.pem
 
# cat << _EOF_ >ca.tmpl
cn = "VPN CA"
organization = "Big Corp"
serial = 1
expiration_days = -1
ca
signing_key
cert_signing_key
crl_signing_key
_EOF_
  
 
# nano ca.tmpl
 
cn = "VPN CA"
organization = "Big Corp"
serial = 1
expiration_days = -1
ca
signing_key
cert_signing_key
crl_signing_key
 
Сохранить.  
 
# certtool --generate-self-signed --load-privkey ca-key.pem \
           --template ca.tmpl --outfile ca-cert.pem
 

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

В следующем примере создается ключ сервера и пара сертификатов.

Если у нас нет домена ниже прописываем свой ip
ip_address = "1.2.3.4", dns_name заменить на свой, можно убрать или не убирать!


# certtool --generate-privkey --outfile server-key.pem
 
# cat << _EOF_ >server.tmpl
cn = "VPN server"
dns_name = "www.example.com"
dns_name = "vpn1.example.com"
ip_address = "1.2.3.4"
organization = "MyCompany"
expiration_days = -1
signing_key
encryption_key #only if the generated key is an RSA one
tls_www_server
_EOF_
 
# nano server.tmpl 
 
cn = "VPN server"
dns_name = "www.example.com"
dns_name = "vpn1.example.com"
ip_address = "1.2.3.4"
organization = "MyCompany"
expiration_days = -1
signing_key
encryption_key #only if the generated key is an RSA one
tls_www_server 
 
# 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 
 


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

==========================

ниже сделаем скриптом!

# certtool --generate-privkey --outfile user-key.pem
 
Ниже не делаем, сделаем скриптом gen-client-cert.sh:  
 
# cat << _EOF_ >user.tmpl
cn = "user"
unit = "admins"
expiration_days = 365
signing_key
tls_www_client
_EOF_
 
 
# certtool --generate-certificate --load-privkey user-key.pem \
           --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem \
           --template user.tmpl --outfile user-cert.pem

# certtool --to-p12 --load-privkey user-key.pem \
           --pkcs-cipher 3des-pkcs12 \
           --load-certificate user-cert.pem \
           --outfile user.p12 --outder


==========================

Сделаем скриптом gen-client-cert.sh: 

$ sudo nano gen-client-cert.sh

Вставить

#!/bin/bash
USER=$1
CA_DIR=$2
SERIAL=`date +%s`
certtool --generate-privkey --outfile $USER-key.pem
cat << _EOF_ >user.tmpl
cn = "$USER"
unit = "users"
serial = "$SERIAL"
expiration_days = 3650
signing_key
tls_www_client
_EOF_
certtool --generate-certificate --load-privkey $USER-key.pem --load-ca-certificate $CA_DIR/ca-cert.pem --load-ca-privkey $CA_DIR/ca-key.pem --template user.tmpl --outfile $USER-cert.pem
openssl pkcs12 -export -inkey $USER-key.pem -in $USER-cert.pem -name "$USER VPN Client Cert" -certfile $CA_DIR/ca-cert.pem -out $USER.p12

Сохранить.

$ ip a
ниже в конце строки точка:
$ sudo sh gen-client-cert.sh user01@X.X.X.X .
.....
$ sudo sh gen-client-cert.sh user10@X.X.X.X .

$ cd /etc/ocserv/ssl/ 
$ mkdir  /home/user/cert
$ sudo cp /etc/ocserv/ssl/ca-cert.pem /home/user/cert
$ sudo cp /etc/ocserv/ssl/ca-key.pem /home/user/cert
$ sudo cp /etc/ocserv/ssl/*.p12 /home/user/cert
$ cd /home/user/cert
$ sudo tar -czpf cert.tar.gz *
$ sudo chmod 700 /etc/ocserv/ssl/

Скачать на клиента  /home/user/cert/cert.tar.gz

$ cd ~
$  sudo rm -R /home/user/cert


Задать клиентам ip

$ sudo mkdir /etc/ocserv/config-per-user/
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.2' > /etc/ocserv/config-per-user/server@X.X.X.X"
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.3' > /etc/ocserv/config-per-user/user@X.X.X.X"
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.101' > /etc/ocserv/config-per-user/user01@X.X.X.X"
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.102' > /etc/ocserv/config-per-user/user02@X.X.X.X"
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.103' > /etc/ocserv/config-per-user/user03@X.X.X.X"
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.104' > /etc/ocserv/config-per-user/user04@X.X.X.X"
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.105' > /etc/ocserv/config-per-user/user05@X.X.X.X"
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.106' > /etc/ocserv/config-per-user/user06@X.X.X.X"
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.107' > /etc/ocserv/config-per-user/user07@X.X.X.X"
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.108' > /etc/ocserv/config-per-user/user08@X.X.X.X"
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.109' > /etc/ocserv/config-per-user/user09@X.X.X.X"
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.110' > /etc/ocserv/config-per-user/user10@X.X.X.X"


$ sudo cp /etc/ocserv/ocserv.conf /etc/ocserv/ocserv.conf.$(date +%F)
$ sudo sed -i 's|^auth = "pam|#auth = "pam|' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/#auth = "certificate"/auth = "certificate"/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/max-same-clients = 2/max-same-clients = 1/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's|server-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem|server-cert = /etc/ocserv/ssl/server-cert.pem|' /etc/ocserv/ocserv.conf
$ sudo sed -i 's|server-key = /etc/ssl/private/ssl-cert-snakeoil.key|server-key = /etc/ocserv/ssl/server-key.pem|' /etc/ocserv/ocserv.conf
$ sudo sed -i 's|ca-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem|ca-cert = /etc/ocserv/ssl/ca-cert.pem|' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/cert-user-oid = 0.9.2342.19200300.100.1.1/cert-user-oid = 2.5.4.3/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/ipv4-network = 192.168.1.0/ipv4-network = 10.10.10.0/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/dns = 192.168.1.2/dns = 8.8.8.8/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/^route = 10.10.10.0/# route = 10.10.10.0/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/^route = 192.168.0.0/# route = 192.168.0.0/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/^\(try-mtu-discovery = \).*$/\1''true/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's|#config-per-user = /etc/ocserv/config-per-user/|config-per-user = /etc/ocserv/config-per-user/|' /etc/ocserv/ocserv.conf


Или так:


$ cd ~
$ sudo nano ocserv_conf.sh

Вставить:

cp /etc/ocserv/ocserv.conf /etc/ocserv/ocserv.conf.$(date +%F)
sed -i 's|^auth = "pam|#auth = "pam|' /etc/ocserv/ocserv.conf
sed -i 's/#auth = "certificate"/auth = "certificate"/' /etc/ocserv/ocserv.conf
sed -i 's/max-same-clients = 2/max-same-clients = 1/' /etc/ocserv/ocserv.conf
sed -i 's|server-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem|server-cert = /etc/ocserv/ssl/server-cert.pem|' /etc/ocserv/ocserv.conf
sed -i 's|server-key = /etc/ssl/private/ssl-cert-snakeoil.key|server-key = /etc/ocserv/ssl/server-key.pem|' /etc/ocserv/ocserv.conf
sed -i 's|ca-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem|ca-cert = /etc/ocserv/ssl/ca-cert.pem|' /etc/ocserv/ocserv.conf
sed -i 's/cert-user-oid = 0.9.2342.19200300.100.1.1/cert-user-oid = 2.5.4.3/' /etc/ocserv/ocserv.conf
sed -i 's/ipv4-network = 192.168.1.0/ipv4-network = 10.10.10.0/' /etc/ocserv/ocserv.conf
sed -i 's/dns = 192.168.1.2/dns = 8.8.8.8/' /etc/ocserv/ocserv.conf
sed -i 's/^route = 10.10.10.0/# route = 10.10.10.0/' /etc/ocserv/ocserv.conf
sed -i 's/^route = 192.168.0.0/# route = 192.168.0.0/' /etc/ocserv/ocserv.conf
sed -i 's/^\(try-mtu-discovery = \).*$/\1''true/' /etc/ocserv/ocserv.conf
sed -i 's|#config-per-user = /etc/ocserv/config-per-user/|config-per-user = /etc/ocserv/config-per-user/|' /etc/ocserv/ocserv.conf

Сохранить.

$ sudo sh ocserv_conf.sh

$ sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv.service
$ sudo nano /etc/systemd/system/ocserv.service

[Unit]
Description=OpenConnect SSL VPN server
Documentation=man:ocserv(8)
After=network-online.target
#Requires=ocserv.socket #Заккоменитировать!

[Service]
PrivateTmp=true
PIDFile=/var/run/ocserv.pid
ExecStart=/usr/sbin/ocserv --foreground --pid-file /var/run/ocserv.pid --config /etc/ocserv/ocserv.conf
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
#Also=ocserv.socket #Заккоменитировать!

Сохранить.

$ sudo systemctl daemon-reload
$ sudo systemctl enable ocserv.service
$ sudo systemctl restart ocserv.service
$ sudo systemctl status ocserv.service
#$ sudo systemctl stop ocserv.socket
#$ sudo systemctl disable ocserv.socket

Не делаем:
#$ sudo ocpasswd -c /etc/ocserv/ocpasswd username


Для адекватной проверки скорости соединения, нужно создать nat до перезагрузки
Узнаем имя сетевого адаптера :
$ ip a
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group
==================================================
Не делаем:
В данном случае  ens3:

$ sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

$ sudo iptables -t nat -L POSTROUTING

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere
==================================================


Если нужна маршрутизация интернета постоянно, можно настроить ufw :

$ sudo ufw enable
$ sudo ufw allow 22
$ sudo ufw allow 443


#$ sudo nano /etc/default/ufw
$ sudo sed -i 's|IPV6=yes|IPV6=no|' /etc/default/ufw
$ sudo sed -i 's|DEFAULT_FORWARD_POLICY="DROP"|DEFAULT_FORWARD_POLICY="ACCEPT"|' /etc/default/ufw

$ ip a
..... ens18

Указать соответствующий ens3 или ens18:

#$ sudo nano /etc/ufw/before.rules

$ sudo -i
# echo "*nat" >> /etc/ufw/before.rules
# echo ":POSTROUTING ACCEPT [0:0]" >> /etc/ufw/before.rules
# echo "-A POSTROUTING -o ens3 -j MASQUERADE" >> /etc/ufw/before.rules
# echo "COMMIT" >> /etc/ufw/before.rules
# ufw disable && ufw enable

# ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
443                        ALLOW       Anywhere
 

$ sudo ufw allow from x.x.x.x proto tcp to any port 22

#$ sudo ufw status numbered
#$ sudo ufw delete 3
#$ sudo ufw disable && sudo ufw enable


Можно проверерять вход с клиента

windows 10 gui client OpenConnect

Для windows переименовать ca-sert.pem в ca-sert.crt

ca-sert.crt установить в Доверенные корневые центры сертификации









Проверить скорость интернета



Отключение маршрутизации интернет трафика:

$ sudo nano /etc/ocserv/ocserv.conf

Изменить:
#dns=8.8.8.8
route = 10.10.10.0/255.255.255.0
#route = default
 
Сохранить.

$ sudo systemctl restart ocserv





Подключение клиента на Ubuntu

Проверка

$ sudo apt install openconnect

Положить сертификат
 /root/server.p12 - клиентский
/root/ca-cert.pem - сервера


Запустить локально:
$ sudo openconnect -b xxx.xxx.xxx.xxx -c /root/server.p12 --cafile /root/ca-cert.pem





Если в логах появится постоянно:

Jul 16 13:44:47 u1804 openconnect[1796]: DTLS handshake failed: The operation timed out
Jul 16 13:46:17 u1804 openconnect[1796]: DTLS handshake failed: Resource temporarily unavailable, try again.
Jul 16 13:50:48 u1804 openconnect[1796]: message repeated 3 times: [ DTLS handshake failed: Resource temporarily unavailable, try again.]

Добавить:
--no-dtls

$ sudo openconnect -b XXX.XXX.XXX.XXX -c /root/server@XXX.XXX.XXX.XXX.p12 --key-password=password --cafile /root/ca-cert.pem --no-dtls --syslog

Сделать службу:

$ sudo nano /etc/systemd/system/openconnect.service

Вставить:

[Unit]
  Description=OpenConnect VPN Client
  After=network-online.target
  Wants=network-online.target

[Service]
  Type=simple
  ExecStart=/usr/sbin/openconnect XXX.XXX.XXX.XXX -c /root/server@XXX.XXX.XXX.XXX.p12 --key-password=password --cafile /root/ca-cert.pem --no-dtls --syslog
  #--no-dtls # Добавить в предыдущую строку для отключения dtls
  ExecStop=/usr/bin/pkill openconnect
  Restart=always
  RestartSec=2

[Install]
  WantedBy=multi-user.target

Сохранить.

$ sudo systemctl enable openconnect.service

$ sudo systemctl start openconnect.service

Если что то менялось:
$ sudo systemctl daemon-reload
$ sudo systemctl restart openconnect.service

Проверить ip
$ wget -O - -q icanhazip.com

Маршрутизация интернет трафика:

$ sudo nano /etc/ocserv/ocserv.conf

Если маршрут закомментирован
dns=8.8.8.8
#route = 10.10.10.0/255.255.255.0
или прямо указан (по умолчанию default даже если закомментировано)
route = default

Интернет трафик идет через tun0

На клиенте:

$ route



Отключение маршрутизации интернет трафика:

$ sudo nano /etc/ocserv/ocserv.conf

Изменить:
dns=8.8.8.8
route = 10.10.10.0/255.255.255.0
#route = default
 

Сохранить.

$ sudo systemctl restart ocserv


Интернет трафик идет через enp0s3


Если dns указан, обращение идет по tun0

$ sudo nano /etc/ocserv/ocserv.conf

Изменить:

#dns=8.8.8.8
route = 10.10.10.0/255.255.255.0
#route = default
 
Сохранить.

$ sudo systemctl restart ocserv


Если dns закомментирован, обращение идет по enp0s3


Горячая замена vpn при подключении по vpn

1. Положить в /root необходимые сертификаты.
2. $ sudo nano /etc/systemd/system/openconnect.service

Старую стрчку с подключением закомментировать, новую добавить.

#ExecStart=....
ExecStart=....

Сохранить.

3.
$ sudo systemctl daemon-reload && sudo systemctl restart openconnect.service

4. Подключиться по другой vpn.

воскресенье, 14 июля 2019 г.

windows 10 gui client OpenConnect

1. Авторизация по паролю, сертификаты letsencrypt
На некоторых экземплярах windows 10 работает, на других при подключении так:


2019-07-14 22:27:01 | 2100 | There was a non-CA certificate in the trusted list: OU=Copyright (c) 1997 Microsoft Corp.,OU=Microsoft Corporation,CN=Microsoft Root Authority.
2019-07-14 22:27:01 | 2100 | There was a non-CA certificate in the trusted list: C=US,O=MSFT,CN=Microsoft Authenticode(tm) Root Authority.
2019-07-14 22:27:01 | 2100 | There was a non-CA certificate in the trusted list: CN=Root Agency.

Удалось настроить прописав сертификат:

ca-cert = /etc/letsencrypt/live/example.com/chain.pem




2. Вариант с самоподписанным сертификатом:

ca-cert = /etc/ocserv/ssl/ca-cert.pem




3. Вариант с самоподписанным сертификатом, вход по клиентскому сертификату,
его нужно предварительно импортировать.








Установка OpenConnect с самоподписанным сертификатом

Setup OpenConnect VPN Server for Cisco AnyConnect on Ubuntu 14.04 x64
Install OpenConnect Server on Ubuntu 16.04
Set up OpenConnect VPN Server (ocserv) on Ubuntu 16.04/17.10 with Let’s Encrypt
How to install ocserv (OpenConnect server, aka: free version of Cisco's Anyconnect) on Ubuntu 14.04
OCserv on Ubuntu for Cisco AnyConnect Client
Install OpenConnect VPN Server with Trusted Certificate from Let's Encrypt
OpenConnect Server with Duo Two-Factor Auth in Ubuntu 16.04
OpenConnect VPN Server Installation
在 Ubuntu 16.04.1 Server 上建置 OpenConnect SSL VPN Server
Openconnect 服务端 ocserv 的部署


мануал
Ocserv Firewall - iptables IPv4
Настройка iptables
Скрипт centos
Скрипт ubuntu
Linode CentOS 配置 ocserv 


Клиент Windows 10:
After installing the GUI in Windows 10 ...
Windows 10 - invalid routes
Ссылка на рабочий клиент 1.51 !!! (не старше)
Установка с картинками



В данном описании вариант для 1С без перенаправления интернет трафика: 

# apt update
# apt upgrade
# apt install mc
# adduser user
# usermod -aG sudo user
# su user
$ cd ~
$ mkdir ~/.ssh
$ cd ~/.ssh
$ ip a
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):user@X.X.X.X
$ ls
Скачать и использовать для входа /home/user/.ssh/user@X.X.X.X
$ cp ~/.ssh/user@X.X.X.X.pub ~/.ssh/authorized_keys
$ rm ~/.ssh/user@X.X.X.X.pub
$ rm ~/.ssh/user@X.X.X.X
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ exit
# nano /etc/ssh/sshd_config

Проверить:

PasswordAuthentication no
.....

PubkeyAuthentication yes
ChallengeResponseAuthentication no

PermitRootLogin no
 
Сохранить.

$ sudo systemctl reload sshd

Зайти от user


# отключим ipv6
$ sudo /bin/su -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
$ sudo /bin/su -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
$ sudo /bin/su -c "echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf"
$ sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
$ sudo sysctl -p

=========================================================

$ sudo apt install ocserv
$ sudo apt install gnutls-bin
$ sudo mkdir /etc/ocserv/ssl/

$ cd /etc/ocserv/ssl/
$ sudo certtool --generate-privkey --outfile ca-key.pem


$ sudo nano ca.tmpl 
Вставить (для cn указать реальный ip 104.236.38.188)::

cn = "VPN CA"
organization = "Home.org"
serial = 1
expiration_days = 3650
ca
signing_key
cert_signing_key
crl_signing_key

Сохранить.

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

$ sudo certtool --generate-privkey --outfile server-key.pem
$ sudo nano server.tmpl

Вставить (для cn указать реальный ip 104.236.38.188):

cn = "104.236.38.188"
organization = "
Home.org"
serial = 2
expiration_days = 3650
encryption_key
signing_key
tls_www_server


Сохранить.

$ sudo 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

$ sudo nano gen-client-cert.sh

Вставить

#!/bin/bash
USER=$1
CA_DIR=$2
SERIAL=`date +%s`
certtool --generate-privkey --outfile $USER-key.pem
cat << _EOF_ >user.tmpl
cn = "$USER"
unit = "users"
serial = "$SERIAL"
expiration_days = 3650
signing_key
tls_www_client
_EOF_
certtool --generate-certificate --load-privkey $USER-key.pem --load-ca-certificate $CA_DIR/ca-cert.pem --load-ca-privkey $CA_DIR/ca-key.pem --template user.tmpl --outfile $USER-cert.pem
openssl pkcs12 -export -inkey $USER-key.pem -in $USER-cert.pem -name "$USER VPN Client Cert" -certfile $CA_DIR/ca-cert.pem -out $USER.p12

Сохранить.

$ ip a
ниже в конце строки точка:
$ sudo sh gen-client-cert.sh user01@X.X.X.X .
.....
$ sudo sh gen-client-cert.sh user10@X.X.X.X .

=============================
Не делаем:
Скачать сертификаты:
Из папки  /etc/ocserv/ssl/
ca-cert.pem
user01@X.X.X.X.p12
....
user10@X.X.X.X.p12
=============================

$ mkdir  /home/user/cert
$ sudo cp /etc/ocserv/ssl/ca-cert.pem /home/user/cert
$ sudo cp /etc/ocserv/ssl/*.p12 /home/user/cert
$ cd /home/user/cert
$ sudo tar -czpf cert.tar.gz *
$ sudo chmod 700 /etc/ocserv/ssl/

Скачать на клиента  /home/user/cert/cert.tar.gz

$ cd ~
$  sudo rm -R /home/user/cert


Задать клиентам ip

$ sudo mkdir /etc/ocserv/config-per-user/
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.2' > /etc/ocserv/config-per-user/server@X.X.X.X"
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.3' > /etc/ocserv/config-per-user/user@X.X.X.X"
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.101' > /etc/ocserv/config-per-user/user01@X.X.X.X"
....
....
sudo /bin/su -c "echo 'explicit-ipv4=10.10.10.110' > /etc/ocserv/config-per-user/user10@X.X.X.X"


$ sudo cp /etc/ocserv/ocserv.conf /etc/ocserv/ocserv.conf.$(date +%F)
$ sudo sed -i 's|^auth = "pam|#auth = "pam|' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/#auth = "certificate"/auth = "certificate"/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/max-same-clients = 2/max-same-clients = 1/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's|server-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem|server-cert = /etc/ocserv/ssl/server-cert.pem|' /etc/ocserv/ocserv.conf
$ sudo sed -i 's|server-key = /etc/ssl/private/ssl-cert-snakeoil.key|server-key = /etc/ocserv/ssl/server-key.pem|' /etc/ocserv/ocserv.conf
$ sudo sed -i 's|ca-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem|ca-cert = /etc/ocserv/ssl/ca-cert.pem|' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/cert-user-oid = 0.9.2342.19200300.100.1.1/cert-user-oid = 2.5.4.3/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/ipv4-network = 192.168.1.0/ipv4-network = 10.10.10.0/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/dns = 192.168.1.2/dns = 8.8.8.8/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/^route = 10.10.10.0/# route = 10.10.10.0/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/^route = 192.168.0.0/# route = 192.168.0.0/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's/^\(try-mtu-discovery = \).*$/\1''true/' /etc/ocserv/ocserv.conf
$ sudo sed -i 's|#config-per-user = /etc/ocserv/config-per-user/|config-per-user = /etc/ocserv/config-per-user/|' /etc/ocserv/ocserv.conf


Или так:


$ cd ~
$ sudo nano ocserv_conf.sh

Вставить:

cp /etc/ocserv/ocserv.conf /etc/ocserv/ocserv.conf.$(date +%F)
sed -i 's|^auth = "pam|#auth = "pam|' /etc/ocserv/ocserv.conf
sed -i 's/#auth = "certificate"/auth = "certificate"/' /etc/ocserv/ocserv.conf
sed -i 's/max-same-clients = 2/max-same-clients = 1/' /etc/ocserv/ocserv.conf
sed -i 's|server-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem|server-cert = /etc/ocserv/ssl/server-cert.pem|' /etc/ocserv/ocserv.conf
sed -i 's|server-key = /etc/ssl/private/ssl-cert-snakeoil.key|server-key = /etc/ocserv/ssl/server-key.pem|' /etc/ocserv/ocserv.conf
sed -i 's|ca-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem|ca-cert = /etc/ocserv/ssl/ca-cert.pem|' /etc/ocserv/ocserv.conf
sed -i 's/cert-user-oid = 0.9.2342.19200300.100.1.1/cert-user-oid = 2.5.4.3/' /etc/ocserv/ocserv.conf
sed -i 's/ipv4-network = 192.168.1.0/ipv4-network = 10.10.10.0/' /etc/ocserv/ocserv.conf
sed -i 's/dns = 192.168.1.2/dns = 8.8.8.8/' /etc/ocserv/ocserv.conf
sed -i 's/^route = 10.10.10.0/# route = 10.10.10.0/' /etc/ocserv/ocserv.conf
sed -i 's/^route = 192.168.0.0/# route = 192.168.0.0/' /etc/ocserv/ocserv.conf
sed -i 's/^\(try-mtu-discovery = \).*$/\1''true/' /etc/ocserv/ocserv.conf
sed -i 's|#config-per-user = /etc/ocserv/config-per-user/|config-per-user = /etc/ocserv/config-per-user/|' /etc/ocserv/ocserv.conf

Сохранить.

$ sudo sh ocserv_conf.sh

$ sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv.service
$ sudo nano /etc/systemd/system/ocserv.service

[Unit]
Description=OpenConnect SSL VPN server
Documentation=man:ocserv(8)
After=network-online.target
#Requires=ocserv.socket #Заккоменитировать!

[Service]
PrivateTmp=true
PIDFile=/var/run/ocserv.pid
ExecStart=/usr/sbin/ocserv --foreground --pid-file /var/run/ocserv.pid --config /etc/ocserv/ocserv.conf
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
#Also=ocserv.socket #Заккоменитировать!

Сохранить.

$ sudo systemctl daemon-reload
$ sudo systemctl enable ocserv.service
$ sudo systemctl restart ocserv.service
$ sudo systemctl status ocserv.service
#$ sudo systemctl stop ocserv.socket
#$ sudo systemctl disable ocserv.socket

Не делаем:
#$ sudo ocpasswd -c /etc/ocserv/ocpasswd username


Для адекватной проверки скорости соединения, нужно создать nat до перезагрузки
Узнаем имя сетевого адаптера :
$ ip a
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group
==================================================
Не делаем:
В данном случае  ens3:

$ sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

$ sudo iptables -t nat -L POSTROUTING

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere
==================================================


Если нужна маршрутизация интернета постоянно, можно настроить ufw :

$ sudo ufw enable
$ sudo ufw allow 22
$ sudo ufw allow 443


#$ sudo nano /etc/default/ufw
$ sudo sed -i 's|IPV6=yes|IPV6=no|' /etc/default/ufw
$ sudo sed -i 's|DEFAULT_FORWARD_POLICY="DROP"|DEFAULT_FORWARD_POLICY="ACCEPT"|' /etc/default/ufw

$ ip a
..... ens18

Указать соответствующий ens3 или ens18:

#$ sudo nano /etc/ufw/before.rules

$ sudo -i
# echo "*nat" >> /etc/ufw/before.rules
# echo ":POSTROUTING ACCEPT [0:0]" >> /etc/ufw/before.rules
# echo "-A POSTROUTING -o ens3 -j MASQUERADE" >> /etc/ufw/before.rules
# echo "COMMIT" >> /etc/ufw/before.rules
# ufw disable && ufw enable

# ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
443                        ALLOW       Anywhere
 


Можно проверерять вход с клиента

windows 10 gui client OpenConnect





Проверить скорость интернета



Отключение маршрутизации интернет трафика:

$ sudo nano /etc/ocserv/ocserv.conf

Изменить:
#dns=8.8.8.8
route = 10.10.10.0/255.255.255.0
#route = default
 
Сохранить.

$ sudo systemctl restart ocserv





Подключение клиента на Ubuntu

Проверка

$ sudo apt install openconnect

Положить сертификат
 /root/server.p12 - клиентский
/root/ca-cert.pem - сервера


Запустить локально:
$ sudo openconnect -b xxx.xxx.xxx.xxx -c /root/server.p12 --cafile /root/ca-cert.pem





Если в логах появится постоянно:

Jul 16 13:44:47 u1804 openconnect[1796]: DTLS handshake failed: The operation timed out
Jul 16 13:46:17 u1804 openconnect[1796]: DTLS handshake failed: Resource temporarily unavailable, try again.
Jul 16 13:50:48 u1804 openconnect[1796]: message repeated 3 times: [ DTLS handshake failed: Resource temporarily unavailable, try again.]

Добавить:
--no-dtls

$ sudo openconnect -b XXX.XXX.XXX.XXX -c /root/server@XXX.XXX.XXX.XXX.p12 --key-password=password --cafile /root/ca-cert.pem --no-dtls --syslog

Сделать службу:

$ sudo nano /etc/systemd/system/openconnect.service

Вставить:

[Unit]
  Description=OpenConnect VPN Client
  After=network-online.target
  Wants=network-online.target

[Service]
  Type=simple
  ExecStart=/usr/sbin/openconnect XXX.XXX.XXX.XXX -c /root/server@XXX.XXX.XXX.XXX.p12 --key-password=password --cafile /root/ca-cert.pem --no-dtls --syslog
  #--no-dtls # Добавить в предыдущую строку для отключения dtls
  ExecStop=/usr/bin/pkill openconnect
  Restart=always
  RestartSec=2

[Install]
  WantedBy=multi-user.target

Сохранить.

$ sudo systemctl enable openconnect.service

$ sudo systemctl start openconnect.service

Если что то менялось:
$ sudo systemctl daemon-reload
$ sudo systemctl restart openconnect.service

Проверить ip
$ wget -O - -q icanhazip.com

Маршрутизация интернет трафика:

$ sudo nano /etc/ocserv/ocserv.conf

Если маршрут закомментирован
dns=8.8.8.8
#route = 10.10.10.0/255.255.255.0
или прямо указан (по умолчанию default даже если закомментировано)
route = default

Интернет трафик идет через tun0

На клиенте:

$ route



Отключение маршрутизации интернет трафика:

$ sudo nano /etc/ocserv/ocserv.conf

Изменить:
dns=8.8.8.8
route = 10.10.10.0/255.255.255.0
#route = default
 

Сохранить.

$ sudo systemctl restart ocserv


Интернет трафик идет через enp0s3


Если dns указан, обращение идет по tun0

$ sudo nano /etc/ocserv/ocserv.conf

Изменить:

#dns=8.8.8.8
route = 10.10.10.0/255.255.255.0
#route = default
 
Сохранить.

$ sudo systemctl restart ocserv


Если dns закомментирован, обращение идет по enp0s3


Горячая замена vpn при подключении по vpn

1. Положить в /root необходимые сертификаты.
2. $ sudo nano /etc/systemd/system/openconnect.service

Старую стрчку с подключением закомментировать, новую добавить.

#ExecStart=....
ExecStart=....

Сохранить.

3.
$ sudo systemctl daemon-reload && sudo systemctl restart openconnect.service

4. Подключиться по другой vpn.

среда, 10 июля 2019 г.

OpenConnect задать ip клиенту


Совместная работа OpenConnect и OpenVPN в среде Windows
Импорт клиентского сертификата windows

Должно быть сделано это продолжение.
Для пользователя server:

$ cd /etc/ocserv/ssl/
$ sudo ocpasswd -c /etc/ocserv/ocpasswd server
Enter password:
Re-enter password:


Запустите следующую команду для создания закрытого ключа клиента server

$ sudo certtool --generate-privkey --outfile server-privkey.pem

$ sudo nano server.cfg

Скопировать ниже, uid = "server", пользователя созданного выше: 

# X.509 Certificate options
# The organization of the subject.
organization = "Example Org"

# The common name of the certificate owner.
cn = "server"

# A user id of the certificate owner.
uid = "server"

# In how many days, counting from today, this certificate will expire. Use -1 if there is no expiration date.
expiration_days = 3650

# Whether this certificate will be used for a TLS server
tls_www_client

# Whether this certificate will be used to sign data
signing_key

# Whether this certificate will be used to encrypt data (needed
# in TLS RSA ciphersuites). Note that it is preferred to use different
# keys for encryption and signing.
encryption_key

Сохранить.

Запустите следующую команду для создания сертификата клиента, который будет подписан закрытым ключом CA.

$ sudo certtool --generate-certificate --load-privkey server-privkey.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-privkey.pem --template server.cfg --outfile server-cert.pem

Объедините закрытый ключ клиента и сертификат в файле PKCS # 12, который защищен PIN-кодом.

$ sudo certtool --to-p12 --load-privkey server-privkey.pem --load-certificate server-cert.pem --pkcs-cipher aes-256 --outfile server.p12 --outder
Generating a PKCS #12 structure...
Loading private key list...
Loaded 1 private keys.
Enter a name for the key: server
Enter password:
Confirm password:

$ sudo nano /etc/ocserv/ocserv.conf

Изменить:

config-per-user = /etc/ocserv/config-per-user/

Сохранить. 

$ sudo mkdir /etc/ocserv/config-per-user/

$ sudo nano /etc/ocserv/config-per-user/server

explicit-ipv4=10.10.10.2

Сохранить

$ sudo systemctl restart ocserv

Подключение клиента на Ubuntu

Проверка

$ sudo apt install openconnect

Положить сертификат /root/server.p12

$ sudo openconnect -b vpn.example.com -c /root/server.p12

$ sudo /bin/bash -c '/bin/echo -n password | /usr/sbin/openconnect vpn.example.com -c /root/server.p12'


$ sudo nano /etc/systemd/system/openconnect.service

Вставить:

[Unit]
  Description=OpenConnect VPN Client
  After=network-online.target
  Wants=network-online.target

[Service]
  Type=simple
  #ExecStart=/bin/bash -c '/bin/echo -n password | /usr/sbin/openconnect vpn.example.com -u username --passwd-on-stdin'
  ExecStart=/bin/bash -c '/bin/echo -n password | /usr/sbin/openconnect vpn.example.com -c /root/server.p12'
  ExecStop=/usr/bin/pkill openconnect
  Restart=always
  RestartSec=2

[Install]
  WantedBy=multi-user.target

Сохранить.

$ sudo systemctl enable openconnect.service

$ sudo systemctl start openconnect.service

Если что то менялось:
$ sudo systemctl daemon-reload
$ sudo systemctl start openconnect.service


Под windows сделать reconnect (если перезагрузка сервера) через 2 с.

start.bat

:again
"c:\Program Files (x86)\OpenConnect-GUI\openconnect.exe" vpn.com -c client.p12 --key-password=password --reconnect-timeout 2
goto again



e:\ubuntu\Openconnect>openvpn --show-adapters
Available TAP-WIN32 adapters [name, GUID]:
'Ethernet 2' {500EBB39-0CC1-4CBB-A1AA-7DECD679C5D5}
'Ethernet 3' {879AEEC2-87B6-4F0B-BFC6-78046DC6A513}
'Ethernet 4' {D64B1550-D033-4810-8F13-03B18992A20C}
'Ethernet 5' {CA18A6B2-4FAF-4247-9A12-17080869463C}
'Ethernet 6' {361E1C54-5E8F-4450-AD13-6FCAF8E9100A}
'Ethernet 7' {D0C959D0-694C-4984-96A9-A6A8869052A8}

"C:\Program Files\TAP-Windows\bin\addtap.bat"

Для совместной работы OpenVPN c OpenConnect через gui совет наделать много tap, (по числу соединений), для OpenVPN с конца, указывая в конфигах:

;dev-node MyTap
dev-node 'Ethernet 7'

Для OpenConnect tap от 'Ethernet 2' и далее.


понедельник, 8 июля 2019 г.

Установка OpenConnect на Ubuntu 18.04

Продолжение:
Совместимый с CISCO AnyClient VPN сервер OpenConnect на Linux

Set up OpenConnect VPN Server (ocserv) on Ubuntu 16.04/18.04 with Let’s Encrypt
How to Set up Certificate Authentication in OpenConnect VPN Server (ocserv)

Перевод?
Настройка OpenConnect VPN Server (ocserv) на Ubuntu 16.04 / 17.10 с Let’s Encrypt
Настройка аутентификации по сертификату в OpenConnect VPN Server (ocserv)

мануал


Клиент Windows 10:
After installing the GUI in Windows 10 ...
Windows 10 - invalid routes
Ссылка на рабочий клиент 1.51 !!! (не старше)
Установка с картинками



В данном описании вариант для 1С без перенаправления интернет трафика: 

# apt update
# apt upgrade
# apt install mc
# adduser user
# usermod -aG sudo user
# su user
$ cd ~
$ mkdir ~/.ssh
$ cd ~/.ssh
$ ssh-keygen -t rsa
Скачать и использовать для входа /home/user/.ssh/id_rsa
$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
$ rm ~/.ssh/id_rsa.pub
$ rm ~/.ssh/id_rsa
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ exit
# nano /etc/ssh/sshd_config

Проверить:

PasswordAuthentication no
.....

PubkeyAuthentication yes
ChallengeResponseAuthentication no

Сохранить.

$ sudo systemctl reload sshd

После проверки входа и sudo

Отключить вход root по ssh

$ sudo nano /etc/ssh/sshd_config

Исправить:

PermitRootLogin no

Сохранить.

$ sudo systemctl reload sshd
# отключим ipv6
$ sudo /bin/su -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
$ sudo /bin/su -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
$ sudo /bin/su -c "echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf"
$ sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
$ sudo sysctl -p

=========================================================

$ sudo apt install ocserv
$ sudo systemctl status ocserv
#$ sudo apt install software-properties-common
#$ sudo add-apt-repository ppa:certbot/certbot
#$ sudo apt update
$ sudo apt install certbot
$ certbot --version
certbot 0.31.0

#$ sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email your-email-address -d vpn.example.com
$ sudo apt install apache2
$ sudo nano /etc/apache2/sites-available/vpn.example.com.conf


<VirtualHost *:80>       
        ServerName vpn.example.com

        DocumentRoot /var/www/vpn.example.com
</VirtualHost>

Сохранить.

$ sudo mkdir /var/www/vpn.example.com
$ sudo chown www-data:www-data /var/www/vpn.example.com -R
$ sudo a2ensite vpn.example.com
$ sudo systemctl reload apache2
$ sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com
$ sudo nano /etc/ocserv/ocserv.conf

Изменить:
auth = "plain[passwd=/etc/ocserv/ocpasswd]"
server-cert = /etc/letsencrypt/live/vpn.example.com/fullchain.pem
server-key = /etc/letsencrypt/live/vpn.example.com/privkey.pem
ca-cert = /etc/letsencrypt/live/vpn.example.com/chain.pem
max-clients = 16
max-same-clients = 0
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1"
try-mtu-discovery = true
default-domain = vpn.example.com
ipv4-network = 10.10.10.0
ipv4-netmask = 255.255.255.0
tunnel-all-dns = true
#dns = 1.1.1.1
#route = default
route = 10.10.10.0/255.255.255.0
no-route = 192.168.0.0/255.255.255.0


Сохранить. 

$ sudo systemctl restart ocserv

$ sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv.service
$ sudo nano /etc/systemd/system/ocserv.service

[Unit]
Description=OpenConnect SSL VPN server
Documentation=man:ocserv(8)
After=network-online.target
#Requires=ocserv.socket #Заккоменитировать!

[Service]
PrivateTmp=true
PIDFile=/var/run/ocserv.pid
ExecStart=/usr/sbin/ocserv --foreground --pid-file /var/run/ocserv.pid --config /etc/ocserv/ocserv.conf
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
#Also=ocserv.socket #Заккоменитировать!

Сохранить.

$ sudo systemctl daemon-reload

$ sudo systemctl stop ocserv.socket
$ sudo systemctl disable ocserv.socket
$ sudo systemctl restart ocserv.service
$ systemctl status ocserv

$ sudo ocpasswd -c /etc/ocserv/ocpasswd username


Можно проверерять вход с клиента

На клиенте:

$ sudo apt install openconnect
$ sudo apt install net-tools

$ route
Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags Metric Ref Use Iface
default         _gateway        0.0.0.0         UG    100    0        0 enp0s3
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 enp0s3
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3

$ sudo openconnect -b vpn.example.com:443


$ route
Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags Metric Ref Use Iface
default         0.0.0.0         0.0.0.0         U     0      0        0 tun0
default         _gateway        0.0.0.0         UG    100    0        0 enp0s3
10.10.10.0      0.0.0.0         255.255.255.0   U     0      0        0 tun0
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 enp0s3
XXX.XXX.XXX.XXX  _gateway        255.255.255.255 UGH   0      0        0 enp0s3
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3

user@ud1804:~$ wget -O - -q icanhazip.com
XXX.XXX.XXX.XXX

Для адекватной проверки скорости соединения, нужно создать nat до перезагрузки
Узнаем имя сетевого адаптера :
$ ip a
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group

В данном случае  ens18:

$ sudo iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE

$ sudo iptables -t nat -L POSTROUTING

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere

$ sudo nano /etc/ocserv/ocserv.conf

Изменить:
dns = 10.10.10.1
route = default
#route = 10.10.10.0/255.255.255.0


Сохранить.

$ sudo systemctl restart ocserv

Адекватное измерение www.speedtest.net



После измерения

$ sudo nano /etc/ocserv/ocserv.conf

Изменить:
#dns = 10.10.10.1
#route = default
route = 10.10.10.0/255.255.255.0

Сохранить.

$ sudo reboot

Для подключения без пароля, настроим аутенфикацию по сертификату в соответствии с
How to Set up Certificate Authentication in OpenConnect VPN Server (ocserv)
и переводом:
Настройка аутентификации по сертификату в OpenConnect VPN Server (ocserv)

$ sudo apt install gnutls-bin
$ sudo mkdir /etc/ocserv/ssl/
$ cd /etc/ocserv/ssl/
$ sudo certtool --generate-privkey --outfile ca-privkey.pem
$ sudo nano ca-cert.cfg

Скопировать ниже:

# X.509 Certificate options

# The organization of the subject.
organization = "Example Org"

# The common name of the certificate owner.
cn = "Example CA"

# The serial number of the certificate.
serial = 001

# In how many days, counting from today, this certificate will expire. Use -1 if there is no expiration date.
expiration_days = -1

# Whether this is a CA certificate or not
ca

# Whether this certificate will be used to sign data
signing_key

# Whether this key will be used to sign other certificates.
cert_signing_key

# Whether this key will be used to sign CRLs.
crl_signing_key

Сохранить.

$ sudo certtool --generate-self-signed --load-privkey ca-privkey.pem --template ca-cert.cfg --outfile ca-cert.pem

$ sudo certtool --generate-privkey --outfile client-privkey.pem

$ sudo nano client-cert.cfg

Скопировать ниже, uid = "username", пользователя созданного выше: 

# X.509 Certificate options
# The organization of the subject.
organization = "My Org"

# The common name of the certificate owner.
cn = "John Doe"

# A user id of the certificate owner.
uid = "username"

# In how many days, counting from today, this certificate will expire. Use -1 if there is no expiration date.
expiration_days = 3650

# Whether this certificate will be used for a TLS server
tls_www_client

# Whether this certificate will be used to sign data
signing_key

# Whether this certificate will be used to encrypt data (needed
# in TLS RSA ciphersuites). Note that it is preferred to use different
# keys for encryption and signing.
encryption_key

Сохранить.

$ sudo certtool --generate-certificate --load-privkey client-privkey.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-privkey.pem --template client-cert.cfg --outfile client-cert.pem

$ sudo certtool --to-p12 --load-privkey client-privkey.pem --load-certificate client-cert.pem --pkcs-cipher aes-256 --outfile client.p12 --outder

Generating a PKCS #12 structure...
Loading private key list...
Loaded 1 private keys.
Enter a name for the key: user
Enter password:
Confirm password:


===========================================
Note that the Ciso AnyConnect app on iOS doesn’t support AES-256 cipher, so if the user is using iOS device, then you can use the 3des-pkcs12cipher.


$ sudo certtool --to-p12 --load-privkey client-privkey.pem --load-certificate client-cert.pem --pkcs-cipher 3des-pkcs12 --outfile client.p12 --outder
===========================================

$ sudo nano /etc/ocserv/ocserv.conf

Отредактируем:

auth = "certificate"
ca-cert = /etc/ocserv/ssl/ca-cert.pem


Сохранить.

$ sudo systemctl restart ocserv

Теперь скачиваем на компьютер клиента
/etc/ocserv/ssl/client.p12

И можем подключаться без пароля (один раз нужно ввести пинкод)



$ sudo apt install fail2ban

$ sudo crontab -e

Добавить.

0 3 * * * /usr/bin/certbot renew & > /dev/null

Сохранить.



среда, 8 мая 2019 г.

Совместная работа OpenConnect и OpenVPN в среде Windows

Для совместной работы  OpenConnect и OpenVPN нужно учитывать следующие особенности:

>openvpn --show-adapters
Available TAP-WIN32 adapters [name, GUID]:
'Ethernet 2' {500EBB39-0CC1-4CBB-A1AA-7DECD679C5D5}
'Ethernet 3' {879AEEC2-87B6-4F0B-BFC6-78046DC6A513}
'Ethernet 4' {D64B1550-D033-4810-8F13-03B18992A20C}
'Ethernet 5' {CA18A6B2-4FAF-4247-9A12-17080869463C}
'Ethernet 6' {361E1C54-5E8F-4450-AD13-6FCAF8E9100A}
'Ethernet 7' {D0C959D0-694C-4984-96A9-A6A8869052A8}

Для совместной работы OpenVPN c OpenConnect через gui совет наделать много tap, (по числу соединений), для OpenVPN с конца, указывая в конфигах:

вместо
;dev-node MyTap
конретную сеть, например:
dev-node 'Ethernet 7'

Для OpenConnect tap от 'Ethernet 2' и далее.



В момент установки OpenConnect клиент привязывается к конкретному  tap
это видно в логфайле (в данном случае неудачно):

2019-05-08 16:50:31 | 192c | Failed to open \\.\Global\{87A61E79-B01E-47EA-8A3B-900EEAE0C706}.tap
2019-05-08 16:50:31 | 192c | Error setting up the TUN device



>openvpn --show-adapters
Available TAP-WIN32 adapters [name, GUID]:
'Ethernet 3' {87A61E79-B01E-47EA-8A3B-900EEAE0C706}
'Ethernet 4' {59C051EB-E5DF-4F3D-BBD0-1F37A9B49743}
'Ethernet 2' {86C5EC45-3029-4A92-9AFC-1B60BCF2091F}
'Ethernet 5' {3275574F-2039-45AB-AB52-3E656DA5A425}


Мы видим это  'Ethernet 3' {87A61E79-B01E-47EA-8A3B-900EEAE0C706}

Для нормальной работы мы должны освободить
'Ethernet 3' {87A61E79-B01E-47EA-8A3B-900EEAE0C706}
 от других соединений OpenVPN
 
Manual configuration of the TAP-Windows adapter 

Необходимо создать столько адаптеров TAP, сколько возможно разных соединений OpenVPN и OpenConnect (одновременных или нет)

Помним, что подсети должны быть разные, например:

10.8.0.X, 10.8.1.X и т.п. !!!


Добавляем адаптеры:

1. Посмотрим адаптеры TAP:
  openvpn --show-adapters

'Ethernet 3' {87A61E79-B01E-47EA-8A3B-900EEAE0C706}
'Ethernet 2' {86C5EC45-3029-4A92-9AFC-1B60BCF2091F}

2. Добавим столько сколько нужно адаптеров TAP (от администратора):
"C:\Program Files\TAP-Windows\bin\addtap.bat"
"C:\Program Files\TAP-Windows\bin\addtap.bat"

Добавим столько сколько нужно:

>openvpn --show-adapters
Available TAP-WIN32 adapters [name, GUID]:
'Ethernet 3' {87A61E79-B01E-47EA-8A3B-900EEAE0C706}
'Ethernet 4' {59C051EB-E5DF-4F3D-BBD0-1F37A9B49743}
'Ethernet 2' {86C5EC45-3029-4A92-9AFC-1B60BCF2091F}
'Ethernet 5' {3275574F-2039-45AB-AB52-3E656DA5A425}


Для того что бы не было конфликта, в конфигурационных файлах соединений клиента следует выполнить привязку к конкретному имени адаптера (TAP-Win32 adapter name)

'Ethernet 3', пропускаем для OpenConnect

Пример изменений в конфигурационном файле клиента:


c:\Program Files\OpenVPN\config\client.ovpn


# Windows needs the TAP-Win32 adapter name
# from the Network Connections panel
# if you have more than one.  On XP SP2,
# you may need to disable the firewall
# for the TAP adapter.
;dev-node MyTap
dev-node 'Ethernet 2'

Сохранить.

После запуска этого соединения в логе будет сообщение:


Wed May 08 16:30:19 2019 NETSH: C:\WINDOWS\system32\netsh.exe interface ip set address Ethernet 2 dhcp


Каждое соединение OpenVPN привязываем к своему адаптеру,
'Ethernet 3', пропускаем для OpenConnect


Под  windows OpenConnect лучше запускать бантником в планировщике, так как
gui не обеспечивает reconnect после перезагрузки сервера OpenConnect :

start.bat

:again
"c:\Program Files (x86)\OpenConnect-GUI\openconnect.exe" vpn.com -c client.p12 --key-password=password --reconnect-timeout 2
goto again