Chiphell - 分享与交流用户体验

 找回密码
 加入我们
搜索
      
查看: 17808|回复: 40

[网络] Hyper-V安装Open-WRT的问题

[复制链接]
发表于 2015-8-13 17:17 | 显示全部楼层 |阅读模式
有人在Hyper-V上安装过Open-WRT吗?我在2012 R2上的Hyper-V上安装Open-WRT,网卡只能用LEGACY的网卡,网卡驱动用的kmod-tulip,发现局域网传输只有1M的样子,有人遇到过类似问题吗?
发表于 2015-8-13 17:34 | 显示全部楼层
我用的是Windows 2008 R2的Hyper-V,不过跟windows的版本没有关系。
主要是我自己编译的OpenWRT,最新的trunk有点问题,但是也能用,而且还集成了ss。
Chaos Calmer RC3非常的正常,编译时要注意以下几点:
  • 修改config/Config-images.in,以生成vhd镜像,不过生成了也没用,因为格式太老。需要用qemu自己转换成vhd才行;
  • 修改package/kernel/linux/modules/virtual.mk,以增加Hyper-V支持;
  • 修改target/linux/x86/config-3.18,开启linux内核对Hyper-V的支持;
  • 修改target/linux/x86/image/Makefile;
  • 在make menuconfig中的Virtualization Support中选中kmod-hyperv-net-vsc和kmod-hyperv-storage。
  • 在Kernel modules->Network Devices取消对所有网卡的选中。
这样编译出来的openwrt完美支持标准的Hyper-V虚拟网卡,性能千兆无压力。
我的网卡是HP NC382T。

发表于 2015-8-13 18:06 | 显示全部楼层
tedaz 发表于 2015-8-13 17:34
我用的是Windows 2008 R2的Hyper-V,不过跟windows的版本没有关系。
主要是我自己编译的OpenWRT,最新的tru ...

这个厉害, 我那个时候编译的版本是 极路由, 还有一个是  树莓派。。。

先留着备用。。

PS。其实 Openwrt 在PC好像没多少有点, 那些插件不重新编译的话也无法应用。
发表于 2015-8-13 21:17 | 显示全部楼层
tedaz 发表于 2015-8-13 17:34
我用的是Windows 2008 R2的Hyper-V,不过跟windows的版本没有关系。
主要是我自己编译的OpenWRT,最新的tru ...

nc328T 有什么正规的购买渠道么?
 楼主| 发表于 2015-8-13 22:23 | 显示全部楼层
tedaz 发表于 2015-8-13 17:34
我用的是Windows 2008 R2的Hyper-V,不过跟windows的版本没有关系。
主要是我自己编译的OpenWRT,最新的tru ...

NB,我按照你说的试试看
发表于 2015-8-14 09:01 | 显示全部楼层
gyc 发表于 2015-8-13 18:06
这个厉害, 我那个时候编译的版本是 极路由, 还有一个是  树莓派。。。

先留着备用。。

个人觉得Openwrt最理想的平台就是用在虚拟机上,这样的话,永远不用考虑“路由器”的兼容性问题,因为所谓兼容,也就是cpu、网卡之类的,而虚拟机完美的解决了这个问题。
发表于 2015-8-14 09:01 | 显示全部楼层
keykeen 发表于 2015-8-13 21:17
nc328T 有什么正规的购买渠道么?

洋垃圾就行,挺好用的。
发表于 2015-8-14 09:03 | 显示全部楼层
unrealwzg 发表于 2015-8-13 22:23
NB,我按照你说的试试看

有问题欢迎交流。
无论国内还是国外,几乎没有关于新版本Hyper-V Openwrt的信息,而且Openwrt的老外是有意封杀Hyper-V的,很多关于Hyper-V的提交都被莫名其妙的拒绝了。
不过好在现在的新版linux内核对Hyper-V的支持很好,特别是3.18。
之前的3.14有bug。
发表于 2015-8-14 11:14 | 显示全部楼层
tedaz 发表于 2015-8-14 09:03
有问题欢迎交流。
无论国内还是国外,几乎没有关于新版本Hyper-V Openwrt的信息,而且Openwrt的老外是有 ...

