使用SoftEther搭配VPS搭建VLAN环境(全网最详细中文教程!100%成功)
提醒:阅读本文并按照步骤操作预计需要30分钟以上,请读者保持绝对的细心和耐心。
1. 背景介绍
动机:codemaster F1系列游戏的联机模式类似P2P,在分布式的节点环境下数据传输和同步异常缓慢,经常出现长时间的加载等候、发车灭灯延迟、圈数和名次计算错乱等影响游戏和比赛体验的状况,因此考虑自己架设私人VPN实现虚拟局域网游戏。
本文所述VPN遵循其英文全称Virtual Private Network的严格表述,旨在创建远程私人局域网环境以供游戏使用,未涉及任何非法用途。尝试用该方法连接境外VPS实现科学上网的朋友,若触犯法律则后果自负。(我看刑)
如果你按照本文严格操作,一定能够搭建一个性能令自己满意的虚拟局域网服务器。相关资源分散,收集和尝试不易,如果本文内容对你有一定帮助,可以通过打赏(二维码在页面底部)的方式支持作者。
2. 准备工作
- 一个可以用作vps的付费服务器。免费服务器亦可尝试,但不保证效果
- 可以是任意有固定公网IP的服务器
- 示例使用GCP香港实例(内地访问居然也很好用)、阿里云和腾讯云轻量应用主机(新用户20多块钱三个月,美滋滋)搭配ubuntu系统镜像测试通过,如果追求长期稳定,建议内地用户使用境内服务器(e.g. 阿里云@上海、腾讯云@广州)
- 系统镜像可以是 Ubuntu (or minimal) 或 Debian (or minimal)
- 服务器带宽最好大于等于5Mbps,否则联机游戏会出现延迟
- 核心数和内存要求不高,根据预算选择即可
- 非常重要:一定要确认服务器的防火墙规则允许所有外部IP的TCP流量访问服务器5555端口。不知道怎么检查和编辑防火墙规则的朋友,可以提前参考本文最后部分操作
- 一台PC with Windows 10。
- (可选)SSH客户端:PuTTY,Xshell
- 本文服务器配置和管理仅限使用Windows操作系统。Mac和Linux用户可直接使用terminal的ssh命令连接远程主机。另外虽然也有softether for mac and linux的客户端,这里不建议使用Mac和Linux管理和连接VPN(官网是这么说的)
- PuTTY使用参考使用 PuTTY 从 Windows 连接到 Linux 实例 - Amazon Elastic Compute Cloud
- 对Linux基础命令不熟悉的可以参考Linux 命令大全 | 菜鸟教程 (runoob.com)
3. 配置服务器
使用SSH客户端或者云服务控制台的webshell登录服务器终端。使用 sudo su
命令进入管理员模式
使用 apt-get
命令更新和安装软件包
1 | apt-get update |
访问开源软件SoftEther下载页面,按照图示选择后复制箭头所指的下载链接地址
使用 wget url
命令下载server组件,链接可以替换成上面复制的下载链接以下载最新发行版
1 | 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组件,注意修改为你自己对应的文件名
1 | tar zxf softether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz |
转到 /usr/local/
路径并修改对应文件和路径的权限
1 | cd .. |
使用vim新建vpnserver配置文件
1 | vim /etc/init.d/vpnserver |
按小写i进入输入模式,粘贴以下脚本
1 |
|
按 esc
退出编辑模式,输入 :wq
保存文件并退出。使用下列命令修改读写权限并启动服务,若出现提示 mkdir: cannot create directory ‘/var/lock/subsys’: File exists
可以忽略
1 | chmod 755 /etc/init.d/vpnserver |
命令行输出如图表示服务正常启动:
运行检查程序
1 | cd /usr/local/vpnserver/ |
All pass 输出如图:
使用 ctrl + D
退出vpncmd终端,再运行下面的命令配置admin端口和密码
1 | ./vpncmd |
第一个需要输入的位置输入 127.0.0.1:5555
回车
第二个输入留空,回车,进入命令终端
输入 ServerPasswordSet
回车,设定并确认密码
4. 安装和配置管理终端(Windows10 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. 客户端设置(Windows10 x64)
在你以及其他所有希望加入局域网的设备(人话:用来玩游戏的电脑)上,访问开源软件SoftEther下载页面,按照图示选择后下载安装包(不需要care是intel还是AMD)
一路默认设置安装后启动软件,界面如下
点击添加新的VPN连接会提示需要初始化虚拟适配器,确定并随便起个名字,初始化完成后如图
在添加新的VPN连接配置页面,按照数字顺序填写配置,每一步都非常重要
- 设置名随意,用于区分
- 主机名可以填写服务器外部IP或者softether中自己设置的主机名,我选择了后者
- 端口号在下拉选项中选5555
- 虚拟HUB名填写Part4设置管理端的时候自定义的HUB名
- 用户名填Part4中自己设置的
- 密码同上
- 都设置好后进入“高级设置”子菜单
在高级设置中设置TCP连接数为8,并取消勾选SSL加密以提高传输速度(仅限娱乐游戏场景,如果是比较正规的比赛可以不用取消勾选),点击确定。回到连接设置界面,点击确定。
回到主界面,右键或者双击连接VPN
连接成功,自动分配虚拟局域网IP
如果别人反映连不上,你可以再参考本文最后一部分检查一下你自己服务器的防火墙规则
理论上此时就算离线启动steam也已经可以连接虚拟局域网游戏了。
6. 补充:桥接方案(可选,第4步不使用SecureNAT的备选方案)
如果前面设置了SecureNAT,这里需要禁用。
回到管理主界面,选择本地网桥设置
按照下述步骤操作,其中HUB选择前面设置的HUB名字,tap名称可以跟我一样设置为soft方便follow后续步骤
确定后,状态应该如下
在服务器终端输入 ifconfig
,找到第一个设备的 inet addr
(一般在输出的第二行)也就是内部IP地址,记录备用
使用命令 apt-get install dnsmasq
安装DHCP服务器,以便分配局域网动态IP。
使用命令 vim /etc/dnsmasq.conf
打开DNS配置文件,在最后插入以下三行:
1 | interface=tap_soft |
用命令 rm /etc/init.d/vpnserver
删掉之前的服务器配置文件。然后输入 vim /etc/init.d/vpnserver
建立一个新的配置文件,按i切换输入模式,粘贴如下内容
1 |
|
另外不要忘记修改权限,否则无法enable service:
1 | chmod 700 /etc/init.d/vpnserver |
新建ipv4转发配置 vim /etc/sysctl.d/ipv4_forwarding.conf
,粘贴如下内容
1 | net.ipv4.ip_forward = 1 |
应用sysctl
1 | sysctl --system |
下面一条指令最后 [YOUR VPS IP ADDRESS]
需要替换成上面记录的内部IP
1 | iptables -t nat -A POSTROUTING -s 192.168.7.0/24 -j SNAT --to-source [YOUR VPS IP ADDRESS] |
安装ip表持久化工具,系统重启不影响桥接转发
1 | apt-get install iptables-persistent |
最后用两条命令重启服务,服务器端就配置完成了
1 | /etc/init.d/vpnserver 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或者指定端口都可以
其他云服务应该有类似的控制界面,可以自行设置。