VMware 搭建 OpenWrt 软路由 Apr 12th 2018 Words: 2k
This post is created 2 years ago, the content may be outdated.

50包邮捡的洋垃圾WNDR3800已经服役很久,最近我打算作一次低预算升级。最近在X宝逛了一圈路由器,没看到什么性价比高的产品(穷)。考虑到手上这台NAS(HTPC)正好是24 * 7运行的, 如果用来跑软路由不仅性能优秀,还能省了另加路由布线、电源等麻烦。
原本的网络布局如下:

在NAS部署软路由后,网络布局与等效图如下:

环境与工具

  • Linux / Linux LiveCD
  • VMware Workstations 14 Pro @ Windows 10 Pro
  • Dual Physical Ethernet

本文的WAN口由上级路由提供DHCP连接至Internet。
双网卡的作用:其中一网卡为WAN为宿主机与软路由提供Internet链接,软路由利用另一网卡提供LAN连接。
无需原生双网卡主板,USB转RJ45网卡也可以。现在市售USB3.0转千兆以太网性价比尚可。
若宿主机以无线方式连接互联网(笔记本/工作站),则可将WiFi视为WAN接口。

创建虚拟机

新建64位Linux虚拟机,选择自定义并依照下图配置

VM兼容性设置,默认即可

选择稍后安装系统

名称及路径设置

CPU核数/线程数设置

内存大小设置
这里建议先将内存设置大一些,以防稍后使用LiveCD安装方式时出现内存不足的问题,可在安装后缩小内存。

网络设置
此处建议先不要启用网络,稍后再手动配置

IO控制器设置,默认即可

虚拟磁盘类型设置
网上的许多教程提到这里要选择IDE,8102年的实践表明这里用默认的SCSI没有任何问题。

选择新建虚拟磁盘

设置最大磁盘大小,建议300M以上

制定虚拟磁盘文件名

完成配置

配置网络桥接

菜单栏选择虚拟网卡设置
新建VMNet0并桥接到连接互联网(用作WAN)的网卡上
再新建VMNet1并桥接到用作LAN的网卡上

右键新建的虚拟机并进入设置
硬件一栏选择添加网络适配器

两块块虚拟网卡均设置为自定义,第一块设置为VMNet0,在随后的虚拟机中它将被识别为eth0;第二块设置为VMNet1,在随后的虚拟机中它将被识别为eth1

安装OpenWrt

本文提供三种方法安装OpenWrt,__任选其一即可__。

安装方法[0] 自行编译获取vmdk

适用于对固件有自定义需求的用户。编译环境的配置与教程详见官方文档,本文不再赘述。
make menuconfig步骤中,编译配置里勾选上编译vmdk,编译完成时在bin文件夹中可以看到生成好的vmdk虚拟磁盘文件。
在虚拟机设置中移除建立时新建的虚拟磁盘(文件要到路径中手动删除) ,复制编译的vmdk文件到虚拟机路径,再在虚拟机设置中选择添加磁盘 > 从已有文件建立 > 选择上述vmdk文件。
如果编译时不勾选生成vmdk也可以利用生成的img.gz文件使用安装方法[1]或安装方法[2]其一进行安装(纯属找事)。

安装方法[1] qemu生成vmdk

此方法是官方提供的安装方法
下载最新最炫最时尚的x86_64平台EXT4分区格式的镜像

1
wget https://downloads.openwrt.org/snapshots/targets/x86/64/openwrt-x86-64-combined-ext4.img.gz

解压并使用qemu工具(需手动安装)转换为vmdk磁盘镜像。

1
2
3
gunzip openwrt-x86-64-combined-ext4.img.gz
;也可使用 gzip -d openwrt-x86-64-combined-ext4.img.gz
qemu-img convert -f raw -O vmdk openwrt-x86-64-combined-ext4.img openwrt-x86-64-combined-ext4.vmdk

在虚拟机设置中移除创建时新建的虚拟磁盘(文件要到路径中手动删除) ,复制转换的vmdk文件到虚拟机路径,再在虚拟机设置中选择添加磁盘 > 从已有文件建立 > 选择上述vmdk文件。