诶?封杀 虚机吗?

这是什么为什么呢?


感觉OP主要还是开源,包括很多插件,都是开源的。 可以自行编译。。

但OP主要目标可能不是PC,
另外 ,X86 下还有很多的开源、或者免费的 商业路由工具。
发表于 2015-8-14 11:52 | 显示全部楼层
gyc 发表于 2015-8-14 11:14
诶?封杀 虚机吗?

这是什么为什么呢?

不是封杀虚拟机,是封杀Hyper-V,因为这个是微软的技术。
openwrt原生完美支持的是VMware的Workstation和ESXi,对Xen的支持也是原生的。
其实,整个Linux阵营的开发者对微软都是封杀的态度,温和点的也是“不支持”。
发表于 2015-8-14 14:04 | 显示全部楼层
本帖最后由 tedaz 于 2015-8-14 14:06 编辑

附件中是我制作的OpenWRT Chaos Calmer RC3 15.05源代码的Hyper-V补丁,可以尝试应用。

用svn或者git迁出OpenWRT的CC版RC3源代码(这个版本已经够新了,内核为Linux 3.18,相当稳定);
然后应用补丁:
  1. git apply --verbose hyper-v_cc_rc3.patch
复制代码
编译时注意选中Kernel->Virtualization Support中的四个Hyper-V相关的模块;
Kernel modules->Network Devices取消选中所有网卡驱动,因为Hyper-V驱动已经通过补丁加载了。

编译之后用ubuntu之类的新版qemu工具转换镜像为vhd格式。OpenWRT编译生成的vhd镜像格式太久,Server 2008 R2无法识别。
转换命令如下:
  1. qemu-img convert -f raw ./bin/x86/openwrt-x86-generic-combined-ext4.img -O vpc ./bin/x86/openwrt-x86-generic-combined-ext4.vhd
复制代码

