上篇文章(搭建透明代理加速 Splatoon2 游戏手记)中,关于部署方式我提到,由于无线网卡的不兼容,开虚拟机的宿主机必须以有线方式接入路由设备。

我当时选择的是把宿主机笔记本直接放在客厅路由器旁边当服务器用。现在看来这种操作太粗鲁了。因此这里介绍一种更优雅的部署方式。

1. 电力猫

首先我把电脑搬回了卧室,然后试图使用电力猫来有线连接到客厅的路由器。
我以前使用的是下面这个腾达的千兆电力猫:

Switch%20游戏加速透明代理的改进部署_2018-11-26-13-15-21.png

这玩意儿是一对,一个用网线插到路由器上,再插到路由器旁边的插座里。另一个在电脑旁边找个插座,用网线连上电脑就行了。利用电力线传输数据。

我之前刚安装的时候,它速度很快,测速在 400Mbps 以上,考虑到衰减和干扰这个速度是可以接受的。

但过了一段时间之后它的速度下降的很厉害,最高只有 50Mbps 上下,还不到我宽带的出口速度,已经开始拖慢我的网速了。原因可能是房间供电线路老化之类的吧。我懒得追究了,当时就购入了外置无线网卡解决速度问题。电力猫闲置下来后就送给家里信号不好的同事了。

鉴于上次的经历不是很愉快,这次我又换了个牌子,重新买了一对水星的千兆电力猫:

Switch%20游戏加速透明代理的改进部署_2018-11-26-13-15-36.png

结果还是一样,刚插上去好好的,速度很快。不一会儿速度就掉了下来,并且大量丢包,玩游戏很难受。

那没办法了,还是得考虑有线方案。

2. 增加辅助路由

说是有线,其实只要保证 VirtualBox 给虚拟机桥接的那个网卡是有线网卡就行了。上公网不一定非要走有线。

事到如今,我也没法坚持不加新设备了。最优雅的方式其实还是用 OpenWRT 系统的路由器重新部署一套,一次部署到处使用。但我懒得重新刷 OpenWRT 的系统,想只用一个普通路由解决问题。

所以我又找了个小路由器,把宿主机有线插入 LAN,并把有线网卡桥接到虚拟机,虚拟机另外添加一张 NAT 网卡用于共享主机的网络连接。其他需要透明代理的设备直接无线接入小路由器。

拓扑图大概是下面这个样子。宿主机双网卡,无线接主路由,有线接辅助路由。虚拟机双网卡,一张 NAT 上公网,一张桥接辅助路由当透明代理网关。

Switch%20游戏加速透明代理的改进部署_2018-11-26-13-15-57.png

此时因为宿主机和虚拟机都双网卡了,需要设置一下路由表。

Windows 的路由表比较奇怪,我起初是通过增加有线网卡的跃点数 metric ,试图降低有线网卡(接辅助路由,无公网访问)的优先级,但修改后可以连通外网,DNS 却始终优先使用有线网卡获得的 192.168.2.2 的 DNS 地址,无法解析。我试图手动改路由表,折腾半天也没让它优先走无线网卡的 DNS。但直接 ping 公网 IP 地址确实是通的。

后来换了个思路,降低无线网卡的跃点数。如图,设置成1之后就 OK 了,Windows 的 DNS 策略真的很谜。

Switch%20游戏加速透明代理的改进部署_2018-11-26-13-16-13.png

设置好之后路由表如下,都是系统自动生成的。

Switch%20游戏加速透明代理的改进部署_2018-11-26-13-16-22.png

实际上宿主机实际上是三网卡的,两个无线一个有线。起初我尝试用另外一张无线网卡作为 AP 模式发射热点,取代辅助路由的功能,后来发现在 Windows 上配置这个太麻烦了就放弃了。

然后要设置一下虚拟机的 Ubuntu 系统的路由表。

Switch%20游戏加速透明代理的改进部署_2018-11-26-13-16-35.png

可以看到虚拟机有两块网卡,enp0s3 是 NAT 连接到主机的网卡,IP 设成自动获取就可以。

enp0s8 是桥接了有线网卡,接入辅助路由的。手动指定其 IP 地址为 192.168.2.2。

此时路由表的主出口不一定是 NAT 那个网卡,导致公网不通。我们删掉默认的出口路由,手动指定出口为 enp0s3 即可。命令如下:

Switch%20游戏加速透明代理的改进部署_2018-11-26-13-16-48.png

需要使用 sudo 执行。执行过后虚拟机的路由表如下:

Switch%20游戏加速透明代理的改进部署_2018-11-26-13-16-55.png

很简洁,此时我们可以正常上公网了。

之后把 Switch 接入辅助路由的无线网,手动设置网关为 192.168.2.2,MTU 稍微改小到 1390。参照上篇文章的内容,Switch 应该已经通过代理上网了。测速结果非常可观,没有瓶颈。

Switch%20游戏加速透明代理的改进部署_2018-11-26-13-17-04.png

好了,很开心。进行收尾工作,把手动设置路由的两句话加到 linux 的自启动里,尝试重启主机和虚拟机几次,都可以自动初始化完成。

非常优雅。收工。