hyper-v虚拟LEDE旁路由实现科学上网

事情的起因如此的简单,就是突然发现油管上给我推荐的视频都在讲软路由,点开看看。。。内容很基础,无感,但其中一个提到用旧电脑做了个旁路由,通过修改其他设备的网关来实现科学上网的,一下点燃了我的热情!

是的,最近沉迷喷射2无法自拔,9102年了,中国移动连接Nintendo是每况愈下,基本已经放弃治疗了。之前发现路由器版的UU加速器效果还行,最重要的是免费啊,嘿嘿,就用了一个月,但据说马上要收费了,本来要买的,但是测了下,发现高峰时候还是速度慢丢包啥的,实在不值,况且手里还有那么多vps闲置(此处一坑,后详解)。要是路由里自己科学上网,启用游戏模式,则会影响pt下载,太麻烦,旁路由就是完美的解决方案啊!

老家是有能装lede的路由器,但不在手边,等家里人找到寄过来猴年马月了。。。然后就突然看到一个词“hyper-v”,很久以前就想试试这个win10自带的虚拟机啦,正好,一起来一波吧!

文献综述

嗯,你没有看错,我真的觉得应该叫文献综述。。。比以前混学术下的辛苦都大啊。。。果然需求才是第一驱动力啊。

网络中关于hyper-v装lede的文章真的是不要太多,也有踩坑分享的,有另辟蹊径的,当然也有互相抄来抄去的。。。突然发现,互联网时代,抄袭最大的问题可能都不是不尊重版权,而是浪!费!时!间!真的等同杀人。

安装lede

大部分文章安装的lede,是真的要把这个虚拟路由作为拨号路由来用的,但我不是。这类文章,一般都是给lede虚拟机分配两个虚拟网卡,一个“外网”类型的做wan口,一个内网类型的来联通宿主机。主要有三篇:

这两篇讲的都是一个事儿

这一篇解决方案差不多,区别是使用了hyper-v的第二代虚拟化,所以虚拟盘使用的gpt-uefi的,记得要去掉安全启动,否则启动不了的,据说可以提升性能。另外本篇中提到的对宿主机虚拟网卡和lede-ui中设置ip,利用30s回滚的机会进行设置的方法,有一定的实践价值。

划重点,这里我踩的坑你们估计想不到。。第一次启动虚拟后,死活找不到网卡,ifconfig返回为空,/etc/config/netwrok就没有这个文件,真的是一头雾水。。最后发现,是我下载的固件出了问题!眼瞎!!那么大的汉字“虚拟盘和转盘专用”。。。

理解虚拟机与宿主机的网络结构

然后就是实践本人想法的时候了,所有的文章都是一个类型,但不是我想要的,我希望虚拟机和宿主机在同一个网段下,就像真实的接入了一个旁路由,旁路由的lan口插在主路由的lan口,然后修改旁路由ip避免冲突,但与其他设备在一个网段下方便修改网关,这样就可以单独修改switch的网关设置,实现switch用lede里的软件游戏模式科学上网,而不影响其他设备。(说到这里,我突然有个想法,科学上网软件里好像有个功能叫“访问控制”???我天,我是不是这两天都白干了。。。答案是,yes。。。我写到这里去试了下,结果。。。:cry:,还是继续写吧)

要实现这个,就需要研究一下虚拟机和宿主机的网络构成到底有哪几种:

  • 桥接
  • NAT
  • host-only

基本可以确认,分别对应hyper-v的:

  • 外部网络
  • 内部网络
  • 专用网络

就理解原理而言,写的最好的一篇文章是理解桥接bridge和dhcp,非常详细解释了区别以及交换机转发的原理,通过mac地址来决定该把信号发给一个网桥(一根网线)下的宿主还是虚拟机,从源头上给出思路,推荐有兴趣的都可以看看哈。

就实际操作上,其实更简单,我是按照Win10 Hyper-V 搭建虚拟机 桥接模式做的。我只用了随虚拟机建立的default vEthernet这个内网虚拟网卡和lan口网卡桥接就成了,并没有如文中最后所说给网桥一个ip地址。

