SoftEther 搭配 VPS 搭建 VLAN 联机环境

使用 SoftEther VPN Server、Virtual Hub、SecureNAT 或本地网桥,在 VPS 上搭建适合局域网联机的虚拟 LAN 环境,并整理服务端、客户端、防火墙和常见回滚步骤。

本文原始内容较长,迁移时保留原有截图,并对标题、结构和部分说明做了整理。SoftEther 版本、Linux 发行版和云厂商控制台可能随时间变化,实际操作时请以当前界面和官方下载页为准。

建议使用 VM 部署,原文在 Debian 12 和 Ubuntu 22.04 上测试通过。 原文提到 CT 容器场景可能出现客户端熄屏后图标仍在但无法继续连接的问题,因此这里仍按 VM 方案整理。

提醒:阅读本文并按照步骤操作预计需要30分钟以上,请读者保持绝对的细心和耐心。

1. 背景介绍

动机:codemaster F1系列游戏的联机模式类似P2P,在分布式的节点环境下数据传输和同步异常缓慢,经常出现长时间的加载等候、发车灭灯延迟、圈数和名次计算错乱等影响游戏和比赛体验的状况,因此考虑自己架设私人VPN实现虚拟局域网游戏。

本文所述 VPN 遵循其英文全称 Virtual Private Network 的严格表述,目标是创建远程私人局域网环境以供游戏或自有设备互联使用。请遵守所在地法律法规和云服务商使用条款。

如果按照本文步骤操作,可以搭建一个用于虚拟局域网联机的 SoftEther VPN Server。实际效果会受 VPS 区域、带宽、延迟和客户端网络环境影响。

2. 准备工作

  • 一台可以用作 VPS 的服务器。免费服务器亦可尝试,但不保证效果。

  • 服务器需要有固定公网 IP。

  • 原示例使用 GCP 香港实例、阿里云和腾讯云轻量应用主机搭配 Ubuntu 系统镜像测试通过。如果追求长期稳定,建议选择离玩家更近、延迟更低的区域。

  • 系统镜像可以选择 Ubuntu / Debian,minimal 镜像也可以。

  • 服务器带宽最好大于等于 5 Mbps,否则联机游戏容易出现延迟。

  • CPU 核心数和内存要求不高,根据预算选择即可。

  • 非常重要:确认服务器系统防火墙和云厂商安全组都允许客户端访问 TCP 5555 端口。不知道怎么检查和编辑防火墙规则的,可以先看本文最后一节。

  • 一台 Windows 10 / Windows 11 PC,用于运行 SoftEther Server Manager 和 VPN Client。

  • 可选 SSH 客户端:PuTTY、Xshell,或者 Windows Terminal / PowerShell 自带的 ssh

本文的管理端截图来自 Windows。Mac 和 Linux 用户可直接使用终端里的 ssh 命令连接远程主机。

PuTTY 使用方式可参考云厂商文档,例如 “使用 PuTTY 从 Windows 连接到 Linux 实例”。

对 Linux 基础命令不熟悉的,可以先熟悉 cdlschmodsystemctlvim 等常用命令。

3. 配置服务器

使用 SSH 客户端或者云服务控制台的 WebShell 登录服务器终端。使用下面的命令进入 root 环境:

sudo su

截图

使用 apt-get 命令更新软件源并安装编译工具:

apt-get update
apt-get install build-essential

访问开源软件SoftEther下载页面,按照图示选择后复制箭头所指的下载链接地址

截图

使用 wget url 命令下载server组件,链接可以替换成上面复制的下载链接以下载最新发行版

wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.38-9760-rtm/softether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz

解压缩并构建server组件,注意修改为你自己对应的文件名

tar zxf softether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz
cd vpnserver
make

转到/usr/local/路径并修改对应文件和路径的权限

cd ..
mv vpnserver /usr/local
cd /usr/local/vpnserver/
chmod 600 *
chmod 700 vpncmd
chmod 700 vpnserver

创建启动文件,有两种方式。

一种:使用vim新建vpnserver启动配置文件

vim /etc/init.d/vpnserver

按小写i进入输入模式,粘贴以下脚本

#!/bin/sh
### BEGIN INIT INFO
# Provides:          vpnserver
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable Softether by daemon.
### END INIT INFO
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
touch $LOCK
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

esc 退出编辑模式,输入 :wq 保存文件并退出。使用下列命令修改读写权限并启动服务,若出现提示 mkdir: cannot create directory ‘/var/lock/subsys’: File exists 可以忽略

chmod 755 /etc/init.d/vpnserver
mkdir /var/lock/subsys
update-rc.d vpnserver defaults
/etc/init.d/vpnserver start

二种:手动创建 systemd 服务文件(可选)

步骤:

  1. 创建服务文件:
sudo nano /etc/systemd/system/vpnserver.service
  1. 添加以下内容:
[Unit]
Description=SoftEther VPN Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
ExecReload=/usr/local/vpnserver/vpnserver restart
PIDFile=/var/run/vpnserver.pid
Restart=on-failure
User=root

[Install]
WantedBy=multi-user.target
  1. 保存并退出文件(按 Ctrl+O,回车,按 Ctrl+X)。

  2. 加载新的服务配置:

sudo systemctl daemon-reload
  1. 启用并启动服务:
sudo systemctl enable vpnserver
sudo systemctl start vpnserver
  1. 检查服务状态:
systemctl status vpnserver

• 确保 /usr/local/vpnserver 路径正确,且执行脚本具有可执行权限:

ls -l /usr/local/vpnserver/vpnserver

命令行输出如图表示服务正常启动:

截图

运行检查程序

All pass 输出如图:

截图

使用 ctrl + D 退出vpncmd终端,再运行下面的命令配置admin端口和密码

./vpncmd
1

第一个需要输入的位置输入 127.0.0.1:5555 回车

截图

第二个输入留空,回车,进入命令终端

截图

输入 ServerPasswordSet 回车,设定并确认密码

截图

4. 安装和配置管理终端(Windows 10 / 11 x64)

访问开源软件SoftEther下载页面,按照图示选择后下载安装包(不需要care是intel还是AMD)

截图

一路默认安装。安装完成后启动软件界面如图:

截图

新建设置,自定义设置名,主机名填云服务器公网IP,端口号选项卡选择5555,右下角输入刚才设置的管理密码。其他设置不动,点击确定

截图

然后弹出窗口(后面每步操作都会不停弹出新的窗口),勾选第一个选项远程访问VPN,下一步

截图

确定初始化选“是”

截图

随便起一个virtual HUB的名字,这里我用了 F1LAN ,点确定

截图

弹出窗口中可以自定义一个好记的动态DNS主机名,也可以留着不动。点击“退出”

重新设置的话要手动点一下“设置上述主机名”

后续客户端连接的时候,可以用公网IP或者这里设置的地址作为主机名

截图

弹出窗口中勾选L2TP over IPsec,点击确定

截图

弹出窗口中禁用VPN Azure,点击确定

截图

弹出窗口中点击“创建用户”

截图

设置好这三个地方。这是接下来你以及其他客户端登录的凭据(只配置一个用户就可以供多个client登录)。设置完点击确定,提示用户已创建完成

截图

关闭用户管理窗口。在管理虚拟HUB界面右下角点击虚拟NAT和DHCP

截图

点击启用SecureNAT,弹出窗口选确定(这是比较简单的方法,还有桥接的方法,优点是CPU占用低,带宽稍大,但配置起来多了几个步骤,想要一步到位的同学在看完下面Part5之后可以继续看Part6的介绍)

有些同学ping服务器的时候可能会收到duplicate packet,像我这种强迫症就觉得很不爽,这里可以在“虚拟HUB属性”->“编辑虚拟HUB扩展选项列表"中把“DisableIpRawModeSecureNAT”的值编辑为1。

到这里,服务器端的配置就基本完成了,可以尝试ping一下公网IP地址和SoftEther的DNS主机名查看一下连通性。

截图

5. 客户端设置(Windows 10 / 11 x64)

在你以及其他所有希望加入局域网的设备(人话:用来玩游戏的电脑)上,访问开源软件SoftEther下载页面,按照图示选择后下载安装包(不需要care是intel还是AMD)

截图

一路默认设置安装后启动软件,界面如下

截图

点击添加新的VPN连接会提示需要初始化虚拟适配器,确定并随便起个名字,初始化完成后如图

截图

在添加新的VPN连接配置页面,按照数字顺序填写配置,每一步都非常重要

1、设置名随意,用于区分

2、主机名可以填写服务器外部IP或者softether中自己设置的主机名,我选择了后者

3、端口号在下拉选项中选5555

4、虚拟HUB名填写Part4设置管理端的时候自定义的HUB名

5、用户名填Part4中自己设置的

6、密码同上

7、都设置好后进入“高级设置”子菜单

截图

在高级设置中设置TCP连接数为8,并取消勾选SSL加密以提高传输速度(仅限娱乐游戏场景,如果是比较正规的比赛可以不用取消勾选),点击确定。回到连接设置界面,点击确定。

回到主界面,右键或者双击连接VPN

截图

连接成功,自动分配虚拟局域网IP

截图

如果别人反映连不上,你可以再参考本文最后一部分检查一下你自己服务器的防火墙规则

理论上此时就算离线启动steam也已经可以连接虚拟局域网游戏了。

截图

6. 补充:桥接方案

