ikago 和 pcap2socks 使用体验

参考文章:分享自己用 Go 写的游戏加速器 IkaGo - V2EX

Newlearner の自留地 了解到的游戏加速软件。

后来发现作者还写了一个 pcap2socks 的项目,同样用于游戏加速。

区别在于,

  • ikago 是完整的一套游戏加速方案;
  • pcap2socks 只保留了旁路由的功能,还需搭配 socks 代理使用。

和很多专攻 pc 代理的加速器不同,这类型加速器的加速原理是旁路由,常见于给各种游戏主机加速。用过各种游戏加速器 pc 客户端主机加速的都应该有印象:在 pc 这边开好主机加速,再在游戏机那一段设置好 ip 配置,正确设置的话 pc 加速器这边会显示已成功加速。而这俩加速器的使用步骤也差不多是这样。

当然,自建加速器和大厂加速器的取舍我已经在另一篇文章里提过了,这里只谈这种方案在技术上对普通加速器的优势:

各个大厂的游戏加速器的主机加速功能只能为一台设备加速,而且这台设备还有平台限制;而自建加速器想加速多少设备就加速多少设备;只要你想,加速 pc 、手机也可以。

当然了,旁路由加速要求加速设备和被加速设备不能是同一个设备,用过大厂游戏加速器主机加速的人也应该对此深有体会,自己想玩主机却还要一直开着电脑?大厂们也知道这点,于是就趁机贩卖起能够更为小巧省电,独立运行器加速器的主机盒;以及我在另一篇文章中谈到那些能安装加速器插件的路由器。其实原理都并没有脱离 arp 劫持 + 代理流量的旁路由模式。自建就更灵活了:只要你的设备能跑起 go,就能运行。各类软路由,甚至手机上的 termux,都可以达成要求,这里就不详细阐述了。

ikago

下载

server 和 client 端运行平台是 linux 或者 windows 的,直接下载对应 release。或者按文档给的方法,安装 go 并 git clone 项目后使用 go run 运行,适合其他平台。

服务端配置

vps 这边新建一个 server.json,假设就放在 /root 下吧

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
{
"listen-devices": [],
"upstream-device": "",
"gateway": "",
"mode": "faketcp",
"method": "aes-128-gcm",
"password": "[密码]",
"rule": true,
"monitor": 9400,
"verbose": false,
"log": "",
"mtu": 1400,
"kcp": false,
"kcp-tuning": {
"sndwnd": 100,
"rcvwnd": 100,
"datashard": 20,
"parityshard": 20,
"acknodelay": false,
"nodelay": false,
"interval": 10,
"resend": 0,
"nc": 0
},

"fragment": 1400,
"port": 9300
}

可以改的几个地方:

  • monitor 是和 web 监控端链接的接口。不过 monitor 这个接口在 client 端开就足够了,不一定要在 server 端这里再开一个。
  • verbose,详情,设为 true 日志会变得更详细。
  • log。日志输出位置。但后续我们会用 supervisor 开启自启的同时去输出日志,所以没必要开这个。
  • port。远程端口。

看起来可以调但其实不能调的地方:

  • mode。文档写可选 tcp 和 faketcp,但实际上用 tcp 的话不能开启加密,即 method 那里只能填 none,否则连不通。
  • kcp。kcp 设为打开的话,client 端平台不能是 windows,否则也连不通,会报错 network layer type not support

这俩应该是 bug 吧(前者在项目的 Known Issues 中有提到)。。。不过看作者项目好久没动,我也不好意思提 issue 去了(又不是不能用)。

假设咱的 release 版 server 端二进制文件放在 /root/ikago 下吧,启动看看:

1
/root/ikago/ikago-server -c /root/ikago/server.json

大概效果是这样的:

客户端配置

以 windows 为例,新建 client.json:

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
{
"listen-devices": [],
"upstream-device": "",
"gateway": "",
"mode": "faketcp",
"method": "aes-128-gcm",
"password": "[密码]",
"rule": true,
"monitor": 9400,
"verbose": true,
"log": "",
"mtu": 1400,
"kcp": false,
"kcp-tuning": {
"sndwnd": 100,
"rcvwnd": 100,
"datashard": 20,
"parityshard": 20,
"acknodelay": false,
"nodelay": false,
"interval": 10,
"resend": 0,
"nc": 0
},

"publish": "10.6.0.2",
"fragment": 1400,
"port": 0,
"sources": [
"10.6.0.1",
"10.6.0.3"
],
"server": "[vps_ip]:9300"
}
  • monitor 和 verbose,和 server 那边含义一致。client 这边建议都开启。
  • sources:劫持并监听的本地 ip,即要加速的设备在路由器下的本地 ip。
  • publish:除了使用 arp 或者到路由器中获取需要加速设备的 ip 并填入 sources 中,更推荐的方法是单独做一个网段,用过加速器主机加速的各位应该都不陌生。作者选用的方法是模仿 tx 加速器的网段设置,被加速主机 ip 填 10.6.0.1,网关填 10.6.0.2,前者写到 sources 中,后者写到 publish 中,我个人又多加了一个 ip,这样如果还有另一个加速的设备就不用回来再修改了。

启动

1
.\ikago-client.exe -c .\client.json

效果差不多是这样的:

开始使用

被加速设备改用手动获取 ip 地址,publish 处的地址填入网关一项中;sources 处的其中一个地址填入 ip 一项中,子网掩码为 255.255.255.0,dns 一项填入 8.8.8.8。

