Конфигурация сервера¶
Сервер читает конфигурацию из файла TOML (по умолчанию: server.toml).
Минимальная конфигурация¶
[server]
bind_address = "0.0.0.0:443"
tls_cert_file = "/etc/letsencrypt/live/your-domain.com/fullchain.pem"
tls_key_file = "/etc/letsencrypt/live/your-domain.com/privkey.pem"
identity_key_file = "/etc/rvpn/server_identity.key"
Полный пример¶
[server]
bind_address = "0.0.0.0:443"
tls_cert_file = "/etc/letsencrypt/live/example.com/fullchain.pem"
tls_key_file = "/etc/letsencrypt/live/example.com/privkey.pem"
identity_key_file = "/etc/rvpn/server_identity.key"
websocket_path = "/api/v1/ws"
http_port = 80
[server.network]
nat_enabled = true
dhcp_range = "10.200.0.0/24"
dns_servers = ["1.1.1.1", "8.8.8.8"]
[server.rate_limit]
max_connections_per_ip = 500
max_handshakes_per_minute = 2000
[server.tun]
enabled = true
tun_ip = "10.200.0.1/24"
mtu = 1420
interface_name = "tun0"
Управление ключами¶
Генерация ключей¶
Выполните эти команды однократно при настройке нового сервера:
cd /etc/rvpn
# Генерация долгосрочного ключа идентификации сервера
rvpn-server keygen
# Генерация набора предключей (используется клиентами для аутентификации)
rvpn-server prekey-bundle
В результате создаются:
server_identity.key-- пара ключей Ed25519 сервера. Создайте резервную копию и храните в секрете.prekey-bundle.json-- публичный набор предключей. Распространите среди клиентов.prekey-bundle.private.json-- приватный подписанный материал предключей. Храните в секрете.
Ротация предключей¶
Предключи ротируются автоматически каждые 7 дней (настраивается через prekey_rotation_hours). Клиентам не требуется обновлённый набор предключей при ротации предключей -- только при смене ключа идентификации сервера.
Обновление TLS-сертификата¶
Сертификаты Let's Encrypt истекают каждые 90 дней. Certbot автоматически устанавливает cron-задачу для обновления.
После обновления перезагрузите r-vpn для применения нового сертификата:
sudo systemctl reload rvpn-server
# или, если reload не поддерживается:
sudo systemctl restart rvpn-server
Для автоматизации добавьте хук развёртывания:
# /etc/letsencrypt/renewal-hooks/deploy/rvpn-reload.sh
#!/bin/bash
systemctl reload rvpn-server 2>/dev/null || systemctl restart rvpn-server
Сайт-прикрытие (необязательно)¶
Чтобы сервер выглядел как обычный HTTPS-сайт для случайных зондирований, укажите decoy_root на директорию со статическими HTML-файлами:
Любой запрос, не являющийся корректным WebSocket-апгрейдом r-vpn, получит ответ от сайта-прикрытия.
Запуск без TLS (режим обратного прокси)¶
Если вы используете Caddy, nginx или HAProxy, не указывайте файлы сертификата/ключа и привяжитесь к локальному порту:
[server]
bind_address = "127.0.0.1:8443"
websocket_path = "/api/v1/ws"
# Нет tls_cert_file / tls_key_file -- TLS terminates на прокси
Смотрите Настройка обратного прокси для получения полных конфигураций Caddy, nginx и HAProxy, включая настройку сайта-прикрытия и балансировку нагрузки между несколькими серверами.
Ограничение частоты запросов¶
Сервер ограничивает количество входящих подключений с одного IP-адреса для предотвращения злоупотреблений.
max_connections_per_ip-- Максимальное количество одновременных подключений с одного IP-адреса.max_handshakes_per_minute-- Максимальное количество попыток нового руковопожатия с одного IP в минуту.
Клиентам SOCKS5 требуются более высокие лимиты¶
[!WARNING] В устаревшем (немультиплексированном) режиме SOCKS5 протокол открывает одно WebSocket-подключение на каждый TCP-поток. Страница современного браузера может легко открывать 20-50 одновременных подключений (HTML, CSS, JS, изображения, API-вызовы). Если лимиты слишком низкие, подключения будут молча отбрасываться, а страницы не будут загружаться.
Для серверов, обслуживающих устаревших клиентов SOCKS5, установите
max_connections_per_ipне менее 500 иmax_handshakes_per_minuteне менее 2000. Увеличьте значения в зависимости от ожидаемого количества одновременных подключений на пользователя.[!NOTE] Мультиплексированный режим SOCKS5 (один WebSocket, несколько потоков) используется по умолчанию в современных клиентах. Он полностью устраняет проблемы с лимитами, поскольку все потоки разделяют одно подключение. Установите
multiplex = trueв конфигурации клиента для его использования.
При ограничении частоты запросов сервер записывает в лог Rate limited: <IP> на уровне debug и закрывает подключение без отправки ответа об ошибке.
Все параметры¶
Полный список всех доступных параметров смотрите в Справочнике по конфигурации сервера.