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地址。 此种方法实现的桥接尽在当时有效,一旦重启则default vEthernet会再次被分配一个内网地址,需要按照NAT的方式对LEDE的网卡进行设置才能上网。理论上讲我猜,记录好重启前的网卡状态,通过对网卡的相应设置应该还是可以实现桥接吧?但是,折腾也要有个限度吧XD,老老实实的在桥接和NAT中选一个就好了。。。

两种模式的区别一句话:桥接的网络下,物理机所在网络中的其他主机可以访问虚拟机;NAT的网络下,只有宿主机能访问虚拟机(有教程说可以通过Powershell设置转发来实现,但是。。。何必呢。。。)。

哈哈,就酱了。。

这里要说的是,桥接模式下如何控制宿主PC物理网卡的IP地址和虚拟机里LEDE的IP地址(我需要固定ip),因为桥接后,会出现一个网桥,而接入网桥的设备物理网卡已经没有单独设置ip的选项了。我的办法是,在路由里用静态路由表确定宿主机的修改网桥的ipv4设置来确定物理网卡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.

关于 N1 旁路由的设置文章写的很清晰,大家可以参考。

一些补充

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

启用物理网卡的网络共享给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关闭与否应该是无所谓的,因为根本不会用到旁路由下的子网。

还是要关闭hyper-v下的dhcp的,尤其是子网不一致的时候,防止在内网抢答,新接入的设备可能被分配到不同的子网,导致断网,最近发生了惨案,用了好久搞明白原来这里出了问题。

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

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

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

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

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

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

桥接、ip动态伪装、防火墙设置-2022.11.30

研究这事这么久了,来个了断?

1.是否需要桥接?

交换机:工作在数据链路层,原理等同于多端口网桥。 作用是连接数个相同网段的不同主机,减少网内冲突,隔离冲突域。 利用存储转发和过滤技术来从物理上分割网段

在接口页面-物理设置中,不勾选桥接时,接口为圆点,只能单选;勾选桥接时,可以多选。

可以把,桥接,想象成没有管理系统的傻瓜交换机,桥接一个物理端口,就是在傻瓜路由器拉出一条线连接那个物理端口,每个网口的状态,由桥接的上游决定。比如,从路由接出来的交换机,接到交换机上的设备分配的ip来自路由器的dhcp,交换机相当于给路由器多加了几个网口插孔。当这个网桥在LAN域之下,那么与之桥接的物理端口也就都是lan口了。

这个文章有一些关于桥接的讨论,摘录部分如下:

现在有2个疑问
1,笔记本刷的op固件作旁路由,很多人说旁路由要取消lan的桥接接口选项,实际使用的时候,取不取消没感觉到有啥影响,都能正常上网和扶手工竹梯子.
2,极路由3刷的openwrt固件, 只要一取消lan的桥接接口选项(默认的是eth0和无线网卡被勾上了),这个硬路由通过网线连lan口的方式马上就不能登录了, 这时候只能重置路由器了

这个桥接应该是用于多网口的的软路由,比如8口软路由,一个wan口,另外7个桥接成lan口,我是这样理解的

同意,就是开启桥接后,单选变成多选,多个网卡复用一个逻辑链路,把多个网卡数据流汇合到一起作为LAN处理,取消过后就只能单选,只能用一个网卡作为LAN接出口,那么一个LAN口作为接出,一进一出,局域网LAN交换数据

PENWRT基于LINUX,来源于电脑系统。LAN和WAN是指不同的防火墙分区(就像WINDOWS链接一个网络后让你选是连接到什么网络一个意思,但LINUX的防火墙分区概念原早于WIN)。而防火墙分区和物理网口既有关系又有很大的区别。一个物理网口可以通过VLAN划分绑定不同的防火墙分区,一个防火墙分区可以绑定多个物理网口。在路由系统里会针对不同的防火墙分区有不同的规则,而你还可以把LAN同时当做一个虚拟网卡来进行IP地址设置以及其他管理。

OPENWRT默认物理网口绑定到LAN区域(也就是桥接),而LAN区域默认拥有路由远程管理权限。但在单臂路由时,由于一个物理网口同时要收发WAN区域流量和LAN区域流量,所以物理网口(eth0)需要取消桥接LAN。在eth0取消桥接LAN后,由于LAN区域已经不再有实际物理网口绑定,原虚拟网卡LAN的地址自动赋值给物理网口eth0,所以并不妨碍我们远程管理路由。但硬路由LAN桥接的eth0网卡有四个子接口(eth0.1-eth0.4),在取消桥接LAN后系统无法给4个子网卡自动设置IP,网卡没有设置IP,所以我们就不能远程管理路由了

