在Windows中使用Hyper-V搭建OpenWRT环境

0. 前言

​ 由于众所周知的原因,在特定地区的程序员访问GitHub以及Google等网站及服务会受到限制和审查,且在本地系统中使用特定的软件有可能造成系统中不受控制的访问。所以为了更好地学习计算机相关的技术,我们接下来将使用Hyper-V虚拟机软件在Windows中搭建OpenWRT路由系统以接管Windows中的访问流量,以达到操作系统层级的透明代理。

请遵守当地法律法规

Big brother is watching you

注:在可控的网络环境中建议使用单独的设备来搭建旁路路由或主路由的透明代理,本方案建议用于本机或可信设备的透明代理,Linux及macOS同样具有参考价值

1. 准备

1.1 硬件要求

  • 至少有一张以太网卡(不然还上什么网)
  • 灵活的双手,聪明的大脑,勇于尝试的心

1.2 软件要求

  • Windows 10 专业版或企业版(需要Hyper-V环境)
  • 注:Linux可使用KVM虚拟机和brctl工具来搭建相应环境,macOS可使用Parallel Desktop等虚拟机软件,理论上在任何可运行Docker的操作系统中都可以使用Docker来搭建本环境

2. 搭建运行环境

2.1 开启Hyper-V

在Windows中打开 控制面板 > 程序 > 程序和功能 > 启用或关闭 Windows 功能,勾选Hyper-V

image-20200827215845196

确定后Windows将自动配置Hyper-V功能,并要求重启

2.2 下载OpenWRT镜像

可从OpenWRT项目官方网站下载stable release或snapshot镜像,推荐使用国内的清华镜像源

OpenWRT清华镜像

也有国内开发者制作的整合包,可自行寻找下载,此处推荐Github @SulingGG配置并自动编译的OpenWRT镜像

作者博客

下载地址

2.3 转换镜像格式

下载并解压后可看到,本系统镜像以img格式分发,而微软的Hyper-V不支持直接将img格式镜像作为虚拟机硬盘导入,此处需要进行格式转换。可使用StarWind V2V Converter

下载地址

安装后打开StarWind V2V Image Converter,根据软件提示选中img格式的系统镜像,转换为VHDX格式的硬盘镜像

image-20200827221117190

一路选择下一步,你会在img目录下看到一个转换完成的.vhdx文件,稍后需要将vhdx文件导入Hyper-V虚拟机

3. 创建Hyper-V虚拟机

3.1 添加虚拟交换机

开启Windows的Hyper-V功能后可以在开始菜单中搜索到 Hyper-V 管理器,如图所示

image-20200827221831511

由于我自己已经建立过虚拟机实例,所以有显示条目。

首先点击右侧的虚拟交换机管理器

3.1.1 添加桥接物理网卡的虚拟WAN

首先创建新的虚拟交换机,选择外部

image-20200827222047148

稍后此虚拟交换机将作为WAN口连接至OpenWRT虚拟机,由于本虚拟机的作为上级路由的角色提供服务,所以选择桥接物理网卡

选择外部网络,在下拉选项卡中选中电脑连接外部网络的物理网卡,此处我使用的是笔记本内置的Killer系列的无线网卡

image-20200827222316744

名称可以随意填写

注意:由于现在还没有完全配置,可先勾选允许管理操作系统共享此网络适配器,待配置**完成后再取消

3.1.2 添加连接操作系统的虚拟LAN

返回至新建虚拟网络交换机,创建类型为内部的虚拟交换机

image-20200827222838397

如图所示配置,此虚拟交换机将作为虚拟路由的LAN口连接虚拟机和本机操作系统,名称可以随意填写,但要自己分清。

3.2 添加虚拟机

回到Hyper-V管理器,点击右侧 新建 > 虚拟机

image-20200827223142047
  1. 指定名称和位置

    写自己喜欢的名称,放自己喜欢的文件夹里

  2. 指定代数

    第一代

  3. 分配内存

    不用太多,一般512MB足矣,至少128MB

  4. 配置网络

    在下拉选项卡中选择先前作为WAN口添加的虚拟网络交换机

  5. 连接虚拟硬盘

    将步骤2.3中的.vhdx格式虚拟硬盘文件放到你喜欢的文件夹里边

    选择使用现有虚拟硬盘,选择该.vhdx文件

    点击完成后即可在Hyper-V管理器中看到添加的虚拟机条目了。

    右键点击设置,在添加硬件中选择网络适配器,在虚拟交换机中选择先前新建的LAN口虚拟交换机

    image-20200827223840588

配置如图所示

4. 配置OpenWRT

4.1 配置OpenWRT网络设置

注:此处需要一些Linux操作系统基础,基本命令不再赘述

