Jump to content

Поднимаем L2TP/IPSec и IKEv2 VPN сервер на VDS/VPS


Recommended Posts

Доброго времени суток. Решил поделится инструкцией как сделать L2TP/IPSec и/или IKEv2 VPN сервер.

Я использовал VPS от ihor (не сочтите за рекламу) самый минимальный (1 ядро, 512RAM, 5Gb диск), система Ubuntu 16.04.7 LTS Server. Ставил через VNC с образа. 

В общем приступим.

Как только загрузилась свежеустановленная Ubuntu делаем под root (sudo -i)

apt-get update
apt-get upgrade

Ждём пока все обновится и затем ставим нужные пакеты

apt-get install xl2tpd strongswan strongswan-pki dnsmasq mc nano

Если l2tp ненадо, можно не ставить xl2tpd и dnsmasq

Когда все поставилось начинаем настраиваться

Открываем

nano /etc/default/ufw

Смотрим чтобы там было

Цитата

DEFAULT_INPUT_POLICY="DROP"

DEFAULT_FORWARD_POLICY="DROP"

Если ACCEPT, то меняем.

Далее делаем

ufw allow openssh
ufw enable

Если что есть VNC=)

IKEv2

mv /etc/ipsec.conf ipsec.conf.orig
touch /etc/ipsec.conf
chmod 644 /etc/ipsec.conf

Делаем сертификат можно не под root

mkdir -p ~/pki/{cacerts,certs,private}
chmod 700 ~/pki
pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
    --type rsa --dn "CN=MY SUPER VPN ROOT CA" --outform pem > ~/pki/cacerts/ca-cert.pem

pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

pki --pub --in ~/pki/private/server-key.pem --type rsa \
    | pki --issue --lifetime 1460 \
        --cacert ~/pki/cacerts/ca-cert.pem \
        --cakey ~/pki/private/ca-key.pem \
        --dn "CN=server_domain" --san server_domain \
        --flag serverAuth --flag ikeIntermediate --outform pem \
    >  ~/pki/certs/server-cert.pem


lifetime 1460 - 4 года. Тут можно по вкусу 365, 730 и т.д.
Если domaina нету то делаем так
Вместо
--dn "CN=server_domain" --san server_domain
Пишем
--dn "CN=IP address" --san @IP_address --san IP_address

Сертификаты и ключи готовы копируем в нужное место под root

