跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 分享自己用 Go 写的游戏加速器 IkaGo
未分類
2020 年 5 月 19 日

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

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

資深大佬 : Sketch 0

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

IkaGo

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

附上程序框图:

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

特性

  • 利用了类似 Udp2raw-tunnel 的 FakeTCP 机制,绕过 UDP 封锁与 UDP QoS
  • 利用了代理 ARP 应答指定 IP 地址的请求,实现将自身作为网关处理来自指定 IP 地址的网络流量(也就是类似市面上的加速器,将主机的 IP 地址与网关设为网络环境中不存在的值,由加速器来处理流量)
  • 通过 IkaGo-web,一个相关联的前端项目,监控网络流量
  • 多路复用、跨平台、Full Cone NAT 、加密、KCP 支持……

与市面上的加速器的比较

  • IkaGo 将所有支持的包通过 FakeTCP 转换为 TCP 包,绕过 UDP 封锁与 UDP QoS
  • 多路复用使得多个主机可以一同被加速
  • 免费(但你还是需要租用 VPS 等服务器)、启动快、无广告、跨平台、设置可自定义、开源……

一些不得不提的话

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

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

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

项目地址

  • IkaGo https://github.com/zhxie/ikago
  • IkaGo-web https://github.com/zhxie/ikago-web

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