安装方法[2] 手动部署镜像

虚拟机设置中光驱添加LiveCD的ISO

启动虚拟机,默认会进入LiveCD

下载x86_64平台EXT4分区格式的镜像,并在解压后直接写入虚拟磁盘

1
2
3
4
wget https://downloads.openwrt.org/snapshots/targets/x86/64/openwrt-x86-64-combined-ext4.img.gz
gunzip openwrt-x86-64-combined-ext4.img.gz
;也可使用 gzip -d openwrt-x86-64-combined-ext4.img.gz
dd if=openwrt-x86-64-combined-ext4.img of=/dev/sda ;默认虚拟磁盘应在此路径,可用“fdisk -l”查看确认

配置OpenWrt并测试

启动虚拟机,可以看到GRUB2的引导界面以及启动时的kernel log。

启动后不会自动进shell,这里看到“random: crng init done”的日志后按回车就可以进shell了
首要任务是敲入命令vi etc/config/network配置网络接口。
在OpenWrt中eth0接口默认为LAN,eth1默认为WAN,与之前虚拟机的桥接相反。
这里将wan的物理接口改为eth0lan的物理接口改为eth1。如果没有IPv6网络那么wan6接口也可以放心删了。
__注意:与普通的级联路由不同,软路由的LAN接口IP必须与WAN接口的上级路由不同,例如上级路由网关为192.168.1.1,则软路由lan网关不能为192.168.1.1,否则会有软路由联网异常的问题__。

pingnslookup测试一下网络连通。接下来用opkg安装luci等软件就可以愉快的玩耍了。

附注

关于WLAN

虽然我的NAS自带无线网卡,但是还是选择在交换机下接AP的方案。大部分的无线网卡没有对AP模式进行优化,发挥的性能有限,许多双频网卡AP模式甚至只支持2.4G频段。此外,我以前在Windows下折腾无线网卡AP吃过不少苦头,已经累觉不爱,有兴趣的dalao可以去研究下。

Multi-WAN

可以宿主机多挂几张物理网卡再分别与虚拟网卡桥接,或者直接为虚拟机创建几张虚拟网卡,全部桥接到同一个物理WAN口。

PPPoE上网方式

只在软路由内拨号,这样软路由获得Internet访问权,宿主机WAN状态变为受限。此时宿主机可作为软路由网段下的主机,通过LAN访问互联网,宿主机流量经过软路由。

内网访问与局域网互访

因为软路由有防火墙与NAT,WAN口上级路由网段中的主机无法直接访问软路由网段中的主机。
假设软路由网关为192.168.100.1,上级路由网关为192.168.1.1,软路由WAN口分配的IP为192.168.1.123。若需跨网访问软路由下的主机,则可参照以下思路。

在软路由中开启防火墙相应端口,并配置端口转发规则。
例:当192.168.1.102(上级路由下的设备)访问192.168.1.123:8080时,相应的流量将会由软路由转发给192.168.100.xxx:8080

若拥有上级路由管理权,也可不配置端口转发。软路由防火墙允许WAN到LAN(或DMZ需要被访的主机),在上级路由中配置静态路由,指定网段192.168.100.0,掩码255.255.255.0,目标至192.168.1.123。
例:当192.168.1.102(上级路由下的设备)访问192.168.100.xxx时,相应的流量将会由上级路由转发给软路由,再通过软路由转发给192.168.100.xxx。

EXSi vs VMware in Windows

个人认为没有必要专门为了软路由折腾装一个EXSi,Windows下的VMWare效率跑软路由完全足够。此外,只要搞定Windows下的硬件驱动,虚拟机可以无视驱动问题。NAS(HTPC)上跑的很多媒体共享服务、BT下载等还是在物理机的系统上跑舒畅。

OpenWrt or LEDE

8102年了,这两货已经合并了,以后都用OpenWrt的名头。终于不用纠结了。


EOF