无法上传附件,所以直接把源代码贴出来,另存为补丁并应用即可。
  1. diff --git a/config/Config-images.in b/config/Config-images.in
  2. index a60dd50..52b3d66 100644
  3. --- a/config/Config-images.in
  4. +++ b/config/Config-images.in
  5. @@ -231,6 +231,16 @@ menu "Target Images"
  6.                 select TARGET_IMAGES_PAD
  7.                 select PACKAGE_kmod-e1000

  8. +        config VHD_IMAGES
  9. +                bool "Build Hyper-V image files (VHD)"
  10. +                depends on TARGET_x86 || TARGET_x86_64
  11. +                select GRUB_IMAGES
  12. +                select TARGET_IMAGES_PAD
  13. +                select PACKAGE_kmod-hyperv-balloon
  14. +                select PACKAGE_kmod-hyperv-net-vsc
  15. +                select PACKAGE_kmod-hyperv-util
  16. +                select PACKAGE_kmod-hyperv-storage
  17. +
  18.         config VMDK_IMAGES
  19.                 bool "Build VMware image files (VMDK)"
  20.                 depends on TARGET_x86 || TARGET_x86_64
  21. diff --git a/package/kernel/linux/modules/virtual.mk b/package/kernel/linux/modules/virtual.mk
  22. index 4464fe9..b15f97a 100644
  23. --- a/package/kernel/linux/modules/virtual.mk
  24. +++ b/package/kernel/linux/modules/virtual.mk
  25. @@ -186,3 +186,86 @@ define KernelPackage/xen-pcidev/description
  26. endef

  27. $(eval $(call KernelPackage,xen-pcidev))
  28. +
  29. +#
  30. +# Hyper-V Drives depends on x86 or x86_64.
  31. +#
  32. +define KernelPackage/hyperv-balloon
  33. +  SUBMENU:=$(VIRTUAL_MENU)
  34. +  DEPENDS:[email protected](TARGET_x86||TARGET_x86_64)
  35. +  TITLE:=Microsoft Hyper-V Balloon Driver
  36. +  KCONFIG:= \
  37. +    CONFIG_HYPERV_BALLOON \
  38. +    CONFIG_HYPERVISOR_GUEST=y \
  39. +    CONFIG_PARAVIRT=n \
  40. +    CONFIG_HYPERV=y
  41. +  FILES:=$(LINUX_DIR)/drivers/hv/hv_balloon.ko
  42. +  AUTOLOAD:=$(call AutoLoad,06,hv_balloon)
  43. +endef
  44. +
  45. +define KernelPackage/hyperv-balloon/description
  46. +  Microsofot Hyper-V balloon driver.
  47. +endef
  48. +
  49. +$(eval $(call KernelPackage,hyperv-balloon))
  50. +
  51. +define KernelPackage/hyperv-net-vsc
  52. +  SUBMENU:=$(VIRTUAL_MENU)
  53. +  DEPENDS:[email protected](TARGET_x86||TARGET_x86_64)
  54. +  TITLE:=Microsoft Hyper-V Network Driver
  55. +  KCONFIG:= \
  56. +    CONFIG_HYPERV_NET \
  57. +    CONFIG_HYPERVISOR_GUEST=y \
  58. +    CONFIG_PARAVIRT=n \
  59. +    CONFIG_HYPERV=y
  60. +  FILES:=$(LINUX_DIR)/drivers/net/hyperv/hv_netvsc.ko
  61. +  AUTOLOAD:=$(call AutoLoad,35,hv_netvsc)
  62. +endef
  63. +
  64. +define KernelPackage/hyperv-net-vsc/description
  65. +  Microsoft Hyper-V Network Driver
  66. +endef
  67. +
  68. +$(eval $(call KernelPackage,hyperv-net-vsc))
  69. +
  70. +define KernelPackage/hyperv-util
  71. +  SUBMENU:=$(VIRTUAL_MENU)
  72. +  DEPENDS:[email protected](TARGET_x86||TARGET_x86_64)
  73. +  TITLE:=Microsoft Hyper-V Utility Driver
  74. +  KCONFIG:= \
  75. +    CONFIG_HYPERV_UTILS \
  76. +    CONFIG_HYPERVISOR_GUEST=y \
  77. +    CONFIG_PARAVIRT=n \
  78. +    CONFIG_HYPERV=y
  79. +  FILES:=$(LINUX_DIR)/drivers/hv/hv_util.ko
  80. +  AUTOLOAD:=$(call AutoLoad,10,hv_util)
  81. +endef
  82. +
  83. +define KernelPackage/hyperv-util/description
  84. +  Microsoft Hyper-V Utility Driver
  85. +endef
  86. +
  87. +$(eval $(call KernelPackage,hyperv-util))
  88. +
  89. +#
  90. +# Hyper-V Storage Drive needs to be in kernel rather than module to load the root fs.
  91. +#
  92. +define KernelPackage/hyperv-storage
  93. +  SUBMENU:=$(VIRTUAL_MENU)
  94. +  DEPENDS:[email protected](TARGET_x86||TARGET_x86_64) +kmod-scsi-core
  95. +  TITLE:=Microsoft Hyper-V Storage Driver
  96. +  KCONFIG:= \
  97. +    CONFIG_HYPERV_STORAGE=y \
  98. +    CONFIG_HYPERVISOR_GUEST=y \
  99. +    CONFIG_PARAVIRT=n \
  100. +    CONFIG_HYPERV=y
  101. +  FILES:=$(LINUX_DIR)/drivers/scsi/hv_storvsc.ko
  102. +  AUTOLOAD:=$(call AutoLoad,40,hv_storvsc)
  103. +endef
  104. +
  105. +define KernelPackage/hyperv-storage/description
  106. +  Microsoft Hyper-V Storage Driver
  107. +endef
  108. +
  109. +$(eval $(call KernelPackage,hyperv-storage))
  110. +
  111. diff --git a/target/linux/x86/64/config-default b/target/linux/x86/64/config-default
  112. index 1caad74..32c7648 100644
  113. --- a/target/linux/x86/64/config-default
  114. +++ b/target/linux/x86/64/config-default
  115. @@ -99,6 +99,14 @@ CONFIG_HPET_MMAP=y
  116. CONFIG_HW_RANDOM_INTEL=y
  117. # CONFIG_HW_RANDOM_VIRTIO is not set
  118. CONFIG_HYPERVISOR_GUEST=y
  119. +# CONFIG_HYPERV is not set
  120. +# CONFIG_HYPERV_BALLOON is not set
  121. +# CONFIG_HYPERV_NET is not set
  122. +# CONFIG_HYPERV_STORAGE is not set
  123. +# CONFIG_HYPERV_UTILS is not set
  124. +# CONFIG_FB_HYPERV is not set
  125. +# CONFIG_HID_HYPERV_MOUSE is not set
  126. +# CONFIG_HYPERV_KEYBOARD is not set
  127. # CONFIG_I7300_IDLE is not set
  128. # CONFIG_IA32_EMULATION is not set
  129. CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
  130. diff --git a/target/linux/x86/config-3.18 b/target/linux/x86/config-3.18
  131. index d7a2d61..6dfdfd7 100644
  132. --- a/target/linux/x86/config-3.18
  133. +++ b/target/linux/x86/config-3.18
  134. @@ -203,6 +203,17 @@ CONFIG_HW_RANDOM=y
  135. CONFIG_HW_RANDOM_GEODE=y
  136. CONFIG_HW_RANDOM_VIA=y
  137. # CONFIG_HYPERVISOR_GUEST is not set
  138. +
  139. +# CONFIG_HYPERV is not set
  140. +# CONFIG_HYPERV_BALLOON is not set
  141. +# CONFIG_HYPERV_NET is not set
  142. +# CONFIG_HYPERV_STORAGE is not set
  143. +# CONFIG_HYPERV_UTILS is not set
  144. +# CONFIG_FB_HYPERV is not set
  145. +# CONFIG_HID_HYPERV_MOUSE is not set
  146. +# CONFIG_VMWARE_BALLOON is not set
  147. +# CONFIG_HYPERV_KEYBOARD is not set
  148. +
  149. CONFIG_HZ_PERIODIC=y
  150. CONFIG_I8253_LOCK=y
  151. # CONFIG_I8K is not set
  152. diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile
  153. index e7e02f1..a52ec11 100644
  154. --- a/target/linux/x86/image/Makefile
  155. +++ b/target/linux/x86/image/Makefile
  156. @@ -148,6 +148,15 @@ ifneq ($(CONFIG_VMDK_IMAGES),)
  157.    endef
  158. endif

  159. +ifneq ($(CONFIG_VHD_IMAGES),)
  160. +  define Image/Build/vhd
  161. +        rm $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).vhd || true
  162. +        qemu-img convert -f raw -O vpc \
  163. +                $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \
  164. +                $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).vhd
  165. +  endef
  166. +endif
  167. +
  168. define Image/Build/gzip
  169.         gzip -f9 $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img
  170.         gzip -f9 $(BIN_DIR)/$(IMG_PREFIX)-rootfs-$(1).img
  171. @@ -219,6 +228,7 @@ define Image/Build
  172.         $(call Image/Build/grub2,$(1))
  173.         $(call Image/Build/vdi,$(1))
  174.         $(call Image/Build/vmdk,$(1))
  175. +        $(call Image/Build/vhd,$(1))
  176.         $(CP) $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_PREFIX)-rootfs-$(1).img
  177.    else
  178.         $(CP) $(KDIR)/root.iso $(BIN_DIR)/$(IMG_PREFIX).iso