大佬有話說 (58)

  • 資深大佬 : daya

    很强

  • 資深大佬 : 9yu

    太帅了

  • 資深大佬 : scnace

    甚至可以当毕设了(

  • 資深大佬 : labulaka521

    棒!!!

  • 資深大佬 : timqian

    赞,一个月玩一两次动森用户的福音

  • 資深大佬 : donnior

    @Sketch 感谢主,有个问题

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

    这个参数不太懂是啥意思,要怎么填?

  • 主 資深大佬 : Sketch

    @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

    太强了!期待大神弄一个 openwrt 路由上能用的

  • 資深大佬 : lzyliangzheyu

    关注一波

  • 資深大佬 : dobelee

    不玩游戏的弱弱问一下,游戏加速器和普通代理客户端有什么区别?

  • 資深大佬 : CCIP

    @dobelee 一个本来的作用是加密或者安全 一个是减少延迟和丢包

  • 主 資深大佬 : Sketch

    @dobelee 正如 @CCIP 说的,游戏加速器主要是用于减少延迟和丢包,所以才说线路是其最主要的一部分。当然,游戏加速器还有一个作用就是使 NAT 穿透失败的用户也能进行游戏,而这是 IkaGo 主要解决的问题

  • 資深大佬 : m0cha

    很厉害的大佬,第一次发帖就这么高质量,收藏

  • 資深大佬 : akige

    如果有中国到美国的大带宽光缆资源,可以做什么游戏的加速呢?

  • 主 資深大佬 : Sketch

    @akige 或许可以通过 IPLC 之类的减少时延,否则可能只有对时延不敏感的游戏可以。所以线路才是加速器最主要的一部分

  • 資深大佬 : donnior

    mac 上编译不通过,libpcap 已经通过 homebrew 安装了

    # github.com/google/gopacket/pcap
    ../../../go/pkg/mod/github.com/google/[email protected]/pcap/pcap.go:30:22: undefined: pcapErrorNotActivated

  • 主 資深大佬 : Sketch

    @donnior 感谢反馈,但是我可能很难解决这个问题,因为我并没有 macOS 的系统,所以是通过 GitHub Actions 完成的编译并在其他 macOS 上测试使用的,但一切正常。
    但是有几个细节不知道能不能帮到你。首先是我在 Github Actions 下编译时,并没有配置 libpcap,故 libpcap 可能在 macOS 中已经预装了。另外在 google/gopacket 的 issues 中,也存在类似的案例。因此,这可能是由于 libpcap 的安装,或是 Go 环境配置问题(我更倾向于)导致的

  • 主 資深大佬 : Sketch

    @donnior 我想再补充一点,在 https://github.com/google/gopacket/issues/629 这一 issue 最后的回复中,有人提到可以 sudo go build 。虽然这并不优雅,但至少 it works 。或许可以帮助到你 : )

  • 資深大佬 : donnior

    @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

    @donnior 感谢反馈。抱歉,这 2 份 Linux 的包是在 WSL 下编译的,确实有问题。我已重新在 Linux 下生成并更新了 release 中的 assets 。

  • 資深大佬 : donnior

    @Sketch 貌似 linux server 包里面实际是 client 的执行文件?

  • 主 資深大佬 : Sketch

    @donnior 是的,打包打错了,所以又更新了一次

  • 資深大佬 : donnior

    @Sketch 还是有问题,

  • 主 資深大佬 : Sketch

    @donnior 是 issue 。已经解决了,并且重新 release 了版本 v0.4.1 。macOS 我暂时无法打包,所以可以使用 Github Actions 中生成的 artifacts,或者设置 -log 参数。issue 的原因是,即使未设置 log 文件,也打印 verbose 到 log 文件内,导致了空指针引用。十分感谢反馈

  • 資深大佬 : donnior

    @Sketch 测试了一下,虽然运行成功了,但是没有效果(或者是我用法错了?)

    假设我的设备如下:

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

    能否帮给个实例配置? 这种方式 swtich 上是否还需要其他配置?

  • 主 資深大佬 : Sketch

    @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 的流量,另外这也是某企鹅加速器的默认设置

  • 主 資深大佬 : Sketch

    @donnior 补充一点,服务器上也建议使用 -rule 并通过 sudo 运行,或是参考 README 中的 troubleshoot 配置防火墙

  • 資深大佬 : AFuture

    我差点以为你是一个朋友

  • 主 資深大佬 : Sketch

    @donnior 订正一下,#26 中的 -p 应为 -publish

  • 資深大佬 : qbmiller

    在校学生都这么牛逼了吗

  • 資深大佬 : donnior

    @Sketch 谢谢,貌似已经成功连接了,但是 switch 上实际测试比直连貌似还慢一些

  • 主 資深大佬 : Sketch

    @donnior 不客气,连接慢也有可能是服务器的问题,比如我自己腾讯云,通过 IkaGo 在 Switch 的连接测试里就不怎么样,但是通过 Speedtest 测速就还行,但是游戏的网速要求其实并不高所以没什么大问题。如果还有问题的话可以在 Github 中发 issue : )

  • 資深大佬 : shansing

    支持一下主。顺便问下,因为类似 udp2raw 的方式不确定一些中转服务支不支持,有没有可能后续版本可选去除 fake TCP 呢?

  • 主 資深大佬 : Sketch

    @shansing 其实有使用规范 TCP 传输的功能,仅限通过 config 启动时,在 config 中设置 “tcp”: true 开启。但是因为这一功能还不成熟,所以还处于实验性的状态下,并没有写在 README 中

  • 資深大佬 : wangyucn

    滋瓷一个

  • 資深大佬 : leafleave

    支持

  • 資深大佬 : TangMonk

    主买了 switch online 吗?

  • 資深大佬 : yazoox

    厉害!支持一下

  • 資深大佬 : missdeer

    牛逼牛逼

  • 資深大佬 : jdlau

    学习一下

  • 資深大佬 : liuxu

    我用下试试

  • 資深大佬 : Nostopping

    @Sketch 26 的例子 client 是运行在路由器上的吗?如果我是 win 下运行 client 并且想代理本机流量应该怎么设置?
    在 win 下我 client -r 本机 ip -s 服务器 ip 这样运行就会不停的 send error: PacketSendPacket failed

  • 主 資深大佬 : Sketch

    @Nostopping #26 的例子是运行在电脑上的。由于某些众所周知的原因,IkaGo 并不能用于代理本地流量的,它实现的是类似市面上加速器“主机加速”的功能。如果要代理本地流量,Windows 的话可以用某些通过 PID 筛选流量的代理软件 : )

  • 資深大佬 : longgediyi999

    可以加速 PUBG 吗主

  • 主 資深大佬 : Sketch

    @longgediyi999 理论上 IkaGo 可以代理来自指定源地址所有支持的流量,但也如同 #43 所说的,是无法代理本地流量的,如果要代理 PC 游戏,那么需要再另一台设备上启动 IkaGo 。IkaGo 设计之初就是为主机游戏,Switch 或是 PS4 上的游戏,加速的。另外,正如我一再提及,加速器最重要的其实是线路,所以如果想要认真玩游戏可能还是选择市面上的加速器比较好。

  • 資深大佬 : MartinWu

    一股淡淡的 geek 意味。。强。

  • 資深大佬 : simpx

    看了下 github 主页,是浙大学弟啊

    学弟大几了,有没有兴趣看看实习 分享自己用 Go 写的游戏加速器 IkaGo

  • 資深大佬 : CheekiBreeki

    很強,先 star

  • 資深大佬 : leetao94

    果然兴趣是第一驱动力~~

  • 資深大佬 : KickAssTonight

    支持!

  • 資深大佬 : pzh

    内测人员前来支持

  • 資深大佬 : latteczy

    加密是为了绕过 GFW 的探测么?

  • 資深大佬 : Themyth

    请问能否 n2n on IkaGo?
    或者 openvpn on IkaGo?
    谢谢

  • 主 資深大佬 : Sketch

    @latteczy 只能是,加密是为了包的完整性,设计 IkaGo 的目的仅仅只是游戏加速。

  • 主 資深大佬 : Sketch

    @Themyth IkaGo 的本质是代理 ARP + 代理 + Udp2raw-tunnel 。事实上,可以把 IkaGo 的代理 ARP 部分剥离出来,这样就可以接其他的代理了。目前,如果 OpenVPN 的下一级是 IkaGo 的话,可以是可以,但事实上做了代理( OpenVPN )+ 代理 ARP + 代理( IkaGo )+ FakeTCP,有点浪费。

  • 資深大佬 : Themyth

    @Sketch 是的,那 IKAGO 默认启用了 Kcp 吗

  • 主 資深大佬 : Sketch

    @Themyth 默认情况下,IkaGo 不使用 KCP 和加密,只使用 FakeTCP,因为对于游戏加速而言已经足够了。

  • 資深大佬 : ohooooo

    大神的气息。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具