在Hyper-V管理器中右键虚拟机条目,选择连接,再点击启动

等待几秒后内核启动完成,按下Enter可激活当前console,如图

image-20200827224420493

使用vi编辑网络配置文件

vi /etc/config/network

按下i进入编辑模式

编辑config interface 'lan'部分

1
2
3
4
5
6
7
config interface 'lan'
option type 'bridge'
option ifname 'eth1'
option proto 'static'
option ipaddr '192.168.30.1'
option netmask '255.255.255.0'
option ip6assign '60'

ifname处填写先前作为LAN的网卡在OpenWRT中的网卡名称

一般在Hyper-V创建虚拟机时先添加的为eth0,后添加的为eth1,以此类推(有待考证)

反正就两个网卡eth0和eth1,不行就在配置文件里交换一下试试呗

ipaddr部分可以填写自己喜欢的C类网段,此处为OpenWRT虚拟机在LAN网络中的地址,子网掩码默认255.255.255.0,即前缀24,允许访问192.168.30.0/24的网段,子网掩码的工作方式此处不赘述。

之后在文件末尾添加

1
2
3
config interface 'wan'
option ifname 'eth0'
option proto 'dhcp'

此处意味使用dhcp协议从上级路由获取ip地址配置,具体情况需要由你所在的网络环境决定,一般来说自动获取即可

按下Esc退出编辑模式,输入:wq保存并退出

输入service network restart重启OpenWRT的网络服务,使得新配置文件生效

完成后输入ifconfig查看网卡配置

以下为我的情况

仅截取eth0(WAN)、eth1(LAN)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
eth0      Link encap:Ethernet  HWaddr 00:15:5D:38:01:06
inet addr:192.168.200.25 Bcast:192.168.200.255 Mask:255.255.255.0
inet6 addr: fe80::215:5dff:fe38:106/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1104838 errors:0 dropped:0 overruns:0 frame:0
TX packets:507163 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:469979594 (448.2 MiB) TX bytes:39450872 (37.6 MiB)

eth1 Link encap:Ethernet HWaddr 00:15:5D:38:01:07
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:379616 errors:0 dropped:0 overruns:0 frame:0
TX packets:878441 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:26894447 (25.6 MiB) TX bytes:449428514 (428.6 MiB)

现在即为完成了OpenWRT的配置,可在OpenWRT中尝试输入

nslookup baidu.comping baidu.com

检验网络连通性

如果网络通畅,即可再次打开Hyper-V的虚拟交换机管理器

image-20200827230638876

取消勾选允许管理操作系统共享此网络适配器

现在Windows将会以虚拟机的OpenWRT作为上级路由访问互联网

注:一开始Windows有可能无法正确获取LAN网卡上的dhcp配置,需要手动在 控制面板 > 网络和 Internet > 网络连接 中指定LAN网卡的静态ip配置,将ip地址设置为先前OpenWRTip地址的同一网段,子网掩码设置为255.255.255.0,网关和首选DNS设置为OpenWRT的地址

如果配置正常工作,Windows的网络状态将会如下

image-20200827231140238

WiFi显示无Internet,网络连接状态图标为网线连接

image-20200827231427864

设置中看到的图样如图所示

4.2 配置OpenWRT的WebUI

输入opkg update,更新opkg的软件源

opkg为OpenWRT系发行版常用的包管理器

默认连接download.openwrt.org官方站点获取更新,若网络连接较慢可更换为国内镜像

由官方站点更换为清华镜像:

sed -i 's_downloads.openwrt.org_mirrors.tuna.tsinghua.edu.cn/openwrt_' /etc/opkg/distfeeds.conf

由官方站点更换为北外镜像:

sed -i 's_downloads.openwrt.org_mirrors.bfsu.edu.cn/openwrt_' /etc/opkg/distfeeds.conf

除此之外腾讯云也提供OpenWRT镜像服务,需要的朋友可自行更换

完成后可安装软件包

opkg install *

,*处替换为需要安装的软件包

  • luci
  • luci-base
  • luci-compat
  • luci-i18n-base-zh-cn

安装好后,即可在浏览器中输入OpenWRT的地址,打开WebUI管理页面

image-20200827231611178

此处我配置好后更改了主题

5. 其它事项

现在你的系统网络流量将会经由OpenWRT虚拟机转发,可以在OpenWRT中安装插件或其它软件来实现不同的功能

image-20200827231902745

详细步骤和教程请自行搜索,请不要将本教程用于非法用途

若需要其它的设备同样使用该OpenWRT虚拟机,可使用桥接网卡以旁路路由的架构连入本地网络中,详细教程以后有时间再说吧

Vlist 2020年8月27日 初稿


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!