自建openvpn游玩p2p联机游戏

之前写过用zerotier游玩p2p联机游戏,但是zerotier毕竟是p2p的udp vpn,对于联机各方的网络需求很高,在校园网等极端网络情况下很容易出现高丢包高延迟的情况,而游戏对于高延迟高丢包又特别敏感。

这时,使用openvpn这样的中心化vpn就很有必要,像腾讯云这样大厂的服务器线路一般qos优先级比普通家宽高,因此丢包会比普通家宽的p2p直连更少,尤其是openvpn还可以使用tcp协议进行虚拟组网,可以有效减少丢包情况

本文内容仅供参考,由于网络是个很复杂的东西,每个人的网络环境都不同,因此无法保证每个人都使用openvpn后能流畅联机

服务端搭建

选择服务器

因为是中心化vpn,所以必须要搭个服务端。这里推荐腾讯云的学生机

https://cloud.tencent.com/act/campus

文章配图

4m宽带对于普通的p2p游戏也够了(这里不得不吐槽一下国内贵上天的宽带,海外服务器都是随随便便几百兆甚至g口的给,国内在2024年还是4m起步)

地区选择请尽量离所有玩家都近(如果不行的话,请尽量离做主机的玩家近),否则延迟会比较高

一定要买中国大陆的服务器,千万别为了大宽带买中国香港的,用不了

购买的时候系统选择debian(选ubuntu也行,但是ubuntu默认ssh连接不能用root账号),千万别选centos那私人系统,软件包已经停止维护,个人之前有几台centos服务器总会有莫名其妙的bug

服务器配置

连接服务器前先放行下防火墙

文章配图

可以像我一样,创建个应用类型为all的全部允许(意思为允许所有端口进入你的服务器)

之后ssh进入服务器

1
2
apt update
apt install openvpn -y

再去https://1drv.ms/u/s!AuZDyG9cXmFJhLwhIIn-OCds7fARXw?e=2GLl9b下载服务端文件

下载完后上传到服务器(可以使用sftp上传)

上传完成后解压到openvpn目录

1
2
3
unzip -d /etc/openvpn/ openvpn.zip
cd /etc/openvpn
chmod +x checkpsw.sh

此时/etc/openvpn的目录结构应该是这样的

文章配图

修改pws-file里边的user passwd为你自己的用户名密码(自己随便写就行,这里用作验证,防止别人连接你的服务器)

可以使用vi编辑器(键盘方向键控制方向,按下i进入编辑模式,编辑模式下按下esc退出,退出编辑模式后输入:wq保存并退出)

vi psw-file

这时服务端配置完备了,我们需要启动程序并让他能开机自启,这里我使用supervisor实现

sudo apt install supervisor

然后添加配置文件(vi编辑器用法同上)
vi /etc/supervisor/conf.d/openvpn_tcp.conf

添加如下内容

1
2
3
4
5
6
7
[program:openvpn_tcp]
command=/usr/sbin/openvpn --cd /etc/openvpn/ --config server_tcp.conf
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/openvpn_tcp.err.log
stdout_logfile=/var/log/supervisor/openvpn_tcp.out.log

vi /etc/supervisor/conf.d/openvpn_udp.conf

1
2
3
4
5
6
7
[program:openvpn_udp]
command=/usr/sbin/openvpn --cd /etc/openvpn/ --config server_udp.conf
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/openvpn_udp.err.log
stdout_logfile=/var/log/supervisor/openvpn_udp.out.log

这里我同时创建了tcp和udp两个服务端,如果你觉得你的网络环境不需要udp或者不需要tcp,可以不使用其中一个(如果你啥也不懂,照搬就行了,多开一个服务端占不了多少内存)

这里看到有端口占用就说明启动成功了

1
2
lsof -i:53075
lsof -i:53074

文章配图

端口启动成功后服务端就搭建完成了,接下来进入客户端配置

如果端口没开起来,可以手动启动一下服务端,然后看看报错是什么
命令如下

1
2
/usr/sbin/openvpn --cd /etc/openvpn/ --config server_udp.conf
/usr/sbin/openvpn --cd /etc/openvpn/ --config server_tcp.conf

配置客户端

这里有两个方案,一个是使用openvpn官方客户端,一个是使用dogfight360大佬的openvpn客户端套壳程序

openvpn因为是个面向专业用户的程序,所以官方客户端配置相对复杂

大佬的套壳程序配置比较简单,这里分别介绍,不过小白的话直接用套壳程序其实就够了

dogfight360大佬的套壳程序

进入大佬的博客下载 https://www.dogfight360.com/blog/1590/

