Elmer Zhang

生命在于折腾

0%

使用 QEMU 虚拟机安装 OpenWrt 做软路由

起因

之前科学上网都是用客户端,最近在 Youtube 上了解到软路由这种东西,据说可以大大提升科学上网的速度,就想自己也折腾一下试试。淘宝上的软路由主机太贵领导不给批资金,只好用闲置电脑通过虚拟机来装。

网络环境

我家的网络环境比较简单:一台 TP-Link 路由器 PPPoE 接入联通(这破小区光纤都没有通),其他设备都通过 wifi 连路由器上网。

家里网段是 192.168.1.0/24,DHCP 分配范围 192.168.1.100-254,计划给软路由用 IP 192.168.1.10,宿主机使用 IP 192.168.1.5

安装 OpenWrt

1. 准备宿主机系统

家里有一台闲置的 Macbook Pro,准备用来做软路由的宿主机。因为不习惯用 Mac 系统做 Server,也为了节省一点能耗,我把系统重装成了 Ubuntu Server 18.04

/etc/systemd/logind.conf 中设置 HandleLidSwitch=ignore,避免机器合盖进入休眠状态。

安装 QEMU 及相关工具: apt install -y qemu

2. 设置桥接网络

接下来我们需要在宿主机上创建一个桥接 interface br0,让虚拟机通过桥接的方式连网,这样才能被局域网内的其他机器访问到。

Ubuntu Server 18.04 默认使用 netplan 管理网络配置,我对这个不熟,把它卸载掉了,用回 ifupdown

然后修改 /etc/network/interfaces 的内容为

1
2
3
4
5
6
7
8
9
10
auto lo
iface lo inet loopback

auto br0
iface br0 inet static
bridge_ports enx00e04c3602b2
address 192.168.1.5
gateway 192.168.1.1
dns-nameservers 223.5.5.5 223.6.6.6
up /usr/sbin/brctl stp br0 on

其中 enx00e04c3602b2 是我给电脑加的 USB 网卡,主要是为了尽量降低延时。

最后重启系统让网络配置生效。

3. 下载固件包并解压

固件我们选 x86_64 架构的,下载后需要用 gzip 解压,然后改名为 openwrt.img 方便后面使用。

1
2
3
wget https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/19.07.1/targets/x86/64/openwrt-19.07.1-x86-64-combined-ext4.img.gz
gzip -d openwrt-19.07.1-x86-64-combined-ext4.img.gz
mv openwrt-19.07.1-x86-64-combined-ext4.img openwrt.img

4. 启动 OpenWrt 虚拟机

虚拟机启动命令:

1
2
3
4
5
6
qemu-system-x86_64 -name lede \
-machine q35 \
-m 512 \
-drive file=openwrt.img,format=raw,if=virtio \
-net nic,model=virtio -net tap \
-vnc :1

参数说明:

  • -name lede 给虚拟机起个名字,不加也没问题
  • -machine q35 设置要虚拟的设备类型,一般要虚拟 PC 我们直接写 q35 就好了,使用 -machine help 可以查看所有支持的设备类型
  • -drive file=openwrt.img,format=raw,if=virtio 配置虚拟机的磁盘为我们刚下载的固件 openwrt.img,磁盘类型为 raw,接口类型为 virtio
  • -net nic,model=virtio -net tap 添加网卡并通过 tap 的方式来进行桥接
  • -vnc :1 启用 VNC 并监听 5901 端口

5. 配置 OpenWrt 的网络

虚拟机启动好之后,我们就可以通过 VNC 连入进行配置了。宿主机 IP 是 192.168.1.5,QEMU 监听的 VNC 端口是 5901,所以 VNC 的连接地址是 192.168.1.5:5901

  1. 使用 VNC Viewer(或者其他你习惯使用的 VNC 客户端)连接 192.168.1.5:5901,登入 OpenWrt 的命令行,刚连上时应该只会看到一堆启动输出的日志,按一下回车键就能看到命令行提示符了;
  2. 打开 /etc/config/network 修改 lan 接口的 IP、网关和DNS,我的配置文件修改之后的完整内容如下,需要修改的只有 config interface 'lan' 下面的配置:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    config interface 'loopback'
    option ifname 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'

    config globals 'globals'
    option ula_prefix 'fd9b:fdff:6222::/48'

    config interface 'lan'
    option type 'bridge'
    option ifname 'eth0'
    option proto 'static'
    option ipaddr '192.168.1.10' # 修改为软路由要用的IP
    option gateway '192.168.1.1' # 设置网关
    option dns '223.5.5.5 223.6.6.6' # 设置 DNS
    option netmask '255.255.255.0'
    option ip6assign '60'
  3. 重启网络 service network restart
  4. 测试网络是否正常连通 ping www.baidu.com

启用软路由

完成以上步骤之后,我们就可以通过修改上网设备的网关为 192.168.1.10 来使用软路由了。

如果要通过软件路由来实现科学上网的话,还需要安装、配置一些工具,不过那些就不在本篇文章关注范围内了。

PS:以上安装方式也适用于国内流行的 KoolShare 固件,只需要把 img 换成 KoolShare 的 x86_64 固件就可以了。