在虚拟机内安装 OpenWrt 并作为旁路由网关

陪她去流浪 桃子 2022年12月03日 阅读次数:156

家里设备好几个,手机、平板、电脑,几乎总是需要代理,本文介绍如何在虚拟机内安装 OpenWrt 作为旁路由网关来满足需求。

预环境准备

  • 一台可安装虚拟机的物理机,我这里使用的是 Intel NUC,运行 Ubuntu 服务器版操作系统;

本文相关常量

名字 参数
主路由器网关 192.168.1.1
服务器物理机 IP(NUC/Ubuntu) 192.168.1.86
内网子网掩码 255.255.255.0
虚拟机 IP 地址 192.168.1.200

安装主机/虚拟机管理软件

如果你会 QEMU 或者其它虚拟软件,可以用自己喜欢的。本文为简单起见,使用 Cockpit。

Cockpit是一款网页版的主机管理软件,类似于 VPS 提供商的管理页面。 安装虚拟机插件后,类似 VMWare 和 VirtualBox,可以用于创建和运行虚拟机。

Ubuntu 从 17.04 开始已经默认安装。可以用 systemctl start cockpit.service 启动。 可以尝试在浏览器内打开 http://192.168.1.86:9090 试试看(记得替换成你自己的 IP 地址)。 应该会自动跳转到 HTTPS 地址,此时需要选择信任证书。 使用系统用户名和密码进行登录。 右上角有个 Administrative access 授权一下,以允许管理员权限访问。

cockpit.png

安装虚拟机插件:sudo apt install cockpit-machines。 可能会遇到版本问题,担心的话,可以参照 https://cockpit-project.org/running.html#ubuntu 更新一下。

安装完后,刷新一下上述页面,可以看到左侧会多出一个 Virtual Machines

下载安装 OpenWrt 软路由

这是一个已经预装好路由软件的 OpenWrt 操作系统镜像。

下载后,用 gunzip 解压一下。

安装前,先启动网络:

enable-network.png

然后导入虚拟机(不是创建,因为下载的 img 磁盘映象,可直接复用):

import-vm

点击 Import 后就直接启动了:

running.png

右侧的黑框即是终端,可能假死,按一下回车即可进入。

配置虚拟机网络

在上面的页面终端中,编辑 /etc/config/network 文件,把 IP 地址和网关改成你自己的环境的地址(高亮的部分):

ifconfig.png

只改这个还不够,因为虚拟机和主机目前的网络还是隔离的。需要在物理机(本文的 Nuc)上创建一张网桥(参考:https://note.sendev.cc/3Ao74Jf8RV-PoQr9E9UeWw?view)。

编辑 /etc/netplan/00-installer-config.yaml 文件,按如下修改,注意 Yaml 文件的格式:

netplan.png

这个文件非常重要,谨慎修改,否则可能导致网络错误,进不去服务器(如果没有外接显示器的话)。

修改完成后 sudo netplan apply 执行一下应用。

如果不出意外,就可以看到这张网桥:

br0.png

然后在网页上的 OpenWrt 虚拟机页面,找到 Network interfaces (网络接口),编辑一下:

bridging.png

选 virtio 也是可以的。

然后在页面上“关机”,然后再“启动”。不要“重启”,配置不会生效。如果“关机”卡住,可以“强制关机”。

此时,在虚拟机内 ping 物理机或网关(主路由器)应该是通了:ping 192.168.1.1。反之亦然。

进入终端

如果有装 Docker,宿主机的 IP 转发可能被默认 DROP 掉了,可以开启:

$ sudo iptables -t filter -P FORWARD ACCEPT

网络通了之后,就可以直接 ssh 进终端了,不用再使用页面上的终端,体验不好。

$ ssh root@192.168.1.200
密码是:password

OpenWrt 管理

在浏览器中打开 192.168.1.200 应该就直接进入 OpenWrt 主页面了:

openwrt.png

使用默认的密码 password 即可进入。

增加节点

这个就是将你自己可用的代理节点添加到 OpenWrt 上:

add-node.png

添加后可以看到节点列表,可以测试一下是否可用:

node-list.png

然后配置一下规则列表,选上 geoip/geosite 等,然后点一手动更新:

rule.png

最后一步,启用即可,启用后点一下上面各网站的检测是否通过:

enable.png

一些问题

关闭旁路由的 DHCP 功能

防止与主路由的 DHCP 冲突。

网络 → 接口 → LAN → 基本设置 → 忽略此接口。

设置主路由器的 DHCP 和 DNS 功能

如果连接上主路由器就自动,则需要修改主路由器的 DHCP,使其指向旁路由。DNS 也指向旁路由。 随路由不同设置大同小异,这里不说明。设置后需要重新连接网络后才会生效。

为了网络的稳定,不建议对主路由的 DHCP 和 DNS 进行修改。

能访问外网却不能访问国内

参考:

添加命令:iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE 到 系统➡️启动项➡️本地启动脚本。

域名无法解析

可能需要关闭“重绑定保护”(网络,DHCP/DNS,常规设置)。

设备接入

现在的这个工作模式,是作为“旁路由”模式的。由于设备连上 WiFi 以后,主路由的 DHCP 服务器下发的是主路由作为网关和 DNS 服务器。 所以对于有需要自动代理的设备,可以手动修改一下 IP 网关和 DNS 服务器地址为虚拟机的 IP 地址即可。

不太建议修改主路由的 DHCP 配置,以防虚拟机出问题导致网络故障。 由于设备应该都能记住 IP 和 DNS 设置。所以不是什么问题。需要自动代理的设备,设置一次即可。

manual-ip manual-dns

参考文献

结束

后续有遗漏或更新再添加。