Перейти к содержимому

Запуск как сервис

Настройте сервер rVPN на автоматический запуск при загрузке и перезапуск при сбое.


Создайте файл сервиса:

Окно терминала
sudo nano /etc/systemd/system/rvpn-server.service
[Unit]
Description=rVPN Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/rvpn-server -c /etc/rvpn/server.toml
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
# Redirect logs to journal
StandardOutput=journal
StandardError=journal
SyslogIdentifier=rvpn-server
[Install]
WantedBy=multi-user.target

Включите и запустите:

Окно терминала
sudo systemctl daemon-reload
sudo systemctl enable rvpn-server
sudo systemctl start rvpn-server

Проверьте статус:

Окно терминала
sudo systemctl status rvpn-server

Посмотрите логи:

Окно терминала
sudo journalctl -u rvpn-server -f

ДействиеКоманда
Запуститьsudo systemctl start rvpn-server
Остановитьsudo systemctl stop rvpn-server
Перезапуститьsudo systemctl restart rvpn-server
Посмотреть логиsudo journalctl -u rvpn-server -f
Отключить автозапускsudo systemctl disable rvpn-server

Сервер не поддерживает systemctl reload — процесс должен перезапуститься, чтобы подхватить изменения конфига или сертификата. Используйте restart там, где в других случаях вы бы использовали reload.


Автоматическое обновление TLS-сертификата

Заголовок раздела «Автоматическое обновление TLS-сертификата»

Если вы используете встроенный блок [server.acme] (Server Quick Start шаг 3), настраивать здесь нечего — продлением занимается фоновая задача внутри rvpn-server, challenge использует тот же слушатель :443, а свежий сертификат горячо подменяется в резолвере без обрыва соединений. Пропустите этот раздел.

Если вместо этого вы указываете tls_cert_file / tls_key_file на сертификат от certbot (BYO-cert-режим), добавьте deploy-hook для перезапуска rVPN при обновлении сертификата — сервер не умеет reload’ить новый сертификат без рестарта:

Окно терминала
sudo nano /etc/letsencrypt/renewal-hooks/deploy/rvpn-reload.sh
#!/bin/bash
systemctl restart rvpn-server
Окно терминала
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/rvpn-reload.sh

Проверьте процесс обновления:

Окно терминала
sudo certbot renew --dry-run

Создайте /usr/local/etc/rc.d/rvpn_server:

#!/bin/sh
# PROVIDE: rvpn_server
# REQUIRE: NETWORKING
# KEYWORD: shutdown
. /etc/rc.subr
name="rvpn_server"
rcvar="rvpn_server_enable"
command="/usr/local/bin/rvpn-server"
command_args="-c /usr/local/etc/rvpn/server.toml"
pidfile="/var/run/rvpn-server.pid"
load_rc_config $name
run_rc_command "$1"
Окно терминала
chmod +x /usr/local/etc/rc.d/rvpn_server
echo 'rvpn_server_enable="YES"' >> /etc/rc.conf
service rvpn_server start

Предварительные требования NAT для TUN-режима

Заголовок раздела «Предварительные требования NAT для TUN-режима»

Если сервер работает в TUN-режиме (полнотуннельный VPN), его нужно настроить как NAT-шлюз до запуска сервиса.

Окно терминала
# Enable IP forwarding
sudo sysctl -w net.ipv4.ip_forward=1
# Configure NAT (replace eth0 with your public interface; -s should match [server.network].dhcp_range)
sudo iptables -t nat -A POSTROUTING -s 10.200.0.0/24 -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT

Сохраните их между перезагрузками:

Окно терминала
# Debian/Ubuntu
sudo apt install iptables-persistent
sudo netfilter-persistent save
# RHEL/CentOS
sudo service iptables save

Добавьте в /etc/rc.conf:

Окно терминала
gateway_enable="YES"
firewall_enable="YES"
firewall_type="OPEN"
natd_enable="YES"
natd_interface="vtnet0" # your public interface

macOS не поддерживает TUN NAT на стороне сервера. Используйте SOCKS5-режим или Linux-виртуалку для серверов TUN-режима.


АспектTUN-режимSOCKS5-режим
NAT требуетсяДа (на сервере)Нет (relay на стороне клиента)
Маршрутизация трафикаВсе приложения, полный туннельПо приложениям
Настройка сервераIP-форвардинг + NAT-правилаСтандартный VPN-сервер

См. TUN-режим для полной документации по настройке TUN-режима.