Хотел бы поделиться ПО моей разработки – StormVPN. VPN, который по сути дела ведёт себя как HTTP(s) и может работать через Proxy, например Nginx. Хотел бы сразу предупредить, что ПО является платным, сервер требует ключ, но без ключа единственное ограничение – количество сессий, которые сервер может обработать одновременно – 1.
Основные фичи ПО:
- работа за прокси, вместе с сайтом (на одном порту);
- поддержка нескольких режимов работы: Bridge, IP/Static, IP/Dynamic;
- в режиме Bridge есть поддержка Trunk, фильтрации и перетегирования VLAN;
- в режиме IP/Static простое соединение с IPv4, в режиме IP/Dynamic встроенная динамическая маршрутизацию (а-ля BGP, OSPF), когда вам надо быстро и нет желания настраивать дополнительный софт;
- промер скорости канала и отображение в утилите для каждого бездействующего пира (то есть, не передающего никакие данные);
- поддержка Windows/Android клиента в режиме IP/Static.
Пример настройки Nginx для работы с StormVPN:
server {
listen 0.0.0.0:80;
server_name storm-vpn.your-domain.com;
rewrite ^(.*) https://storm-vpn.your-domain.com$1 permanent;
return 301 https://storm-vpn.your-domain.com$request_uri;
access_log /dev/null;
error_log /dev/null crit;
}
server {
listen 0.0.0.0:443 ssl;
server_name storm-vpn.your-domain.com;
# ssl on;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
location /storm-vpn-endpoint {
proxy_pass http://<storm-vpn-ip>;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
}
access_log /dev/null;
error_log /dev/null crit;
}
Начиная с версии 0.0.8 работаем только через Docker, что бы избежать проблем с дистрибуцией.
Пример запуска сервера:
# docker run --cap-add=NET_ADMIN --device /dev/net/tun:/dev/net/tun --net=host --name stormvpn-server -d stormotron/stormvpn-server:latest
Переменные среды сервера:
- LISTEN_IP - IP, default 0.0.0.0
- HTTP_PORT - Port, default 80
- HTTPS_PORT - Port, default 443
- URL - String, default storm-vpn-endpoint
- STANDALONE - Boolean, default true
- CLIENT_TIMEOUT - Int, Timeout, default 30
- SERIAL - String, Serial, default demo
- SERVER_CRT - String, Server certificate, default selfsigned
- SERVER_KEY - String, Server certificate key, default selfsigned
- CLIENT<NUM> - String, clients description, no defaults - MUST be defined
Client examples:
CLIENT1='peer=peer01,secret=peer01secret'
CLIENT2='peer=peer02,secret=peer02secret,interface=peer02,mac=00:11:22:33:44:55'
CLIENT4='peer=localpeer,secret=localpeersecret,link_quality=5M'
CLIENT5='peer=brpeer,secret=brpeersecret,link_quality=auto,link_type=bridge:mybridge:clbridge'
CLIENT6='peer=brpeer2,secret=brpeersecret2,link_type=bridge:mybridge:clbridge,bridge_vlan=10:16'
CLIENT7='peer=ippeer,secret=ippeersecret,link_type=ip:30:192.168.0.1:192.168.0.2:dynamic:50'
Как посмотреть статистику:
# docker exec -it stormvpn-server stormvpn-stats
Пример подключения клиента:
# docker run --cap-add=NET_ADMIN --device /dev/net/tun:/dev/net/tun --net=host --name stormvpn-client -d stormotron/stormvpn-client:latest
Переменные среды клиента:
- URL - String, default https://vpn.your.domain/storm-vpn-endpoint
- PEER - String, default test
- SECRET - String, default test
- INTERFACE - String, default vpn_<RANDOM NUMBER>
- INSECURE - Boolean, default false
Проект только начал развиваться, был выполнен для личного пользования, но зарекомендовал себя как стабильный, поэтому был спущен на коммерческие рельсы. Если будет какой-то интерес – продолжу развитие.
Более подробно можно почитать тут: GitHub - stormotron/stormvpn: StormVPN is an implementation of Ethernet tunneling protocol over HTTP/HTTPS to provide full Ethernet connectivity.