cp -r ~/pki/* /etc/ipsec.d/

Также копируем себе на компик ca-cert.pem

Далее открываем конфигурации ipsec тоже под root

nano /etc/ipsec.conf

И пишем там 

Цитата

 

config setup

        charondebug="ike 0, knl 0, cfg 0"

        uniqueids=no

 

conn base

        dpdaction=clear

        dpddelay=30s

        fragmentation = yes

 

conn ikev2

        also=base

        compress=no

        type=tunnel

        keyexchange=ikev2

        forceencaps=yes

        rekey=no

        left=%any

        leftid=@server_domain

        leftid=IP_address

        leftcert=server-cert.pem

        leftsendcert=always

        leftsubnet=0.0.0.0/0

        right=%any

        rightid=%any

        rightauth=eap-mschapv2

        rightsourceip=192.168.65.0/24

        rightdns=8.8.8.8,8.8.4.4

        rightsendcert=never

        eap_identity=%identity

        ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1$

        esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

        auto=add

 

leftid оставляем какой-то один доменное имя или IP

rightsourceip подсеть с которой будут выдаваться IP адреса клиентам

  rightdns=8.8.8.8,8.8.4.4 - Можно любые другие

Сохраняемся и открываем под root ipsec.secrets

nano /etc/ipsec.secrets

Там пишем

Цитата

 

: RSA "server-key.pem"

user1 EAP "password1"

 

Где user1 имя пользователя, а password1 пароль этого пользователя.

Под root настраиваем firewall

ufw allow isakmp
ufw allow ipsec-nat-t

или 

ufw allow 500,4500/udp

Далее в nano открываем before.rules

nano /etc/ufw/before.rules

Находим *nat и пешем

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.65.0/24 -o ens3 -j MASQUERADE
COMMIT

Находим *mangle

-A FORWARD --match policy --pol ipsec --dir in -s 192.168.65.0/24 -o ens3 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360

И наконец *filter

После # End required lines

*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
# End required lines <--- тут

#IKEv2
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 192.168.65.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 192.168.65.0/24 -j ACCEPT
#END IKEv2

Сохраняемся

Теперь открываем в nano sysctl.conf

nano /etc/sysctl.conf

Находим там

"net.ipv4.ip_forward = "

ставим 1

Если в начале стоит #, удаляем

Получается 

Цитата

net.ipv4.ip_forward = 1

Делаем 

sysctl -p

#Рестартим firewall

ufw disable
ufw enable

Рестартим strongswan

systemctl restart strongswan

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

Заходи в наш любимый Keenetic

Интернет-->Другие подключения

В разделе VPN-подключения создаём новое

1476437072_2022-11-2811_31_43.thumb.png.329e610c017f2b521d483ebf8ab609c1.png

Нажимаем кнопку Импорт из файла и выбираем ca-cert.pem который скопировали себе на компик.

Сохраняемся ждем пару секунд, пишем маршруты до адресов/подсетей к которым надо ходить через vpn

Edited by velikijzhuk
Link to comment
Share on other sites

Теперь

L2TP

Если не настраивали IKEv2, то делаем все также как и у IKEv2, до генерации сертификата.

Затем под root (sudo -i)

nano /etc/ipsec.conf

Там пишем если нет

config setup
        charondebug="ike 0, knl 0, cfg 0"
        uniqueids=no

conn base
        dpdaction=clear
        dpddelay=30s
        fragmentation = yes

Если есть, то не пишем.

Потом дописываем

conn l2tp
        also=base
        dpdtimeout=90s
        keyexchange=ikev1
        ike=aes256-sha256-modp4096
        esp=aes256-sha256-modp4096
        type=transport
        leftauth=psk
        rightauth=psk
        leftsubnet=%dynamic[/1701]
        rightsubnet=%dynamic
        mark=%unique
        auto=add

Сохраняем.

Открываем options.xl2tpd

nano /etc/ppp/options.xl2tpd

Пишем

auth
nodefaultroute
mtu 1280
mru 1280
lock
noipx
proxyarp
local
require-mschap-v2
refuse-pap
refuse-chap
refuse-mschap
ms-dns 8.8.8.8
ms-dns 8.8.4.4
logfile /var/log/ppp/xl2tpd.log

Сохраняем

Открываем xl2tpd.conf

nano /etc/xl2tpd/xl2tpd.conf

Пишем

[global]
port = 1701
listen-addr = %ВНЕШНИЙ_IP_СЕРВЕРА%
auth file = /etc/ppp/chap-secrets
access control = no
ipsec saref = no
force userspace = yes
debug network = no
debug packet = no
debug state = no
debug tunnel = no

[lns default]
exclusive = yes
ip range = 192.168.75.100-192.168.75.131
assign ip = yes
hidden bit = no
local ip = 192.168.75.1
length bit = yes
require authentication = yes
unix authentication = no
name = L2TPServer
pppoptfile = /etc/ppp/options.xl2tpd
ppp debug = no

local ip

ip range

По вкусу

name тоже

Открываем chap-secrets

nano /etc/ppp/chap-secrets

Добавляем пользователей

User1		L2TPServer		"SuPeR_Pass1"	*
UserStatic	L2TPServer		"12345678"		192.168.75.2

User1 будет получать ip из пула ip range

UserStatic будет с  IP 192.168.75.2

L2TPServer это name из xl2tpd.conf

В ipsec.secrets добавляем PSK

%any %any : PSK "pq0nCRuh2tF1KwXLrtxlOA=="

Сгенерировать можно так

openssl rand -base64 16

Почти всё

Настроим firewall

ufw allow 500,4500/udp
ufw route allow in on ppp+ from 192.168.75.0/24 out on ens3

ens3 имя сетевухи которая смотрит во внешний мир

Порт 1701 не надо открывать

В before.rules после *nat добовляем

:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.75.0/24 -o ens3 -j MASQUERADE

Включаем net.ipv4.ip_forward = 1 как и у IKEv2

ufw disable
ufw enable 
systemctl restart strongswan xl2tpd 

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

В роутере

62666372_2022-11-2812_45_36.thumb.png.2267c94b04746e84eeadc39ab4f583e6.png

Добавляем маршруты. 

Edited by velikijzhuk
Link to comment
Share on other sites

Ну и на последок DNSMASQ

В /etc/default/dnsmasq добовляем строчку

DNSMASQ_OPTS="-p 0"

Это отключит DNS

nano /etc/dnsmasq.d/dncp-vpn.conf

Пишем

except-interface=lo,ens3
no-dhcp-interface=lo,ens3
listen-address=192.168.75.1

dhcp-authoritative
log-dhcp
log-facility=/var/log/dnsmasq.log

dhcp-range=192.168.75.1,static

dhcp-option=1,255.255.255.0
dhcp-option=6,8.8.8.8,8.8.4.4
dhcp-option=101,"Asia/Sakhalin"
dhcp-option=100,"SBT-11"
dhcp-option=2,0x00009AB0
dhcp-option=121,195.82.146.0/23,192.168.75.1,104.21.83.43/32,192.168.75.1,172.67.212.135/32,192.168.75.1
dhcp-option=249,195.82.146.0/23,192.168.75.1,104.21.83.43/32,192.168.75.1,172.67.212.135/32,192.168.75.1

Сохраняем

listen-address это local ip из /etc/xl2tpd/xl2tpd.conf

lo и ens3 имена интерфейсов которые ifconfig показывает

option249 для виндовых клиентов, вдруг кто с винды L2TP захочет

systemctl restart dnsmasq

Переподключаемся к L2TP смотрим как нам прилетели маршруты до rutracker'а

Edited by velikijzhuk
  • Upvote 1
Link to comment
Share on other sites

  • 7 months later...
  • 3 months later...

нихрена не работает через L2TP протокол!

порт нужно открывать!

ufw allow 1701

 

через ikev2 и то заработало через правку!

config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no
Edited by remontnic
Link to comment
Share on other sites

  • 2 months later...

К сожалению провайдеры в России лекго детектирут любой стандартный трафик VPN протоколов и режут его на корню. Поэтому надо маскировать vpn трафик под обычный https, но такого функционала в keenetic я не нашел.

Link to comment
Share on other sites

3 часа назад, cyberkeenetic сказал:

но такого функционала в keenetic я не нашел.

Ну уж коли вы необоснованно "наехали" на кинетик, поведайте нам какой девайс умеет?!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...