文章配图

安装图上写的虚拟网卡

编辑目录下的customize.ini(以下仅供参考,根据你自己的来改)

1
2
3
4
5
6
7
8
9
10
11
[usbeam]
Server_List=自定义节点A
Disable_rules=1
Broadcast_fix=1

[自定义节点A]
IP=你的服务器ip
TCP_Port=53075
UDP_Port=53074
USER=你设置的用户名
PASS=你设置的密码

文章配图

选择自定义节点A,然后点击连接即可(udp和tcp按需选择,校园网这种udp丢包严重的网络环境可以使用tcp)

文章配图

如上图,就是连接成功了

由于大佬的套壳程序在2020年就停更了,不一定适用于新版服务端,如果你发现怎么也连不上,可能是客户端版本过老,建议使用openvpn官方客户端

openvpn官方客户端

去官网下载客户端 https://openvpn.net/community-downloads/

文章配图

记得下载v2版本,v3版本删除了对tap模式的支持

然后我们写个配置文件,配置文件内容参考如下(文件名没有要求,以.ovpn后缀结尾就行)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
client
dev tap-tcp
proto tcp
remote 服务器ip 53075
nobind

# 设置认证
auth-user-pass
remote-cert-tls server

cipher none
auth none

# 路由和DNS选项
route 10.251.0.0 255.255.0.0
dhcp-option DNS 119.29.29.29
dhcp-option DNS 180.76.76.76

# 日志级别
verb 3

<ca>
-----BEGIN CERTIFICATE-----
MIIDBzCCAe+gAwIBAgIBATANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZVc2JF
QW0wHhcNMjAwNDE0MDcxMjM4WhcNMzAwNDEyMDcxMjM4WjARMQ8wDQYDVQQDDAZV
c2JFQW0wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKI9j4QgqcRKj0
5WQPh3inLHA34GSTPGdoHZUKhCl5V63shSAjE+Yk7xQr6BH++UEXdaIOJRJ4mBlH
6tMpJAGMsbhJxXlzTWc/6jps63bqy9noa1+0TD8S7pQ6XhkPqCcQzMxoacj8gy6p
7ytqMxhrrtdfTHkwAPUPoXJG7UYyrhcpSbMz1qdUTOUbSH5ppmsc3IUary7q2aaf
KYXvXICRElq9YGr6AKaZwtg+3kTcytZnQYGd/0u2MyG0QuF3UZe1TWuur4Om03tG
DQpvxRhHAwqTZHrl7JKl03QEt++8TuMIoD8nYJ8lt8Li2Jiryy/GD46a4PraYRzw
XNNOK0RTAgMBAAGjajBoMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFG5nPeDCx+Up
IHCwg9DUtq0jJD9DMDkGA1UdIwQyMDCAFG5nPeDCx+UpIHCwg9DUtq0jJD9DoRWk
EzARMQ8wDQYDVQQDDAZVc2JFQW2CAQEwDQYJKoZIhvcNAQELBQADggEBAG9QVmFi
4lD5IIIfPMnRxgpd9HraW2Nha4KsSm+mNmKCs8JttWAkD2Ih4ciFI3dxcGkv9HEZ
qnw45cgp6jEMzk4rGTNf6UWZeQSex+d3usZkLP8V8H79UYCiIazecCjQH1BFnoe+
NZ4VuaVeNXPUmJMRNsoqMWHQwHnF2ewtVKwy5ZqnOz9VqTWgavDpxorrTZpstMYR
jw6lvXs30syGn/QW3hmetoDlZbaZiO0xNcaC60M5u2giDRWP+KDIZeYJoHgVEhIh
pdXIQmg1k/h6Po2mafetaj2ZC+UQ5IjZOQcfvWT+ACCshVv7BD3uT1vsO3IbaVHK
LwJDGbC9NMqIcrc=
-----END CERTIFICATE-----
</ca>

以上为tcp的配置文件,udp的直接改tcp为udp即可(端口也要改,将tcp的53075改成53074)

之后在openvpn客户端里导入配置文件即可连接

文章配图

常见问题

  1. Q:所有玩家都需要使用相同的协议吗
    A:理论上不需要,因为上述配置文件中tcp和udp的双网关之间可以互访,网络环境比较差的玩家选择tcp即可
  2. Q:所有玩家都需要使用相同的客户端吗
    A:理论上也不需要,连接相同的服务端就行了,客户端方面其实没有什么特别要求

自建openvpn游玩p2p联机游戏
https://zhmoegirl.com/posts/4cb4d37ba8d8/
作者
InternetBugs
发布于
2024年10月26日
许可协议