- GUI управление VPN возможно network manager (по умолчанию L2TP, PPTP, OpenVPN, IPSec, с возможность добавления Wireguard)
- Все статьи про VPN
- Базовая теория
- DMVPN
- L2VPN
- Remote Access VPN
- IPsec VPN и множественные его реализации, site-to-site VPN
- Пример практической настройки VPN (IPSec и не только)
Зачем одному пользователю
- Сбор информации за вами
- Telegram
реализации
Их очень много, выбираем что нравится:
- xSwan (StrongSwan, LibreSwan) и реализации на основе них (напр. ipsec-vpn-server ниже)
- SoftEther
- WireGuard – подробнее в отдельной статье, включая настройку Wireguard в Linux
- ExpressVPN
- Racoon
- Accel-ppp (bras средне-провайдерского/энтерпрайз уровня)
- RouterOS, pfSense
- Juniper vSRX, PaloAlto, Fortigate, Checkpoint, Cisco, Sophos XG Firewall, etc. Лицензия только нужна (иногда есть и бесплатная, например для Sophos XG Home). Из плюса большого это возможность из коробки и SSL tunnel и все что угодно еще поднять.
StrongSwan
Очень сильная документация, сильно прокачан по функционалу, комьюнити большое и много статей. Единственный недостаток – мало контрибьютеров в код.
LibreSwan (ранее OpenSwan)
Слабее доки/функционал/количество статей в сравнении с StrongSwan, но контрибьютеров больше.
SOFTETHER
Самый лучший комментарий, который нашел на этот софт “ЗВЕЗДОЛЕТ ГОВНА”. Куча говнокода. Безусловно есть и плюсы – напр. поддерживает все ОС и все возможные реализации туннелей (включая L2).
https://www.softether.org/4-docs/9-research/Design_and_Implementation_of_SoftEther_VPN https://www.softether-download.com/en.aspx?product=softether https://www.softether.org/4-docs/1-manual/7._Installing_SoftEther_VPN_Server/7.3_Install_on_Linux_and_Initial_Configurations https://www.softether.org/3-spec
Racoon (ipsec-tools)
Дырявый с точки зрения безопасности. Да и крайне ненадежен. Зато про него даже на харбре есть.
racoon is an alternative keying daemon, but it only implements the IKEv1 protocol and it's not actively developed anymore (unless you consider its forks in e.g. iOS/OS X and Android).
ipsec-vpn-server
Есть ipsec/l2tp vpn server как docker image, очень удобен по настройке и использованию, работает с клиентами iOS/MAC OS (проверял и Cisco IPsec и L2TP). “Под капотом” сервер использует Libreswan (IPsec VPN software) и xl2tpd (L2TP daemon). В целом все (деплой, настройка клиентской стороны) подробно описано по ссылке к серверу в header.
# create & start container sudo docker run --name ipsec-vpn-server --env-file ./vpn.env --restart=always -v ikev2-vpn-data:/etc/ipsec.d -v /lib/modules:/lib/modules:ro -p 500:500/udp -p 4500:4500/udp -d --privileged hwdsl2/ipsec-vpn-server # users in container (врятли пригодится) cat /etc/ipsec.d/passwd # включение логов с username (по умолчанию отключены) https://github.com/hwdsl2/docker-ipsec-vpn-server/blob/master/docs/advanced-usage.md#enable-libreswan-logs
Из особенностей:
- пример ручной настройки того же (ipsec + l2tp)
- если хочется из под одной учетной записи заходить с разных устройств, то это возможно, но оба устройства должны использовать один тип VPN
- при настройке L2TP не забываем включать опцию по передаче всего трафика в туннель, по умолчанию во многих клиентах она отключена
- нужно пробрасывать UDP порты 500/4500 для работы (IPSec NAT-T)
The ports that are exposed for this container to work are: 4500/udp and 500/udp for IPsec a0e3be0f032a hwdsl2/ipsec-vpn-server "/opt/src/run.sh" 8 months ago Up 56 seconds 0.0.0.0:500->500/udp, 0.0.0.0:4500->4500/udp ipsec-vpn-server
- статус сервера и подключенные клиенты (для быстрого доступа к командам)
sudo docker exec -it ipsec-vpn-server ipsec status sudo docker exec -it ipsec-vpn-server ipsec whack --trafficstatus sudo docker logs ipsec-vpn-server # внутри контейнера sudo docker exec -it ipsec-vpn-server bash /etc/xl2tpd/xl2tpd.conf cat /etc/ppp/options.xl2tpd cat /etc/ipsec.d/passwd
-bash-4.2$ sudo docker exec -it ipsec-vpn-server ipsec whack --trafficstatus 006 #70: "l2tp-psk"[35] <in_ip>, type=ESP, add_time=1590312870, inBytes=65469, outBytes=312426, id='192.168.100.40' 006 #72: "l2tp-psk"[36] <in_ip>, type=ESP, add_time=1590312885, inBytes=8754, outBytes=7686, id='192.168.100.43' 006 #142: "xauth-psk"[16] <in_ip>, username=<username>, type=ESP, add_time=0, inBytes=225856, outBytes=316252, lease=192.168.43.10/32
Используя L2TP сервер (напр. docker ipsec-vpn-server) можно настроить устройства на iOS с опцией автоподключения к сети при разрыве с любых сетей, используя функционал “VPN On Demand”. Подробнее тут.
GRE
GRE поднимается в aws. Подробный пример настройки
1) Включить роутинг на Linux, применять не надо.
root@debian:~# cat /proc/sys/net/ipv4/ip_forward 1
2) Настроить gre tunnel на разных сторонах
Server1 ip tunnel add gre666 mode gre remote 172.16.0.2 local 172.16.0.1 ttl 255 ip link set gre666 up ip addr add 1.1.1.1/24 dev gre666 ip route add 10.1.0.0/24 via 1.1.1.1 ip addr add 10.0.0.1/32 dev lo ip link set gre666 mtu 1400 # при необходимости Server2 ip tunnel add gre666 mode gre remote 172.16.0.1 local 172.16.0.2 ttl 255 ip link set gre666 up ip addr add 1.1.1.2/24 dev gre666 ip route add 10.100.0.1/24 via 1.1.1.2 ip addr add 10.1.0.1/32 dev lo ip link set gre666 mtu 1400 # при необходимости
3) Проверяем настройку
root@debian:~# ip tunnel gre0: gre/ip remote any local any ttl inherit nopmtudisc gre666: gre/ip remote 172.16.0.2 local 172.16.0.1 ttl 255
root@debian:~# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 10.0.0.1/32 scope global lo valid_lft forever preferred_lft foreve 10: gre666@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN group default qlen 1 link/gre 172.16.0.1 peer 172.16.0.2 inet 1.1.1.1/24 scope global gre666 valid_lft forever preferred_lft forever inet6 fe80::5efe:ac10:1/64 scope link valid_lft forever preferred_lft forever root@debian:~# ping 10.1.0.1 -M do -s 1500 PING 10.1.0.1 (10.1.0.1) 1500(1528) bytes of data. ping: local error: Message too long, mtu=1400 ping: local error: Message too long, mtu=1400 ping: local error: Message too long, mtu=1400 ping: local error: Message too long, mtu=1400 ping: local error: Message too long, mtu=1400
4) Удаление интерфейса
ip link set gre0 down ip tunnel del gre0
stunnel
Иногда используется для шифрования между девайсами с разными ОС (Windows, Linux, Android). Само шифрование осуществляется на базе SSL/TLS.