这一节是可选方案,适合不使用 SecureNAT、希望改成本地网桥 / TAP 转发的场景。它比 SecureNAT 多了 DHCP、转发和 iptables 持久化步骤,排错成本更高。

如果前面设置了SecureNAT,这里需要禁用。

截图

回到管理主界面,选择本地网桥设置

截图

按照下述步骤操作,其中HUB选择前面设置的HUB名字,tap名称可以跟我一样设置为soft方便follow后续步骤

截图

确定后,状态应该如下

截图

在服务器终端输入 ifconfig ,找到第一个设备的 inet addr (一般在输出的第二行)也就是内部IP地址,记录备用

截图

使用命令 apt-get install dnsmasq 安装 DHCP 服务器,以便分配局域网动态 IP。若系统没有 ifconfig,还需要安装 net-tools

apt-get install dnsmasq net-tools

使用命令 vim /etc/dnsmasq.conf 打开DNS配置文件,在最后插入以下三行:

interface=tap_soft
dhcp-range=tap_soft,192.168.7.50,192.168.7.60,12h
dhcp-option=tap_soft,3,192.168.7.1

改桥接方案前,建议先备份旧启动脚本:

cp /etc/init.d/vpnserver /etc/init.d/vpnserver.bak

确认要替换后,再删除旧文件并新建:

rm /etc/init.d/vpnserver
vim /etc/init.d/vpnserver

i 切换输入模式,粘贴如下内容:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          vpnserver
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable Softether by daemon.
### END INIT INFO
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
TAP_ADDR=192.168.7.1

test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
touch $LOCK
sleep 1
/sbin/ifconfig tap_soft $TAP_ADDR
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
sleep 1
/sbin/ifconfig tap_soft $TAP_ADDR
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

另外不要忘记修改权限,否则无法enable service:

chmod 700 /etc/init.d/vpnserver

新建ipv4转发配置 vim /etc/sysctl.d/ipv4_forwarding.conf ,粘贴如下内容

net.ipv4.ip_forward = 1

应用sysctl

sysctl --system

下面一条指令最后 [YOUR VPS IP ADDRESS] 需要替换成上面记录的内部IP

iptables -t nat -A POSTROUTING -s 192.168.7.0/24 -j SNAT --to-source [YOUR VPS IP ADDRESS]

安装ip表持久化工具,系统重启不影响桥接转发

apt-get install iptables-persistent

最后用两条命令重启服务,服务器端就配置完成了

/etc/init.d/vpnserver restart
/etc/init.d/dnsmasq restart

客户端需要修改一下设置,首先右键VPN连接进入属性页面,点击右下方高级设置。按图示确认四个位置的设定:

TCP连接数为8

勾选SSL加密

勾选路由器/网桥模式

勾选半双工模式

截图

到这里就ok了,和之前一样,回到主界面右键连接即可。

如果想改回SecureNAT模式,也并不复杂,只需要逐步回滚:

在服务器上删除 /etc/sysctl.d/ipv4_forwarding.conf

把 /etc/init.d/vpnserver 和 /etc/dnsmasq.conf 两个文件改回之前的样子

用 sudo apt-get remove –purge iptables-persistent 和 sudo apt-get remove –purge dnsmasq 卸载iptable持久化和DHCP工具

用 sysctl –system 命令应用修改后的系统配置文件

用 /etc/init.d/vpnserver restart 命令重启VPN server服务

在Windows管理工具->本地网桥设置中删除名为 soft 的本地网桥

在Windows管理工具->管理虚拟HUB中启用SecureNAT

在Windows登录端client连接属性->高级设置中取消勾选“半双工模式”和“路由器/网桥模式”

7. 关于服务器防火墙过滤规则

大部分云服务提供者(我测试的:GCP、阿里云、腾讯云)从安全角度考虑,为实例配置的默认防火墙规则一般不能允许来自任何外部IP的入站流量,这可能会导致你在本机测试一切正常,但别人怎么都连不上VPS。这里我给大家举例看一下怎么检查和修改防火墙规则,需要让服务器允许所有IP的外部TCP流量(至少是通过5555端口)访问你的服务器。

7.1 Google Cloud Platform (GCP)

在控制台中进入如下图所示的“防火墙”管理界面

截图

选择上方“创建防火墙规则”

截图

按照图中所示编辑规则后点击下方“创建”,流量方向默认选择“入站”,其他选项不动

截图

规则应用后理论上所有人都可以从5555端口访问你的服务器了

7.2 阿里云

在控制台左侧选择“防火墙”

截图

右上方选择“添加规则”,在弹出的窗口中如下配置(我这里直接允许所有TCP连接了,比较省事,也可以单独制定端口),点击确定即可

截图

7.3 腾讯云

在控制台上方选择“防火墙”

截图

创建规则,允许全部TCP或者指定端口都可以

截图

其他云服务应该有类似的控制界面,可以自行设置。