复制代码




发表于 2015-8-14 17:23 | 显示全部楼层
tedaz 发表于 2015-8-14 14:04
附件中是我制作的OpenWRT Chaos Calmer RC3 15.05源代码的Hyper-V补丁,可以尝试应用。

用svn或者git迁出O ...

恩, 先收藏了。。

最近用的软路由, 有些抽风,随机重启,比较闹心。 打算在VM里重做一个软路由。

目前用Openwrt 效果感觉如何? 有评估过其他软路由吗?
发表于 2015-8-15 08:50 | 显示全部楼层
gyc 发表于 2015-8-14 17:23
恩, 先收藏了。。

最近用的软路由, 有些抽风,随机重启,比较闹心。 打算在VM里重做一个软路由。

至少我自己编译的OpenWRT相当稳定,因为完全自定义了模块,主要是用vxn和ss做“智能上网”,没有过意外重启。

上面已经说了用软路由的主要目的,其他软路由都不是开源、允许自己编译的,所以没法随心所欲的调整智能上网功能,故仅选择了openwrt。

注:所谓智能上网是这样的,在配置中可以设置基于域名的域名解析和路由,例如*.google.com/*的域名均通过vxn使用8.8.8.8进行解析;然后所有*.google.com/*的域名均通过vxn访问。
这样可以保证域名解析结果的准确和访问;同时由于其是基于配置的,故访问*.taobao.com/*是直连。

最最关键的,这是基于域名的设置,不是基于ip的。除了openwrt,然和开源路由都没有这个功能。
发表于 2015-8-15 10:02 | 显示全部楼层
tedaz 发表于 2015-8-15 08:50
至少我自己编译的OpenWRT相当稳定,因为完全自定义了模块,主要是用vxn和ss做“智能上网”,没有过意外重 ...

vxn是什么?

基于dnsmasq ipset和iptables设置的重定向?
发表于 2015-8-15 10:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2015-8-15 13:42 | 显示全部楼层
tedaz 发表于 2015-8-15 08:50
至少我自己编译的OpenWRT相当稳定,因为完全自定义了模块,主要是用vxn和ss做“智能上网”,没有过意外重 ...

恩恩。。。

你是说根据不同域名 来转发 DNS规则吧?

好多DNS工具都带吧?
Win 2012 中的也支持转发, 我把Google什么,都转到Ipv6的地址解析。。


其他系统虽然不是开源,但都是基于某个分发版本定制的,
远程或本地登录后,大可以运行很多自定义脚本什么的,
就算没有插件选择, 也可以自己安装一些第三方的 工具或脚本。
发表于 2015-8-15 19:59 来自手机 | 显示全部楼层
gyc 发表于 2015-8-15 13:42
恩恩。。。

你是说根据不同域名 来转发 DNS规则吧?

没错,很多工具可以实现,但至今只发现Openwrt是最廉价且方便的同时实现了两个功能:指定域名以特定方式解析,以及指定域名以特定方式访问。

并且特定方式解析的域名不一定非要特定方式访问,反之亦然。
发表于 2015-8-15 23:31 | 显示全部楼层
tedaz 发表于 2015-8-15 19:59
没错,很多工具可以实现,但至今只发现Openwrt是最廉价且方便的同时实现了两个功能:指定域名以特定方式 ...

额。。。

感觉快成绕口令了。

对了, 你有看到过 Openwrt下的去广告的插件吗?
发表于 2015-8-16 06:14 来自手机 | 显示全部楼层
gyc 发表于 2015-8-15 23:31
额。。。

感觉快成绕口令了。

没有,去广告用的是firefox, chrome, opera的ad block插件。基于浏览器的比基于路由的更灵活。
发表于 2015-8-16 09:33 | 显示全部楼层
tedaz 发表于 2015-8-16 06:14
没有,去广告用的是firefox, chrome, opera的ad block插件。基于浏览器的比基于路由的更灵活。 ...

搜索一下好像还是有一个的

不过有好多年没更新了,而且没开源。。



路上上屏蔽广告也有些好处, 比如, QQ,这类内嵌广告的,都无法正常加载, 那么就只能不显示广告或者缓存的数据(可以清除)
发表于 2015-8-16 18:17 | 显示全部楼层
gyc 发表于 2015-8-16 09:33
搜索一下好像还是有一个的

不过有好多年没更新了,而且没开源。。

嗯,的确可以用来搞定软件中的嵌入广告,不过也有可能会误杀某些网站的元素,导致网站工作不正常。
发表于 2015-8-16 20:37 | 显示全部楼层
tedaz 发表于 2015-8-16 18:17
嗯,的确可以用来搞定软件中的嵌入广告,不过也有可能会误杀某些网站的元素,导致网站工作不正常。 ...

这点也算是比较担心的。。。

算了,总之先试试看在说。。
发表于 2015-8-16 21:14 | 显示全部楼层
tedaz 发表于 2015-8-14 14:04
附件中是我制作的OpenWRT Chaos Calmer RC3 15.05源代码的Hyper-V补丁,可以尝试应用。

用svn或者git迁出O ...

是不是用了这个补丁,以下四步就不用做了。
修改config/Config-images.in,以生成vhd镜像,不过生成了也没用,因为格式太老。需要用qemu自己转换成vhd才行;
修改package/kernel/linux/modules/virtual.mk,以增加Hyper-V支持;
修改target/linux/x86/config-3.18,开启linux内核对Hyper-V的支持;
修改target/linux/x86/image/Makefile;
发表于 2015-8-17 09:08 | 显示全部楼层
梅林听风 发表于 2015-8-16 21:14
是不是用了这个补丁,以下四步就不用做了。
修改config/Config-images.in,以生成vhd镜像,不过生成了也 ...

这个补丁就是修改了这几个文件的源代码。
关键还是要明白修改的意思,不能生搬硬套。
发表于 2015-8-20 19:28 | 显示全部楼层
现在在用 2012 R2 hyper-v openwrt, 一个恩山论坛的玩家编译的hyperv固件. 在我的 gen8 上用我也是新网卡, 不过BCM网卡有个坑, 在hyperv下性能低下, 之前找了好多资料, 后来发现改个注册表就好了.
发表于 2015-8-29 13:50 | 显示全部楼层
tedaz 发表于 2015-8-17 09:08
这个补丁就是修改了这几个文件的源代码。
关键还是要明白修改的意思,不能生搬硬套。 ...

我加载了一下补丁,从27行开始报错。。。不知道什么情况。能麻烦上传一个可以使用的op不?先谢谢了
发表于 2015-8-29 15:33 | 显示全部楼层
梅林听风 发表于 2015-8-29 13:50
我加载了一下补丁,从27行开始报错。。。不知道什么情况。能麻烦上传一个可以使用的op不?先谢谢了
...

请查收消息。
具体什么错误,贴出来看看。
发表于 2015-8-29 19:35 | 显示全部楼层
本帖最后由 梅林听风 于 2015-9-17 19:51 编辑
tedaz 发表于 2015-8-29 15:33
请查收消息。
具体什么错误,贴出来看看。

再次编译了系统,在打补丁的时候还是会出现错误。但是如果根据补丁内容修改相关文件后,成功编译,目前已经开始使用了。
发表于 2015-9-17 19:51 | 显示全部楼层
tedaz 发表于 2015-8-29 15:33
请查收消息。
具体什么错误,贴出来看看。

再次编译了系统,在打补丁的时候还是会出现错误。
但是如果根据补丁内容修改相关文件后,成功编译,目前已经开始使用了。
发表于 2015-9-18 09:20 | 显示全部楼层
梅林听风 发表于 2015-9-17 19:51
再次编译了系统,在打补丁的时候还是会出现错误。
但是如果根据补丁内容修改相关文件后,成功编译,目前 ...

如果自己修改后编译成功,可以用git diff > patch.txt来生成补丁,看看和原始补丁文件有什么区别。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

小黑屋|手机版|Archiver|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806

GMT+8, 2019-11-12 17:08 , Processed in 0.016029 second(s), 15 queries , Gzip On, Redis On.

Powered by Discuz! X3.1

© 2007-2019 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表