旁路由其实并不是传统意义上的路由,可以看做传统意义的V-P:N服务器,他只是作为一个服务器存在,所以他的防火墙区域主要是LAN和Vp?n,而V-P/N区域都是基于软件的,接口都是虚拟的,所以一般不会和LAN区域所桥接的接口有什么冲突。

在不桥接LAN接口的情况下,所有的数据包都需要通过程序判断识别为是LAN还是WAN数据包,然后再进一步处理,这会一定程度加重CPU负担,所以可能会有卡顿现象(CPU性能越弱就越明显)。而使用VLAN标识后可以很好解决这种现象,让网络拓扑更清晰,这也是单臂路由推荐的方式,只是需要管理型交换机才能完成。

视频UP主大多也只是知其然
不知道您明白了没有,桥接最简单的理解就是把选中的物理接口(其实也包括系统的虚拟接口)看作是一个接口,也就是看作是openwrt这里添加的接口,通常会被叫做lan口
换句话说假如您有4个网口,第一个作为wan口,后面三个桥接作为lan口,您的PC插后面三个哪个都是一样的,假如您的设备可以开WIFI热点,那么WIFI热点也可以被认为是一个物理接口与其他三个口桥接到lan中,那么连接了WIFI的设备也如同网线直接接到lan上一样,他们可能会被分配同一网段的ip、同样的网关、dns和掩码等等
之所以您单网口旁路由桥接与否都可以使用想必您到这里也明白了吧,也就是一个网口桥接不桥接也没有变化,一个网口看作一个网口还是一个网口哈哈哈哈哈
但是需要注意的是单臂路由中一个网口桥接与否可能是有一定区别的,具体可以了解一下单臂路由的原理

我的理解是桥接的意思是,比如在lan口上,打勾的的那些口互相之间可以通。按道理就算不是单臂路由,在不用vlan的情况下,就算不桥接,电脑直接连上去应该也能进后台。楼主进不了应该就是vlan交换机的设置,导致进后台只能从eth0.1进,如果只勾eth0当然就进不了后台,因为不桥接的话它和eth0.1不通,如果只勾选eth0.1不桥接应该也能进后台

说一下我对桥接模式的理解;
理论上,桥接就是二层交换机.设为桥接,就是说虚拟出来一个交换机,把这个网口挂上去. 所以设置成桥接后,可选多个网口,这样相当与在内部,多个网口直连到同一个交换机上.
取消桥接后,每个接口都可以理解成一个三层口,你只有直连这个三层口,配上ip才能访问. 其他口都是相互独立的.所以连不上了.

但是为何做旁路由都在强调取消桥接呢? 有的人说不取消也没事.有的人却强调取消. 我也是实验中发现一个其中的原因.

先说结论: 这里的桥接和普通意义交换机有不同.因为它会arp劫持. 劫持非桥接网段的其他网段ip. 你要细品.再细品,不信就试试看.
举个例子:
家用互联网.一般不做vlan划分,如果同一个网络中使用两个不同网段ip. 比如上网的是192.168.1.0/24 家里的监控不联网,摄像头硬盘录像机使用192.168.2.0/24.
肯定有人说为啥不单独走线,两个网段在同一个网络中,ip广播怎么办.这些都不是一般用户考虑的事情.本身设备也不多呀. 但是当挂上openwrt后.故事就这样开始了.
openwrt lan口开桥接模式.ip 192.168.1.2/24 ,然后并到主网络中. 好吗,你会发现摄像头登录不上了. 不信邪.尝试改本机的ip为192.168.2.0/24 直连摄像头.可提示ip冲突. (winxp 会无法设置ip,ip会空. win7以上系统可以设置.单会提示ip冲突. )换个ip同样如此.
去openwrt看一下,发现arp出现了问题. 电脑设置的ip地址会备绑定在一个随机的mac上.所以才会提示ip冲突. 我只好把它理解成arp劫持. 它的网桥就是默认开启了这个功能.
如果网络中只有这一个网段,我所谓.但是要有其他网段.必须要关闭桥接模式.

无法判断那个下边说的劫持是否为真,不过我有遇到过虚拟机里的openwrt没有关dhcp,还是一个不同的网段(192.168.0.x),会在内网中抢答给新接入的设备分配到非192.168.1.x的地址,导致不能工作。

结论:单口的路由,虚拟旁路有,关闭与否没关系。但,不过点一下的事么,解除绑定吧。

2.是否需要开启ip动态伪装或者防火墙规则设置?

不开启的主要表现是,可以上外网,但不能上内网。

有的帖子讨论中指出,不同的翻墙软件有可能导致不同的结果。比如openclash不需要,但ssrplus和passwall(我的常用)需要。

另外,还有说不同的主路由也可能影响是否需要开启。

一些有用的讨论摘录如下:

因为旁路由处理过后,ip变了,一个mac对应两个ip

