分享自己用 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 能帮助到需要解决联机游戏问题的你 😊

13978 次点击
所在节点    分享创造
72 条回复
donnior
2020-05-16 21:54:24 +08:00
@Sketch 貌似 linux server 包里面实际是 client 的执行文件?
Sketch
2020-05-16 21:57:25 +08:00
@donnior 是的,打包打错了,所以又更新了一次 😂
donnior
2020-05-16 22:07:17 +08:00
@Sketch 还是有问题,😂

on ubuntu server: `./ikago-server -p 38080`
on my mac: `sudo ./ikago-client -s $my_server_ip:38080 -r 192.168.1.17 -publish 192.168.1.1`

连接时候 server 直接挂掉:

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

goroutine 12 [running]:
sync.(*Mutex).Lock(...)
/usr/local/go/src/sync/mutex.go:74
log.(*Logger).Output(0x0, 0x2, 0xc000026340, 0x3d, 0x0, 0x0)
/usr/local/go/src/log/log.go:153 +0x6e
ikago/internal/log.Verbosef(0x890db6, 0x1b, 0xc000055db0, 0x2, 0x2)
/home/sketch/ikago/internal/log/log.go:82 +0xa0
ikago/internal/pcap.(*Conn).handshakeSYNACK(0xc000440000, 0xc000067b00, 0x0, 0x0)
/home/sketch/ikago/internal/pcap/conn.go:323 +0x7cd
ikago/internal/pcap.(*Listener).Accept(0xc0003d6180, 0x0, 0x0, 0x0, 0x0)
/home/sketch/ikago/internal/pcap/conn.go:815 +0x9ce
main.open.func1(0x91adc0, 0xc0003d6180)
/home/sketch/ikago/cmd/ikago-server/main.go:555 +0x3b
created by main.open
/home/sketch/ikago/cmd/ikago-server/main.go:553 +0x7d4
Sketch
2020-05-16 22:15:31 +08:00
@donnior 是 issue 。已经解决了,并且重新 release 了版本 v0.4.1 。macOS 我暂时无法打包,所以可以使用 Github Actions 中生成的 artifacts,或者设置 -log 参数。issue 的原因是,即使未设置 log 文件,也打印 verbose 到 log 文件内,导致了空指针引用。十分感谢反馈 😊
donnior
2020-05-16 23:17:06 +08:00
@Sketch 测试了一下,虽然运行成功了,但是没有效果(或者是我用法错了?)

假设我的设备如下:

server: 2.3.4.5:38080
mac : 192.168.1.10
路由器: 192.168.1.1
switch 游戏机:192.168.1. 20

能否帮给个实例配置? 这种方式 swtich 上是否还需要其他配置?
Sketch
2020-05-16 23:27:53 +08:00
@donnior macOS 相比起 Windows 的约束更大,所以需要带上代理 ARP 运行,一个典型设置是:
ikago-client:-rule -p 10.6.0.2 -r 10.6.0.1 -s server:port (配置防火墙,使用代理 ARP 将自身视为 10.6.0.2,代理来自 10.6.0.1 的流量,另外这也是某企鹅加速器的默认设置 😂)
Switch 网络设置:IP 地址 10.6.0.1 子网掩码 255.255.255.0 网关 10.6.0.2
macOS 下务必配置防火墙,具体可参考 README 中的 troubleshoot,或是使用 -rule (如上)并通过 sudo 运行 IkaGo (更推荐)
Sketch
2020-05-16 23:32:59 +08:00
@donnior 补充一点,服务器上也建议使用 -rule 并通过 sudo 运行,或是参考 README 中的 troubleshoot 配置防火墙
AFuture
2020-05-16 23:38:49 +08:00
我差点以为你是一个朋友😂他也自己用 go 写了一个加速器。
Sketch
2020-05-16 23:46:02 +08:00
@donnior 订正一下,#26 中的 -p 应为 -publish
qbmiller
2020-05-17 00:00:34 +08:00
在校学生都这么牛逼了吗
donnior
2020-05-17 00:15:47 +08:00
@Sketch 谢谢,貌似已经成功连接了,但是 switch 上实际测试比直连貌似还慢一些 😂, 后面再多试试看看
Sketch
2020-05-17 00:21:20 +08:00
@donnior 不客气,连接慢也有可能是服务器的问题,比如我自己腾讯云,通过 IkaGo 在 Switch 的连接测试里就不怎么样,但是通过 Speedtest 测速就还行,但是游戏的网速要求其实并不高所以没什么大问题。如果还有问题的话可以在 Github 中发 issue : )
shansing
2020-05-17 01:05:12 +08:00
支持一下楼主。顺便问下,因为类似 udp2raw 的方式不确定一些中转服务支不支持,有没有可能后续版本可选去除 fake TCP 呢?
Sketch
2020-05-17 01:13:34 +08:00
@shansing 其实有使用规范 TCP 传输的功能,仅限通过 config 启动时,在 config 中设置 "tcp": true 开启。但是因为这一功能还不成熟,所以还处于实验性的状态下,并没有写在 README 中
wangyucn
2020-05-17 05:40:54 +08:00
滋瓷一个
leafleave
2020-05-17 07:28:52 +08:00
支持
TangMonk
2020-05-17 08:40:36 +08:00
楼主买了 switch online 吗?
yazoox
2020-05-17 09:16:32 +08:00
厉害!支持一下
missdeer
2020-05-17 10:04:18 +08:00
牛逼牛逼
jdlau
2020-05-17 11:20:17 +08:00
学习一下

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

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

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

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

© 2021 V2EX