打开 ikago-web,可以选择拉取项目 zhxie/ikago-web: IkaGo Web is a front-end interface for IkaGo. 在本地打开或者自搭,也可以使用作者搭建的 web 页面

点击 configure,path 改成 localhost:9400。正确设置的话,status 处会显示为 active,并且左下角显示有已经加速上的设备。

服务端设置自启(可选)

  1. 安装 supervisor

    1
    apt install supervisorctl -y
  2. 新建一个 ikago.conf,内容如下

    1
    2
    3
    4
    5
    6
    7
    [program:ikago]
    user=root
    command=/root/ikago/ikago-server -c /root/ikago/server.json
    autostart=true
    redirect_stderr = true
    stdout_logfile_maxbytes = 1MB
    stdout_logfile = /tmp/ikago.log

    把这个文件放进 /etc/supervisor/conf.d

  3. 运行

    1
    supervisorctl reload

    后续直接通过

    1
    tail -f /tmp/ikago.log

    查看日志。

其他问题

  1. 有时虽然配置正确了,被加速设备在 web 面板中却未出现,且被加速设备也连接不上网络。尝试重启笔记本和路由器,还有可能是某些路由器本身系统因素导致出现问题,我曾经就遭遇过加速设备在主路由(ac86u,梅林改,本身就不算稳定的系统)加速不上,挂上一个刷入小米路由器的联想 newifi mini 并让加速和被加速设备连上后加速成功的例子。

    另一种情况是我一开始习惯把网关设为 .1 为结尾的地址,因此 publish 处我填了 10.6.0.1,sources 处填了 10.6.0.2,而被加速设备处也进行相应顺序上的调换,结果发现加速不上;换回来就成功了。这就比较玄学了。。。后面的 pcapsocks 也出现过这样的问题。

  2. 我在前一篇文章中写过不太推荐这个加速器,原因就在于,我运行后也没在使用,但五六天后我的探针给我报警了,回来一查:

    摊手(

pcap2sockspcap2socks-gui

和 ikago 略有差异,pcap2socks 隧道的工作交给 socks5 了,只需要一个放在本地的二进制文件即可。假设 socks 开在 1080 端口,则:

1
.\pcap2socks.exe -s 10.6.0.1 -p 10.6.0.2 -d 127.0.0.1:1080

这里的 -s-p 在上面的 ikago client 配置中都有对应项,还不熟悉的可以返回去看。

这时多半会报错

1
error: Cannot determine the interface. Available interfaces are listed below, and please use -i <INTERFACE> to designate:

然后底下这些就是设备列表,找到你的上网网卡的设备,复制前面那一长串 \Device\NPF_{xxx},在命令用 -i 参数带上,即再次输入:

1
.\pcap2socks.exe -s 10.6.0.1 -p 10.6.0.2 -d 127.0.0.1:1080 -i '\Device\NPF_{xxx}'

主机端参考 ikago 那边的设置就行了。

这个我还是不推荐用。。。因为有时运行一段时间就报错:

1
warning: receive from proxy: TCP: xxx:443 -> 0: 你的主机中的软件中止了一个已建立的连接。 (os error 10053)

但其 gui 版本经过我实验表现相对稳定,也不用考虑网卡那串长长的 CLSID,甚至有 tx/uu 加速器默认的 ip 方案可直接选用,推荐使用。(这都喂到嘴里了,应该不用教了吧,gui 教程还要截图挺累的)

(唯一的缺点也许是不能在软路由上用 gui 版。不过软路由直接设置成旁路由然后全局代理他不香嘛?)

不过这里还是有个小问题,某些设备(特别是 windows 20H2)打开这个 gui 看到的是一片空白,我排查了一下,应该是新版 edge 的锅,有这么几种解决方案:

  1. (优先使用)作者在项目中底下写的,启用 loopback 。以管理员权限运行 powershell,输入:

    1
    CheckNetIsolation.exe LoopbackExempt -a -n="Microsoft.Win32WebViewHost_cw5n1h2txyewy"
  2. 安装 chromium edge dev。可以从 Microsoft Edge Insider Channels 下载。也可以直接用 chocolatey 安装。

    1
    choco install microsoft-edge-insider-dev -y
  3. 嫌 chromium edge dev 太臃肿?也可以只下 runtime:Webview2 - Microsoft Edge Developer。下载安装里面的 x64 版「常青版独立安装程序」(卧槽这翻译和坐和放宽有的一拼)。

  4. (并不是正确的解决方法,但我潜意识感觉后续可能会有用,记录一下)更新 WebView2Loader.dll
    安装 nuget

    1
    choco install NuGet.CommandLine -y

    安装 NuGet Gallery | Microsoft.Web.WebView2 1.0.705.50

    1
    nuget install Microsoft.Web.WebView2

    提取 WebView2Loader.dll,可利用 everything 搜索,一般在 C:\Windows\System32\Microsoft.Web.WebView2.1.0.705.50\build\x64\ 下,everything 可能会搜索到其他几个 x64 目录下也有 WebView2Loader.dll,应该都是同一个文件。pcap2socks 自带的 WebView2Loader.dll 应该包含了几个平台的依赖,大小 400 多 k,我们提取的 x64 版只有 133k。(这年头不会还有用 x86 的吧?用 x86 寨板跑加速?)

    然后把提取到的文件覆盖进 pcap2socks 目录内就行。

    (21.4.2 更新) netch 已于上个月加入 pcapsocks 功能。我试了一下,好用。除了代理地址定义起来没有原版 pcap2socks 简单,以及界面不够好看,应该没啥缺点。