别纠结了,不需要科学的设备直接通过主路由,需要科学的话,伪装不伪装的都一样。这个伪装有的说需要有的说不需要应该和主路由有关,我的旁路由只要设置好lan的网关和dns就可以了其它不用设置

开不开动态伪装,和使用那种代理工具也有关系

我主路由是TP-LINK的,负责dhcp,dns默认不填。
旁路由使用OpenClash的话,旁路由的dns不填,也不用打开动态伪装,国内外一切正常。
旁路由使用s-s-r p+的话,要开动态伪装,且旁路由要设dns(可以公共也可以是主路由的),不然外国可以上网,国内无法上网。

我的结论就是:不仅要看使用什么品牌的主路由,而且还要看使用什么代理工具,使用OpenClash不用开动态伪装,其他代理工具估计都有要开,至少s-s-r p+需要开,其他代理工具我没测,估计要开吧

这个我也不知道,反正是我在使用过程中偶然发现小猫咪可以不用开动态伪装的。。。
可能小猫咪拿到更高权限吧,比如dns劫持(所以旁路由和主路由都不用另外设置dns)和包括类似动态伪装之类的权限吧

反正小猫咪也好用,规则细致,切换节点和规则也很方便,所以不开动态伪装这个问题算是间接的解决了。。

还有个文章讨论了ip动态伪装与mss钳制:

ip动态伪装的英文是masq,即MASQUERADE,所以就是WAN口的nat设置。

这句话很有意思,当局域网的其他设备把网关改为openwrt的ip时,相当于接入了这个lan网桥,还是个没有开启nat的网桥,所以没有办法做地址转换实现联通。

另一个想法是,其他设备实际上与这个oepnwrt在一个子网的,不开启的时候,即使网关改为openwrt,地址转化还是受到主路由的影响,所以会有奇怪的不通现象吧。

结论:还是要开的。。。

防火墙规则-2022.11.29

方法一(推荐):

接口:删除vpn,wan等接口,只保留lan,当然如果装了docker,那个端口也是需要的

防火墙:不用管了,自己会变成lan=>accept

方法二:

接口:lan口取消桥接 据说不取消会导致局域网广播影响性能,ref-7

防火墙中设置:lan =》wan/vpn 开启IP动态伪装

这种方法应该是与网络防火墙的那个自定义规则是等效的。

防火墙规则2021.6.9

最近手贱,想直接升级,又搞了一次hyper-v

最终是去掉桥接的同时iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE 起了作用,可以访问国内了。可能与我本次没有删除多余的wan口有关

就利用softehter组建内部局域网有了一些心得,另文讨论吧。

只启用虚拟dhcp的尝试,出口ip的设置,ip区间的设置。

防火墙规则2020.11.5

不知道从什么时候起,旁路由需要添加防火墙规则了,否则要么不能用,要不只能用外网。具体措施两种:

方法一:

如果用这个固件做旁路由的话不要忘了加自定义防火墙规则(网络->防火墙->自定义规则):
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
也可以尝试(有桥接存在的情况下)
iptables -t nat -I POSTROUTING -o br-lan -j MASQUERADE

方法二:

到网络-防火墙-自定义规则添加iptables -t nat -I POSTROUTING -j MASQUERADE这一句后重启防火墙
网络-接口-LAN-修改-物理设置-桥接接口不勾选。

原理解释?:

1 、加上那那条 就是做旁路由+nat转换,如果这台N1再做fq的话,N1的负载会增大,至于NAT与fq会不会有影响就不清楚。
2、不加上那条 N1就是旁路由,不做nat,做纯ip路由转发,路径是出去访问的包会经过N1-出口路由器,回包是直接原路由器转发过来,不经过N1的,对于fq的路径是是没有影响的。fq出去的数据包源ip是N1的eth0的地址,回包也是回到N1,解密后在转发出来到客户端。

以上。。。

参考链接

  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
  5. https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=3354745&page=1
  6. https://koolshare.cn/forum.php?mod=redirect&goto=findpost&ptid=166096&pid=2114362
  7. https://youtu.be/jXMgAz_GQxI?list=RDCMUCOhkliOps3IS48ly-MgPC2A&t=1741
  8. lan物理设置中的桥接接口到底怎么用-软路由,x86系统,openwrt(x86),Router OS 等-恩山无线论坛 (right.com.cn)
  9. openwrt旁路由该如何设置?(动态伪装相关)-OPENWRT专版-恩山无线论坛 (right.com.cn)
  10. [OpenWrt Wiki] Linux 网络接口(Network Interfaces)
  11. Openwrt 接口及基本设置 | Verne in GitHub (einverne.github.io)
  12. openwrt避坑指南1:IP动态伪装和MSS钳制 - 简书 (jianshu.com)