跳转到内容

作为服务运行

将 rVPN 服务器配置为开机自动启动并在故障时自动重启。


创建服务文件:

Terminal window
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

启用并启动:

Terminal window
sudo systemctl daemon-reload
sudo systemctl enable rvpn-server
sudo systemctl start rvpn-server

查看状态:

Terminal window
sudo systemctl status rvpn-server

查看日志:

Terminal window
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——进程必须重启才能加载新的配置或证书。请在其他场景下使用 reload 的地方改用 restart


如果你使用内置的 [server.acme] 块(Server Quick Start 第 3 步),这里无需任何配置 — 续订由 rvpn-server 进程内的后台任务驱动,使用同一个 :443 监听器完成挑战,并把新证书热切换到内存解析器中,不会中断连接。跳过本节。

如果你改为让 tls_cert_file / tls_key_file 指向 certbot 签发的证书(BYO 证书模式),请添加部署钩子,在证书续期时重启 rVPN — 服务器无法在不重启的情况下加载新证书:

Terminal window
sudo nano /etc/letsencrypt/renewal-hooks/deploy/rvpn-reload.sh
#!/bin/bash
systemctl restart rvpn-server
Terminal window
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/rvpn-reload.sh

测试续期流程:

Terminal window
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"
Terminal window
chmod +x /usr/local/etc/rc.d/rvpn_server
echo 'rvpn_server_enable="YES"' >> /etc/rc.conf
service rvpn_server start

如果以 TUN 模式(全隧道 VPN)运行,服务器必须在启动服务前先配置为 NAT 网关。

Terminal window
# 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

让这些规则在重启后保持:

Terminal window
# Debian/Ubuntu
sudo apt install iptables-persistent
sudo netfilter-persistent save
# RHEL/CentOS
sudo service iptables save

添加到 /etc/rc.conf

Terminal window
gateway_enable="YES"
firewall_enable="YES"
firewall_type="OPEN"
natd_enable="YES"
natd_interface="vtnet0" # your public interface

macOS 不支持服务器端的 TUN NAT。TUN 模式的服务器请使用 SOCKS5 模式或 Linux 虚拟机。


方面TUN 模式SOCKS5 模式
是否需要 NAT需要(服务器端)不需要(客户端中继)
流量路由所有应用,全隧道按应用
服务器设置IP 转发 + NAT 规则标准 VPN 服务器

参见 TUN 模式 了解完整的 TUN 模式配置文档。