分享自己用 Go 写的游戏加速器 IkaGo

2020-05-16 16:45:27 +08:00
 Sketch

作为在校学生以及任系玩家,闲暇时间一直在 Switch 上玩,但平台上的数款游戏的联机都是玩家间各自通过 UDP 连接完成的。如果没有稳定的 UDP 环境,或者 NAT 类型不佳的话可能就只能享受单机。其中一个简单的解决途径便是使用加速器,但因为不想花钱,所以我就自己实现了一个。

IkaGo

IkaGo 是一个以 Go 语言撰写的,用于绕过 UDP 封锁、UDP QoS 以及 NAT 防火墙的代理。

附上程序框图:

特性

与市面上的加速器的比较

一些不得不提的话

实际上,加速器最重要的是线路而不是技术,市面上的加速器使用的 IPLC 、专线等才是其作为加速器最重要的部分。如果想要真的好好游戏,还是建议选择市面上的产品比较好。

从本质上看,IkaGo 可以通过串联代理 ARP 、代理以及 Udp2raw-tunnel 来实现,IkaGo 从某种意义上只是简化了大量的中间流程,使得只需要简单的部署就能完成主机加速。

IkaGo 之所以这样命名,是因为和自己喜欢的游戏有关,イカ+ Go 。

项目地址


希望 IkaGo 能帮助到需要解决联机游戏问题的你 😊

14461 次点击
所在节点    分享创造
72 条回复
daya
2020-05-16 17:18:16 +08:00
很强
9yu
2020-05-16 17:24:48 +08:00
太帅了
scnace
2020-05-16 17:24:53 +08:00
甚至可以当毕设了(
labulaka521
2020-05-16 17:45:36 +08:00
棒!!!
timqian
2020-05-16 18:09:49 +08:00
赞,一个月玩一两次动森用户的福音
donnior
2020-05-16 18:22:03 +08:00
@Sketch 感谢楼主,有个问题

-r addresses: Sources, use comma to separate multiple addresses. Packets with the same source's address will be proxied

这个参数不太懂是啥意思,要怎么填?
Sketch
2020-05-16 18:30:10 +08:00
@donnior 意思就是,转发哪些源地址的流量。
一个典型的设置是,-publish 10.6.0.1 -r 10.6.0.2,10.6.0.3,然后将被代理设备的网络设置为 IP 10.6.0.2 或 10.6.0.3 网关 10.6.0.1 那就将转发来自 10.6.0.2 和 10.6.0.3 的流量
NeedforV2
2020-05-16 19:01:04 +08:00
太强了!期待大神弄一个 openwrt 路由上能用的
lzyliangzheyu
2020-05-16 19:31:23 +08:00
关注一波
dobelee
2020-05-16 19:48:25 +08:00
不玩游戏的弱弱问一下,游戏加速器和普通代理客户端有什么区别?
CCIP
2020-05-16 19:53:58 +08:00
@dobelee 一个本来的作用是加密或者安全 一个是减少延迟和丢包
Sketch
2020-05-16 20:02:22 +08:00
@dobelee 正如 @CCIP 说的,游戏加速器主要是用于减少延迟和丢包,所以才说线路是其最主要的一部分。当然,游戏加速器还有一个作用就是使 NAT 穿透失败的用户也能进行游戏,而这是 IkaGo 主要解决的问题
m0cha
2020-05-16 20:11:23 +08:00
很厉害的大佬,第一次发帖就这么高质量,收藏
akige
2020-05-16 20:11:32 +08:00
如果有中国到美国的大带宽光缆资源,可以做什么游戏的加速呢?
Sketch
2020-05-16 20:35:51 +08:00
@akige 或许可以通过 IPLC 之类的减少时延,否则可能只有对时延不敏感的游戏可以。所以线路才是加速器最主要的一部分 😂
donnior
2020-05-16 20:38:03 +08:00
mac 上编译不通过,libpcap 已经通过 homebrew 安装了

# github.com/google/gopacket/pcap
../../../go/pkg/mod/github.com/google/gopacket@v1.1.17/pcap/pcap.go:30:22: undefined: pcapErrorNotActivated
Sketch
2020-05-16 21:03:08 +08:00
@donnior 感谢反馈,但是我可能很难解决这个问题,因为我并没有 macOS 的系统,所以是通过 GitHub Actions 完成的编译并在其他 macOS 上测试使用的,但一切正常。
但是有几个细节不知道能不能帮到你。首先是我在 Github Actions 下编译时,并没有配置 libpcap,故 libpcap 可能在 macOS 中已经预装了。另外在 google/gopacket 的 issues 中,也存在类似的案例。因此,这可能是由于 libpcap 的安装,或是 Go 环境配置问题(我更倾向于)导致的
Sketch
2020-05-16 21:06:30 +08:00
@donnior 我想再补充一点,在 https://github.com/google/gopacket/issues/629 这一 issue 最后的回复中,有人提到可以 sudo go build 。虽然这并不优雅,但至少 it works 。或许可以帮助到你 : )
donnior
2020-05-16 21:41:07 +08:00
@Sketch 我也查到这个 issue 了,折腾无果,放弃编译了;直接使用你发布的 release 包( ubuntu server 和 darwin client ),没有用源码运行;直接在我的 ubuntu 服务器上运行 `./ikago-server -p 38080` ,然后从家里的 mac 中运行客户端时,server 会直接退出,报错如下:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x67f0a1]

goroutine 11 [running]:
log.(*Logger).Output(0x0, 0x2, 0xc000026340, 0x3d, 0x0, 0x0)
/usr/local/go/src/log/log.go:162 +0x81
ikago/internal/log.Verbosef(0x8772fd, 0x1b, 0xc000051da0, 0x2, 0x2)
/mnt/c/Users/Xie/Documents/Code/ikago/internal/log/log.go:82 +0xa0
ikago/internal/pcap.(*Conn).handshakeSYNACK(0xc000442000, 0xc000063920, 0x0, 0x0)
/mnt/c/Users/Xie/Documents/Code/ikago/internal/pcap/conn.go:323 +0x7e3
ikago/internal/pcap.(*Listener).Accept(0xc0003ce180, 0x0, 0x0, 0x0, 0x0)
/mnt/c/Users/Xie/Documents/Code/ikago/internal/pcap/conn.go:815 +0x8c0
main.open.func1(0x904c40, 0xc0003ce180)
/mnt/c/Users/Xie/Documents/Code/ikago/cmd/ikago-server/main.go:555 +0x3b
created by main.open
/mnt/c/Users/Xie/Documents/Code/ikago/cmd/ikago-server/main.go:553 +0x7d1

是不是发布的包有问题?怎么还有你的用户路径?
Sketch
2020-05-16 21:47:50 +08:00
@donnior 感谢反馈。抱歉,这 2 份 Linux 的包是在 WSL 下编译的,确实有问题。我已重新在 Linux 下生成并更新了 release 中的 assets 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/672367

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX