whatshot在Linux中通过虚拟机使用Windows版网游加速器 [v1.0.3: 修复断网Bug]

@Ta 2020-09-17发布,02-06 17:56修改 5682点击

演示视频

视频链接

更新说明

[v0.1.3]

  • 修复了v1.0.2使用一段时间后会断网的问题,该问题是3proxy的DNS代理功能存在Bug导致的,只要触发,就会不断循环显示解析同一个域名,并且无法再联网。目前的解决方案是由Linux侧直接发起DNS请求,不再使用3proxy的DNS代理功能。
  • 增加了并发连接数,以前最多只能有100个连接,现在增加到16万个。
  • 启用加速时自动禁用Linux的IPv6功能,以防游戏走IPv6流量,加速不生效。
  • Linux侧对配置文件的修改会自动同步到Windows虚拟机,不再需要进入Windows虚拟机修改3proxy配置文件。

升级方法

如果你已经安装过旧版本,不必下载完整包,你可以下载该升级包,解压覆盖之前的安装即可。

https://file.winegame.net/jiasuqi/jiasuqi-upgrade-to-v0.1.3.tar.xz (注意,如果你是第一次安装,别下载这个,应该下载下面那个。从旧版本升级才下载这个。)

命令行操作方法:

cd ~

aria2c -x5 -s5 https://file.winegame.net/jiasuqi/jiasuqi-upgrade-to-v0.1.3.tar.xz

tar -vxf jiasuqi-upgrade-to-v0.1.3.tar.xz

# 注意,如果你是首次安装,不应该使用这里这些命令,应该使用下面的命令。从旧版本升级才用这些命令。

安装方法

1. 安装依赖包

UOS/Deepin/Debian:

sudo apt install qemu-system virt-viewer zenity ipset iptables iproute2 openssh-client aria2

2. 下载并解压压缩包

下载并解压 https://file.winegame.net/jiasuqi/jiasuqi-v0.1.3.tar.xz

推荐通过命令行下载并解压:

cd ~

aria2c -x5 -s5 https://file.winegame.net/jiasuqi/jiasuqi-v0.1.3.tar.xz

tar -vxf jiasuqi-v0.1.3.tar.xz

会解压到你当前用户的主目录(/home/用户名)里。

3. 启动加速器

进入解压出来的jiasuqi文件夹(在主目录),双击“启动加速器.sh”,选择“在终端中运行”,然后按提示操作(参考上面的视频)。

注意

  1. 刚开始弹出的exe选择框,选择的是要加速的游戏,不是要安装的加速器。你可以在虚拟机内下载、安装加速器,不需要在Linux里下载。

  2. 虚拟机打开后,如果不在里面运行“启动代理.bat”,Linux就无法联网。注意,“启动代理.bat”打开的黑色窗口必须一直开着,关掉它相当于关掉代理,Linux会立即断网!此外,如果用完代理后想恢复Linux正常联网,请给虚拟机关机

  3. 如果虚拟机无法打开,终端上出现以下错误:

    qemu-system-x86_64: failed to initialize KVM: No such file or directory

    需要在BIOS中打开虚拟化支持,Intel叫做VT-x,AMD叫做SVM或者AMD-v。也有的BIOS直接叫做"Virtualization Technology"(VT)。

    开启方法可参考以下教程:https://blog.csdn.net/weixin_44210782/article/details/104661303

已测试的加速器

  • 迅游:模式2、3、4可用。建议使用模式3(虚拟网卡路由模式),兼容性更好。模式2、4有些游戏不能被加速。
  • UU:模式3(虚拟网卡路由模式)可用,游戏可被加速。其他模式似乎无效,虽然能启动,但是游戏不会被加速。

其他加速器未测试,欢迎补充。

已测试的游戏

  • 《魔兽世界》:与迅游模式4兼容,游戏程序需要选择“_retail_”里的“Wow.exe”(正式服)或者“_classic_”里的“WowClassic.exe”(怀旧服)。
  • 《守望先锋》:与迅游模式4兼容,游戏程序需要选择“_retail_”里的“Overwatch.exe”,不是外面的“Overwatch Launcher.exe”。
  • 《英雄联盟》国际服:与迅游模式4兼容,游戏程序需要选择“league-of-legends/drive_c/Riot Games/League of Legends”文件夹里的“LeagueClient.exe”。注意:v1.0.3之前的版本有Bug,无法加速LOL国际服,请升级到v1.0.3后使用。

细节

加速器使用了114 DNS,在jiasuqi/linux/jiasuqi.conf中指定。如果效果不好,你可以换成其他DNS。注意,为了让DNS解析请求被代理,请不要使用内网IP作为DNS(比如192.168.1.1),否则DNS查询流量不会经过加速器,加速可能不会生效。

图片.png

此外,jiasuqi/linux/jiasuqi.conf中指定的DNS只用于Linux侧,Windows侧的DNS是由Windows自己管理的,你可以在网络适配器IPv4属性中修改(教程)。

限制

  1. 只能转发TCP和UDP流量,不能转发ICMP流量,所以如果你手动执行ping命令进行延迟或者可达性测试,结果不会有变化。
  2. 不支持IPv6,IPv6流量不会被转发。如果游戏支持IPv6,为了让加速生效,加速器会暂时关闭Linux中的IPv6功能(重启后可恢复)。
  3. 某些加速器的某些模式(比如UU加速器的模式4)不转发代理的流量,所以加速不会生效,就算我们已经自动把代理程序的文件名改为和游戏同名,也没用。

原理

  1. 在Windows上用3proxy创建socks代理(支持TCP/UDP)和DNS代理。
  2. 为了让加速器对3proxy生效,启动时会把3proxy.exe重命名为游戏的文件名(实际用的是硬连接,相当于复制,但是不额外占用空间)。比如加速魔兽世界时会改为“Wow.exe”(这就是要你选择“要加速的游戏程序”的原因)。这样当在Windows虚拟机里启动“Wow.exe”(实际是“3proxy”)时,加速器就会以为这就是魔兽世界,就会代理它的流量。
  3. Linux通过源于ss-tproxy的脚本和静态编译的二进制ipt2socks,实现把Linux主动发起的所有TCP/UDP连接全部转发到虚拟机内的3proxy socks代理。此时,对于加速器想转发的流量,加速器就可以转发到自己服务器。对于加速器不转发的流量,就通过虚拟机网络直接发出去。
  4. 修改/etc/resolv.conf,DNS改为虚拟机IP,这样就可以应用加速器修改后的域名解析结果。DNS服务也由3proxy提供。
  5. Linux侧通过SSH与Windows侧通信。在Windows里运行了微软发布的SSH服务器(https://github.com/powershell/win32-openssh)。
  6. Windows侧的文件放在“C:\Tools”文件夹里,与Linux里的windows-x86文件夹内容相同。其中的OpenSSH进行了安装,放置了Linux侧的公钥并修复了权限。
  7. 采用了CPRA_X86FRE_ZH-CN_DREY.iso这个精简版Win10镜像。用32位是因为64位安装后镜像太大,占用的内存也更多。
  8. 压缩包内的vm-cli.sh里有虚拟机启动命令,可以在里面改内存和核数。默认是2GB内存(-m 2G)和2核(-smp 2,sockets=1,cores=2,threads=1,这四个数字分别是当前分配插槽核心线程。目前的数字代表:只有1个CPU插槽sockets=1,插槽里的CPU有2个核心cores=2,每个核心1线程threads=1,也就是不支持超线程,然后把这个CPU中的2核全部分配给虚拟机-smp 2,你可以根据你的CPU实际情况进行调整)。
  9. 顺便一提,之所以要手动双击桌面上的“启动代理.bat”,不通过SSH由Linux侧自动启动,是因为我发现自动启动时加速器的非虚拟网卡模式(就是除了模式3之外的)都不会生效。但是如果手动启动,迅游的模式4就可以生效。

版本库

版本库(不含Windows虚拟机镜像):
https://gitee.com/winegame/tproxy-jiasuqi

回复列表(20)
  • @Ta / 2020-09-17

    沙发
    米婊http://ovo.gs精品域名出售

  • @Ta / 2020-09-18
    健健康康 一加8Pro 青
  • @Ta / 2020-09-18
    为啥你的这么流畅的,我测试开几个程序都卡卡的。
  • @Ta / 2020-09-18
    http://www.1kmb.com
  • @Ta / 2020-09-18

    @大尨,你用我的包测试的吗?我就分配了2核2G,只是为了开个加速器。你要多开程序,那打开vm-cli.sh把核数和内存都加一加(看帖子的原理8)。

    如果你是自己安装的虚拟机,有个地方要注意,就是这个CPU拓扑:

    图片.png

    如果你的虚拟机支持手动设置,一定要手动设置。我的设置代表1个CPU插槽(套接字socket的误译,在这里应该是插槽),8核,16线程。如果你分配16核,这个虚拟机的默认设置是虚拟为16个单独的单核CPU(在Windows上会看到“插槽 16”)!!!这就非常离谱了,有时候性能会比只分配1核还差,因为在多个独立CPU之间进行同步,性能开销太大了。

    顺便一提,vm-cli.sh里的-smp 2,sockets=1,cores=2,threads=1,就是指上面的当前分配插槽核心线程。如果要改成和图中一样的,就是-smp 16,sockets=1,cores=8,threads=2。我默认没设threads=2,是为了防止在不支持超线程的CPU上启动失败。

    此外我用的CPRA_X86FRE_ZH-CN_DREY.iso这个精简版Win10镜像真的非常小,几乎没有任何多余的东西,适合虚拟机使用。而且我特地选了32位版,因为64位版大一倍(不仅硬盘,内存占用也翻倍)。

  • @Ta / 2020-09-18

    @大尨,如果你指的是你的Linux很卡,那么你可能只是没有安装显卡驱动。

    请在这里安装显卡驱动:
    https://hu60.cn/q.php/bbs.topic.94828.html

    顺便一提,你的问题描述的如此不清楚,除了上述三种可能(用我的包很卡,自己安装的Windows虚拟机很卡,自己安装的Linux很卡),还有无数种可能。所以,详细准确的描述问题,让读者看了只能想到一种解释,才能更快的解决问题。

  • @Ta / 2020-09-18
    @老虎会游泳,噢,确实有点摸不着头脑了,我的是装的系统卡。我就装个 lnmp。然后随便打开浏览器逛逛网页啥的,半夜看到你这个帖子打开你的视频看,卡了我半个钟。。至于显卡我装系统的时候已经勾选那个闭源驱动了。
  • @Ta / 2020-09-18
    @老虎会游泳
     我把UOS 跟 deepin都装起来测试一遍。发现装完系统之后 UOS 比deepin卡太多了。然后 deepin 内核 5.7 比 5.4 流畅一
    点。
    这是我的机器信息。我什么知道我的显卡驱动是否安装了还是没安装的?
    截图录屏_选择区域_20200918182927.png

    不过在啥事也不做的情况下 系统到还流畅。得有时间安装游戏撸几下才行。
  • @Ta / 2020-09-18

    @大尨,勾选那个闭源驱动有时候没有效果,要用我帖子里给出的方法2安装。

    https://hu60.cn/q.php/bbs.topic.94828.html

  • @Ta / 2020-09-18

    @大尨,这个信息页不能显示显卡驱动正不正常。

  • @Ta / 2020-09-18
    @老虎会游泳 有办法看出显卡驱动正不正常吗
  • @Ta / 2020-09-19
    @老虎会游泳,你这是Linux????看着像温呀。好漂亮。有某有镜像我也想装了
  • @Ta / 2020-09-19

    @艾木友尔尔巴,开启root权限和安装显卡驱动的教程:
    https://hu60.cn/q.php/bbs.topic.94828.html

  • @Ta / 2020-09-19
    @老虎会游泳,deepin 本身就是 开发者模式了吧??
  • @Ta / 2020-09-19

    @大尨,是的

  • @Ta / 2020-09-21
    所以有不启动虚拟机手动填写局域网 ip 的 linux 端版本吗?因为这里有一个极端请求就是,局域网虚拟机(
    @老虎会游泳
  • @Ta / 2020-09-22

    是可以的,你把vm-cli.sh里面的qemu和remote-viewer命令删掉,然后去linux/jiasuqi.conf里面修改虚拟机IP就可以了。

    如果你用自己安装的Windows系统,要把windows-x86/x64文件夹里面的内容放到C:\Tools里,然后安装里面的OpenSSH(或者你自己从系统的添加删除功能里面装),再把linux文件夹里面的id_rsa.pub加到SSH信任证书里面。

    当然还要配置好防火墙,允许linux连接Windows的22和1080端口。


    OpenSSH安装时要运行 install-sshd.ps1 和 FixHostFilePermissions.ps1
    此外,证书可能要放在 %ProgramData%\ssh\administrators_authorized_keys 才会生效。

    OpenSSH我是从这里下载的:https://github.com/powershell/win32-openssh

    我的OpenSSH里的 FixHostFilePermissions.ps1 修改过,可以给 %ProgramData%\ssh\administrators_authorized_keys 修复权限。
    权限没修复,不会生效。

    重启SSH服务的方法:
    net stop sshd
    net start sshd

添加新回复
回复需要登录

[聊天-此处没有老虎] 方爷:小尾巴华为Mate40 Pro鸡佬版