这里要说的是如何控制宿主PC物理网卡的IP地址和虚拟机里LEDE的IP地址(我需要固定ip),因为桥接后,会出现一个网桥,而接入网桥的设备已经没有单独设置ip的选项了。我的办法是,在路由里用静态路由表确定宿主机的物理网卡ip地址,在虚拟机里修改/etc/config/network文件里lan口的地址来确定虚拟机的ip地址。例如:宿主机绑定为192.168.1.2,那么将虚拟机设置为192.168.1.4就可以在宿主机的浏览器访问1.4上的lede了,之后再设置虚拟路由的网关、dns什么的。

最重要的已经在刚才的一段里说完了。。。希望对看到的人有所帮助。

如何利用这个旁路由?

很简单,连接到192.168.1.x下的设备,选择手动ip设置,把网关设置为192.168.1.4,两个dns,我一般填虚拟机的ip和公网的dns,我猜两个公网dns应该也是可以的。 That‘s it.

一些补充

其他虚拟机”内部网络”连接外网的方式

启用物理网卡的网络共享给vEthernet,具体设置就是在物理网卡的属性界面-共享-勾选“允许其他网络用户使用此网络连接”-然后选择LEDE的那张默认虚拟卡即可。之后lede的虚拟网卡会自动设置为192.168.137.1。需要在虚拟机里把LEDE的lan口改为192.168.137.x,然后就可以访问137.x的LEDE了。共享时其实就是nat转发模式,192.168.137.1就是那个转发的路由器wan口。这个方法中,虚拟机无法更新系统或下载插件,显示“插件下载显示文件校验不一致,错误代码4”,后来发现,应该是dns的问题,给lan口那里添加了一个公网dns即可,我添加了114.114.114.114。

外部网络设置中“允许管理操作系统共享此网络适配器“的意义

以上实操教程,很多都提到了在什么时候勾选这个选项,什么时候去掉等等。在阅读是否勾选时win10的提示,以及数次尝试后,我觉得。勾选这个选项,应该是起到了与桥接相同的作用,至于是否能够在虚拟机内编辑设置文件将虚拟机置于宿主机的同一网段?还有待进一步测试。。。等哪天又犯贱了就去试试哈。

不勾这个选项,就是让虚拟机接管物理网卡,我没有照上边的例子试过,但宿主机应该是进入了虚拟路由的子网。

Win10下配置Hyper-V虚拟机通过NAT或桥接方式联网 一文也提到了这些问题,应该与我的想法印证了。

旁路由时关闭dhcp无所谓

如果像我这样设置虚拟旁路由,则dhcp关闭与否应该是无所谓的,因为根本不会用到旁路由下的子网。

准备个好点的酸酸乳。。。

全都设置好了,又折腾了一个多小时,手机、switch什么的改了网关为虚拟路由器的ip,就是不能上外网。。。真的是绝望了,什么鬼啊。。。准备放弃的时候,用买的机场的酸酸乳试了下。。。功成。。。

妈的,自己的线路能烂成这样,也是奇迹啊。。。当然有可能是因为自己的只做了ss,被干扰的太厉害了?

后来再次测试自己的服务器,还有连上了,速度很快,但switch的nat type竟然是D。。。呵呵了,一开始以为是v2ray构建ss的锅,后来发现不是这样滴。。。同样的建立的其他服务器有a有b的。唉真的古怪。但也就这样吧!

补充1石锤:用软件中心的v2ray的游戏模式,switch的nat全是D,所以,应该是它的锅吧。。

补充2:我的北京移动,感觉甚至能够干扰酸酸乳的http-simple了,本来为了减少延迟,没有用tls,然后玩儿喷射,5把掉了3把,换了tls的混淆,终于正常打了半小时,但。。。还是掉了一次,唉。

以上。

其他参考链接

  1. http://www.cnblogs.com/ayanmw/p/3264082.html
  2. http://www.cnblogs.com/elvis0123/articles/2006771.html
  3. http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646007.html
  4. http://www.cnblogs.com/zhourourou/p/5210477.html