树莓派搭建虚拟局域网进行游戏联机,省下两份加速器
如何才能快速换一种生活方式?参加#牛年Flag#征稿活动,征集你2021年的购物学习生活计划!>>点击查看活动详情<<本次征稿活动欢迎你的敢出敢买Flag、学习Flag以及各种生活Flag,优秀的投稿文章能获得优厚的大奖,让我们一起努力实现目标吧!
创作立场声明:与文章中提到的品牌均无利益相关
现在很多单机游戏都向着好友联机的方向发展,例如育碧的远哭系列、2K的无主之地3、B社的德军总部。毕竟加入这样的功能可以卖出更多的游戏。和好友线上联机,最麻烦的地方在于需要两个加速器。不然游戏中途掉线、丢包、高ping是家常便饭。
为啥是两个?因为加速器只能同时登陆一个设备(钱包-10086)。花钱买了游戏还要继续花钱才能玩上游戏,这河里吗?这不河里。
掉线丢包的原因在于,如果两个玩家的设备不在同一个环境下,所有数据交互就只能通过服务器进行(令人回想起被全境封锁垃圾网络支配的恐惧)。延迟取决于玩家A-土豆服务器-玩家B是否通畅。不过厂家也进行了一些优化——当玩家可以p2p联机时,大多数数据交互就不走育碧服务器了,毕竟游玩的是单机游戏而不是网游(再一次想起被全境封锁垃圾网络支配的恐惧)。
多人不借助加速器联机的解决方案也很简单——两个玩家通过虚拟专用网络(VPN)连接到同一个局域网下,就可以享受和加速器体验一致的联机体验。搭建服务器只需要三样东西:公网IP、支持端口映射的路由器、服务器(树莓派、软路由、nas都可以)
搭建Wireguard
配置公网ip
首先打运营商电话要求给公网ip(各地政策不同,直接和客服说家里想装监控摄像头,需要公网ip)。如果可以的话,最好能固定ip地址。如果不能固定ip地址,你可以设置dynamic dns(在树莓派上配置duckdns,可选),或者使用可以从app上看到WAN口地址的路由器:
当然不嫌麻烦的话,每次家里停电重启后让家人打开手机百度一下“IP”也可以获取到。
配置Wireguard
最简单的搭建wireguard的方法是使用秋水逸冰的一键脚本。
root$ wget https://raw.githubusercontent.com/teddysun/across/master/wireguard.sh && chmod 755 ./wireguard.sh && ./wireguard.sh
如果wget下载不下来的话,你可以给终端配置proxy,或者直接电脑下载好后传到树莓派上。(提示:使用三大运营商的DNS服务可能会出现问题)
首次运行这个脚本会安装wireguard(debian系建议直接下载二进制文件,不编译),随后选择让脚本生成第一个客户端配置。注意每一个配置最好同时只给一台机器用,因此为了和好友联机,需要稍后再生成第二个配置。脚本运行中任何选项直接选默认的即可(针对普通用户),默认的监听端口是6151,记住这个端口。最终生成的wireguard服务器配置文件如下:
第二行的Address是用于VPN的虚拟网段,树莓派(服务器)IP固定为10.88.88.1。之后各个客户端依次用2, 3, 4这么排列。(因此你同时也能掌握客户端的内网ip)
获得的配置文件命名为wg0_client,并保存在/etc/wireguard目录下。进入该目录需要root权限,将其弄到Windows电脑上。然后在Windows电脑上安装wireguard客户端。(我使用的是chocolatey管理软件,其他用户直接去GitHub下载即可)
choco install wireguard -y
安装完后打开软件,提示要导入配置文件。将wg0_client重命名为wg0_client.conf后即可导入:
DNS服务器地址以及Endpoint都是可以直接修改不需要改动树莓派的。针对游戏使用,DNS建议选择客户端的主路由地址,其次是114.114.114.114。
设置端口转发
wireguard监听的是192.168.1.xxx:6151端口,因此我需要把175.xxx.xxx.xxx:6151(公网)映射到内网,进入路由器管理页面,查看树莓派的局域网地址之后进行设置:
运营商会封锁公网ip的部分端口,通常来说6151这样的端口不会出问题。设置好之后用手机4G进行测试即可。
运行联机游戏有如下两种方法:自己和朋友都通过wireguard组建局域网;朋友走wireguard进入子网,自己在家里做host。这两个方式都可以实现高质量的p2p连接。
总结
游戏体验——只要对方用的不是什么长城宽带,国内三大运营商之间的丢包和延迟都没问题。另外wireguard的性能毫无疑问可以跑满家用宽带的上限,实测在全国多地都能吃满30M的上传。某些局域网联机游戏,如Minecraft也可以通过这种方式进行。
这种方法获取到的ip地址为10.88.88.x的内网地址,需要注意默认设置下客户端是无法访问192.168.1.x的各类服务的,而且NAT也并没有实现转发(开启wireguard后NAT直接从open变成restrict)
不过这些都不是什么大问题:无法访问192.168网段的各类服务——直接全都映射到公网ip上即可(虽然更加危险但个人用户勤更新系统+密码保护就好);NAT会变成restrict——同一个网段下NAT再差也能联上(厂家考虑到了这种情况,至于还要对外p2p的话,朋友的机器走wireguard自己机器在家里做host就好)
至于如何解决这两个问题,那就是如何用wireguard做内网穿透甚至是异地组网的事情了。 家用环境不需要这么复杂的配置,轮子能转就行。
范围局域网需要修改Allowed IPs为“0.0.0.0/1, 128.0.0.0/2, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4, 224.0.0.0/3” 这样才能访问局域网ip段

访问局域网仅需要在客户端修改Allowed IPs,为“0.0.0.0/1, 128.0.0.0/2, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4, 224.0.0.0/3”
申请不到公网,如果用蒲公英能不能达到同样效果呢?
4b是千兆网的,4b还可以用bond把一个普通千兆加一个usb3.0转千兆聚合起来用,进一步提高网口性能
补充一下,树莓派使用的是Ubuntu 64位系统,内核版本新的才能更好的使用wireguard。纯服务器用途请安装Ubuntu,砍掉图形界面才能运行更好
移动宽带根本不配
其实P2P游戏应该能借助浩方对战平台啥的,不过以前折腾现在纯P2P的游戏也少了
要我就骂一顿运营商换家接入光纤了...
我这边测试可以 我联通手机访问家里服务都没问题
我用的4b另外设置了超频,试过连VPN然后走云游戏,还不错
wireguard在流量大的时候,raspberry的转发性能感觉不太行,会有一定的突发延迟
我的是raspberry 2b,建议用主频高点的电脑做wireguard服务端
我是借朋友一台云服务器做了moon。随时连到家里nas很舒坦
移动和电信都能访问电信搭的服务器,而联通则封了端口
这个方法对于没有公网的朋友太尴尬了。说起局域网联机,之前也困扰过很长一段时间。后来想出来的办法是zerotier+moon,谷歌一下能找到相关资料。我有朋友在国内西南内陆,而我在江浙沿海。正常连接由于地区限制ping异常高且无法解决,后来通过购置了学生服务器在二者地理位置中间搭建moon,才有所缓解。