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/ !!!
(Если есть уже подготовленные кладем в root ca-key.pem ca-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 .
$ 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
$ 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.
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
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.
Комментариев нет:
Отправить комментарий