Развертывание сервера VPN на базе MS SSTP
This commit is contained in:
parent
0887a1a169
commit
adea02c42f
@ -4,6 +4,7 @@
|
|||||||
* [Расположение образов Docker](docker-adjasting.md)
|
* [Расположение образов Docker](docker-adjasting.md)
|
||||||
* [Контейнер MariaDB/MySQL](docker-mariadb.md)
|
* [Контейнер MariaDB/MySQL](docker-mariadb.md)
|
||||||
* [Контейнер MySQL под Windows 10](docker-mysql-in-windows10.md)
|
* [Контейнер MySQL под Windows 10](docker-mysql-in-windows10.md)
|
||||||
|
* [Развертывание VPN-сервера на базе MS SSTP](docker-sstp-vpn.md)
|
||||||
* [Развертывание прокси базе Shadowsocks (сервер и клиент)](docker-shadowsocks.md)
|
* [Развертывание прокси базе Shadowsocks (сервер и клиент)](docker-shadowsocks.md)
|
||||||
|
|
||||||
## Python
|
## Python
|
||||||
|
128
docker-sstp-vpn.md
Normal file
128
docker-sstp-vpn.md
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
# Развертывание сервера VPN на базе MS SSTP в контейнере Docker
|
||||||
|
|
||||||
|
SSTP (Secure Socket Tunneling Protocol) - это VPN-туннель, обеспечивающий механизм передачи трафика PPP через SSL/TLS.
|
||||||
|
Это довольно простой VPN (а значит прост в обнаружении), но его преимуществом является то, что он разработан Microsoft,
|
||||||
|
и его клиент встроен в Windows поддерживается прямо из коробки в AltLinux. SSTP использует TCP-порт 443 (можно
|
||||||
|
переназначить если на сервере уже работают сайты, использующие SSL по порту 443) и обеспечивает безопасность на
|
||||||
|
транспортном уровне с согласованием ключей, шифрованием и проверкой целостности трафика.
|
||||||
|
|
||||||
|
## Выпуск ключей (сертификата)
|
||||||
|
|
||||||
|
Для начала нужно выдать сертификат, который будет использован для шифрования соединения. Нам также понадобится
|
||||||
|
**домен**, через который мы будем подключаться к серверу. Домен должен быть обязательно направлен на ip адрес сервера
|
||||||
|
в DNS,
|
||||||
|
|
||||||
|
Создадим на сервере пару ключей `server_key.pem` и `server_cert.pem` (необходимо заменить слово **[MYDOMAIN]** в команде
|
||||||
|
на наш домен, а **[EMAIL]** на наш, или вообще произвольный, email):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
openssl req -x509 -nodes \
|
||||||
|
-newkey rsa:4096 \
|
||||||
|
-keyout server_key.pem \
|
||||||
|
-out server_cert.pem \
|
||||||
|
-days 1825 \
|
||||||
|
-subj "/C=XX/ST=XX/L=XX/O=XX/OU=XX/CN=[MYDOMAIN]/emailAddress=[EMAIL]"
|
||||||
|
```
|
||||||
|
|
||||||
|
В текущем каталоге появятся два файла: `server_key.pem` и `server_cert.pem`. Первый из них -- это закрытый ключ,
|
||||||
|
второй -- сертификат, который мы будем использовать для шифрования трафика.
|
||||||
|
|
||||||
|
## Запуск сервера
|
||||||
|
|
||||||
|
Загружаем образ softethervpn с DockerHub:
|
||||||
|
```bash
|
||||||
|
docker pull fernandezcuesta/softethervpn
|
||||||
|
```
|
||||||
|
|
||||||
|
Это контейнер сделанный из [официального мастер-репозитория SoftEtherVPN](https://github.com/SoftEtherVPN/SoftEtherVPN)
|
||||||
|
-- универсального VPN поддерживающего помимо `MS-SSTP` протоколы `SSL-VPN (HTTPS)`, `WireGuard`, `OpenVPN`,
|
||||||
|
`IPsec`, `L2TP`, `L2TPv3` и `EtherIP`.
|
||||||
|
|
||||||
|
Запускаем контейнер сконфигурировав его под **SSTP** и передавая ранее созданные сертификаты.:
|
||||||
|
```bash
|
||||||
|
sudo docker run \
|
||||||
|
--cap-add NET_ADMIN
|
||||||
|
-p 22:443/tcp
|
||||||
|
-e SSTP_ENABLED=1
|
||||||
|
-e USERNAME=[USER]
|
||||||
|
-e PASSWORD=[USER_PASS]
|
||||||
|
-e SERVER_PWD=[SERVER_PASS]
|
||||||
|
-e CERT="$(cat server_cert.pem)"
|
||||||
|
-e KEY="$(cat server_key.pem)"
|
||||||
|
-d --name=sstp-vpn --restart=always fernandezcuesta/softethervpn
|
||||||
|
```
|
||||||
|
|
||||||
|
Обратите внимание, что так как в нашем случае на сервере работают сайты использующие SSL, то порт `443` занят
|
||||||
|
и мы переназначаем его на `22`. Наш VPN-тоннель будет мимикрировать не под SSL а под SSH. И, конечно, SSH не должен
|
||||||
|
использовать 22 порт, а тоже должен быть переназначен (впрочем перевести SSH по порт со значением больше 1024 полезно
|
||||||
|
и с точки зрения безопасности).
|
||||||
|
|
||||||
|
Так же замените:
|
||||||
|
* `[SERVER_PASS]` -- пароль сервера, должен быть минимум 12 символов, включающий цифры, большие и маленькие буквы.
|
||||||
|
* `[USER]` -- имя пользователя, которое будет использоваться для подключения к VPN-серверу.
|
||||||
|
* `[USER_PASS]` -- пароль пользователя, должен быть минимум 12 символов, включающий цифры, большие и маленькие буквы.
|
||||||
|
|
||||||
|
Проверим, что наш контейнер запущен и работает:
|
||||||
|
```bash
|
||||||
|
docker ps
|
||||||
|
```
|
||||||
|
|
||||||
|
Вывод должен быть примерно таким:
|
||||||
|
```bash
|
||||||
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
|
...
|
||||||
|
...
|
||||||
|
d00d6f42694e fernandezcuesta/softethervpn "/entrypoint.sh /usr…" 8 hours ago Up 8 hours 500/udp, 1194/udp, 4500/udp, 1701/tcp, 0.0.0.0:22->443/tcp, :::22->443/tcp sstp-server
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
Для docker-compose это будет примерно вот такой `docker-compose.yml`:
|
||||||
|
```yaml
|
||||||
|
ersion: "3.7"
|
||||||
|
services:
|
||||||
|
sstp-vpn:
|
||||||
|
image: fernandezcuesta/softethervpn
|
||||||
|
container_name: 'sstp-server'
|
||||||
|
restart: 'always'
|
||||||
|
ports:
|
||||||
|
- 22:443/tcp
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
environment:
|
||||||
|
- SSTP_ENABLED=1
|
||||||
|
- USERNAME=[USER]
|
||||||
|
- PASSWORD=[USER_PASS]
|
||||||
|
- SERVER_PWD=[SERVER_PASS]
|
||||||
|
- CERT=-----BEGIN CERTIFICATE-----MIIF2zCCA8OgAwIBAgIU.....ZnOLc-----END CERTIFICATE-----
|
||||||
|
- KEY=-----BEGIN PRIVATE KEY-----MIIJQgIBADANBg...6i4xupFQ==-----END PRIVATE KEY-----
|
||||||
|
```
|
||||||
|
|
||||||
|
Обратите внимание, что придется вставить сертификат и ключ из файла... и вставить в одну строку, иначе docker-compose будет ругаться.
|
||||||
|
|
||||||
|
Запускаем docker-compose:
|
||||||
|
```bash
|
||||||
|
sudo docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Создание дополнительного пользователя (не обязательно)
|
||||||
|
|
||||||
|
Если понадобится создать несколько подключений к серверу, то нужно выполнить следующие две команды для каждого пользователя (подключения):
|
||||||
|
```bash
|
||||||
|
docker exec -it sstp-vpn ./vpncmd [MYDOMAIN] /SERVER /PASSWORD:"$SERVER_PASS" /ADMINHUB:DEFAULT /CSV /CMD UserCreate [USER2] /GROUP:none /REALNAME:none /NOTE:none
|
||||||
|
docker exec -it sstp-vpn ./vpncmd [MYDOMAIN] /SERVER /PASSWORD:"$SERVER_PASS" /ADMINHUB:DEFAULT /CSV /CMD UserPasswordSet [USER2] /PASSWORD:[USER2_PASS]
|
||||||
|
```
|
||||||
|
|
||||||
|
Где:
|
||||||
|
* `[MYDOMAIN]` -- заменить на доменное имя, которе указывали ранее при выдаче сертификата.
|
||||||
|
* `[USER2]` -- имя нового соединения (пользователя)
|
||||||
|
* `[USER2_PASS]` -- пароль нового соединения (пользователя)
|
||||||
|
|
||||||
|
### Дополнительные настройки (не обязательно)
|
||||||
|
|
||||||
|
Рекомендуется увеличить максимальный размер буфера. Эта команда увеличит максимальный размер буфера приема примерно до 2.5МБ:
|
||||||
|
```bash
|
||||||
|
sudo sysctl -w net.core.rmem_max=2500000
|
||||||
|
```
|
||||||
|
|
||||||
|
## Подключение клиента
|
||||||
|
|
Loading…
Reference in New Issue
Block a user