背景知识简介
Openwrt简介
什么是Openwrt
OpenWrt是一个嵌入式系统,为不同的嵌入式设备(通常是无线路由器)开发的可扩展的GNU/Linux发行版。Openwrt最早是由Linksys公司的WRT-54G系统开源而来,后有DD-WRT,HyperWRT等发行版。Openwrt基于Linux内核,可以轻松的扩展所需要的功能。
为什么使用Openwrt
传统家用无线路由器自带的官方固件一般比较封闭,功能固定;OpenWrt系统相比之下比较开放,支持大量的Openwrt官方和非官方的软件包,也可自行开发功能。你甚至可以在OpenWrt上运行docker,极大地提升网络的可玩性和访问体验。另外,OpenWrt是开源的嵌入式Linux系统,支持多种设备和平台,如各式无线路由器、x86、ARM等。你可以自行定义OpenWrt运行的设备的平台和配置,而无需受限于传统路由器固有硬件。
旁路网关简介
什么是旁路网关
旁路网关,俗称旁路由。顾名思义,旁路网关是在主路网关旁边的路由设备,起到辅助的路由和包处理的一些功能,通常旁路网关本身不具备直接访问Internet的能力。正常情况下,局域网内的终端通过主路由器访问Internet,主路由器的LAN口也是属于这个局域网的接口。当局域网中出现另一台路由器(比如OpenWrt)时,可以将其看作是旁路网关。在不对主路网关、旁路网关和终端设备做特殊操作的情况下,终端并不知道旁路网关的存在,流量还是正常走主路网关。可以通过配置让全部/部分终端设备的全部/部分流量经过旁路由。
为什么使用旁路网关
旁路网关的本质是让终端设备的网络流量在转发到主路网关前经过自己,同时可以对这些流量进行一些特殊的处理。旁路网关的存在是为了弥补主路网关缺失的一些功能,同时又不想对网络拓扑结构做大的改动,或者根本无法改动。下面列举两个使用旁路网关的常见场景:
我想在路由器上部署一些特殊的转发策略,只想让自己的终端设备可以按照这些策略转发,不想影响其它的终端设备
我想使用一些开源的服务,但有不想中断现有的网络而影响其他人
使用VirtualBox部署OpenWrt充当旁路网关
本次部署的目的是使用VBox虚拟机部署OpenWrt充当旁路由,然后再局域网内使用手机可以通过旁路由上网。网络拓扑如下:
获取OpenWrt官方镜像
由于采用的是VBox虚拟机,我们需要x86架构64位的镜像文件。可以从官网下载Index of /releases/22.03.3/targets/x86/64/
这里有很多包,其中包含squashfs字样的是可以通过命令恢复成初始配置的镜像,适合于不喜欢折腾的童鞋。这里我选择了generic-ext4-combined.img.gz这个镜像,版本为22.03.3,解压后获得openwrt22.03.3-x86-64-generic-ext4-combined.img这个文件。
将img转换为VirtualBox支持的虚拟硬盘格式
如果你想要安装在硬件软路由上,你需要用img文件通过启动盘制作工具制作启动U盘;这里由于是虚拟机运行,只需转换为VBox支持的虚拟硬盘格式。可以使用VBox自带工具,在cmd控制台VBox安装目录中,使用如下命令转换:
1 | VBoxManage convertdd openwrt22.03.3-x86-64-generic-ext4-combined.img openwrt.vdi |
创建VirtualBox虚拟机
在VBox中创建虚拟机。
其中,
操作系统可以选择Linux,Other Linux 64bits
CPU和内存分配为1C 1G即可
硬盘需要选择我们刚刚转换好的vdi格式的虚拟硬盘
配置VirtualBox虚拟机网络
由于我们将OpenWrt用作旁路由,我们只需要一个接口即可。在刚生成的虚拟机中选择设置网络,网络模式选择桥接,并且必须桥接到有线网卡,宿主机(电脑)也必须有线连接路由器(因为VBox的桥接机制问题),开启混杂模式。开启混杂模式的原因是让宿主机(电脑)的网卡接受目的地址不为宿主机(而是虚拟机)的数据包。
配置OpenWrt
配置完网络之后,我们可以开启虚拟机了。但开启虚拟机之前最好在虚拟机网络设置中去掉“接入网线”选项,勾掉这个选项虚拟机暂时不会连接到任何网路,这样的目的是为了阻止OpenWrt回应终端的DHCP请求而分配了192.168.1.0的地址。
修改OpenWrt管理地址
开机后,在虚拟机控制按下回车就可以输入命令了。Openwrt默认lan口是192.168.1.1/24的地址,默认网卡名为br-lan我们先把lan口地址改为当前局域网的空地址:
1 | ifconfig br-lan 192.168.3.100 |
不需要输入掩码,掩码默认24位
修改ip地址后就可以通过192.168.3.100来访问web界面了(如果取消了接入网线,需要把哪个勾勾起来)
关闭OpenWrt的DHCP功能
进入web界面后第一步先把LAN口的dhcp关了,我们不需要旁路网关分配ip地址。
在Network-Interface下找到br-lan这个网卡,在edit-DHCP server里面选择ignore this interface。记得点save & apply生效。
然后可以修改个root密码,新版本OpenWrt不改默认密码会有提示。
配置新接口
由于OpenWrt默认接口时桥接接口,我们不需要桥接(当然使用桥接也可以)。删除原有br-lan接口,然后新建接口add new interface,协议为static address,物理接口选择eth0。
然后配置IP和子网掩码配置为和原来一样192.168.3.100,网关配置为主路由器地址,比如192.168.3.1
安装软件包
新街口配置完成后,此时OpenWrt和一般的终端一样应该可以访问Internet了。在System-Software中更新lists。更新后可以在filter搜索官方软件包们这里可以安装中文包luci-i18n-base-zh-cn 和tcpdump抓包。其它官方包都可以在这个界面安装,非官方包需要下载ipk文件手动opkg install来安装
配置OpenWrt防火墙
防火墙的策略应该是仅有的LAN口出、入、转发应当全部放通,最好使用IP地址动态装(MASQUERADING)
首先删除其它区域的策略,只留下Lan区域,然后修改Lan区域配置如下,
注意需要绑定接口eth0,另外上面默认的FORWARD策略是reject,无需修改。
然后将Lan的出、入、转发全部放通,勾选MASQUERADING
其中,
需要勾选FOWARD策略
勾选MASQUERADING后,旁路网关会将终端的IP以PAT的形式转换为旁路网关的IP,这样可以保证上下行路径一致,避免未知问题。如果不勾选,旁路网关只做转发不做PAT,那么终端流量上行走的是旁路网关,下行主路由直接回复。
修改终端设备网关
将手机的网关和DNS设置为OpenWrt地址,即可通过OpenWrt上网。如果想要所有终端都可以通过旁路网关上网,可以修改主路由器的DHCP设置,令dhcp下发默认网关改为OpenWrt的IP地址。