家里设备好几个,手机、平板、电脑,几乎总是需要代理,本文介绍如何在虚拟机内安装 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 授权一下,以允许管理员权限访问。
安装虚拟机插件:sudo apt install cockpit-machines
。
可能会遇到版本问题,担心的话,可以参照 https://cockpit-project.org/running.html#ubuntu 更新一下。
安装完后,刷新一下上述页面,可以看到左侧会多出一个 Virtual Machines
。
下载安装 OpenWrt 软路由
这是一个已经预装好路由软件的 OpenWrt 操作系统镜像。
- 下载地址:https://github.com/SuLingGG/OpenWrt-Rpi/releases。
- 本文选择:immortalwrt-x86-64-generic-ext4-combined.img.gz。
下载后,用 gunzip
解压一下。
安装前,先启动网络:
然后导入虚拟机(不是创建,因为下载的 img 磁盘映象,可直接复用):
点击 Import
后就直接启动了:
右侧的黑框即是终端,可能假死,按一下回车即可进入。
配置虚拟机网络
在上面的页面终端中,编辑 /etc/config/network
文件,把 IP 地址和网关改成你自己的环境的地址(高亮的部分):
只改这个还不够,因为虚拟机和主机目前的网络还是隔离的。需要在物理机(本文的 Nuc)上创建一张网桥(参考:https://note.sendev.cc/3Ao74Jf8RV-PoQr9E9UeWw?view)。
编辑 /etc/netplan/00-installer-config.yaml
文件,按如下修改,注意 Yaml 文件的格式:
这个文件非常重要,谨慎修改,否则可能导致网络错误,进不去服务器(如果没有外接显示器的话)。
修改完成后 sudo netplan apply
执行一下应用。
如果不出意外,就可以看到这张网桥:
然后在网页上的 OpenWrt 虚拟机页面,找到 Network interfaces (网络接口)
,编辑一下:
选 virtio 也是可以的。
然后在页面上“关机”,然后再“启动”。不要“重启”,配置不会生效。如果“关机”卡住,可以“强制关机”。
此时,在虚拟机内 ping 物理机或网关(主路由器)应该是通了:ping 192.168.1.1
。反之亦然。
进入终端
如果有装 Docker,宿主机的 IP 转发可能被默认 DROP 掉了,可以开启:
1
|
|
网络通了之后,就可以直接 ssh 进终端了,不用再使用页面上的终端,体验不好。
1 2 |
|
OpenWrt 管理
在浏览器中打开 192.168.1.200
应该就直接进入 OpenWrt 主页面了:
使用默认的密码 password
即可进入。
增加节点
这个就是将你自己可用的代理节点添加到 OpenWrt 上:
添加后可以看到节点列表,可以测试一下是否可用:
然后配置一下规则列表,选上 geoip/geosite 等,然后点一手动更新:
最后一步,启用即可,启用后点一下上面各网站的检测是否通过:
一些问题
关闭旁路由的 DHCP 功能
防止与主路由的 DHCP 冲突。
网络 → 接口 → LAN → 基本设置 → 忽略此接口。
设置主路由器的 DHCP 和 DNS 功能
如果连接上主路由器就自动,则需要修改主路由器的 DHCP,使其指向旁路由。DNS 也指向旁路由。
随路由不同设置大同小异,这里不说明。设置后需要重新连接网络后才会生效。
为了网络的稳定,不建议对主路由的 DHCP 和 DNS 进行修改。
能访问外网却不能访问国内
参考:
- https://isdiy.net/openwrt-guo-nei-wang-zhan-wu-fa-fang-wen/
- https://www.right.com.cn/FORUM/thread-4453763-1-1.html
添加命令:iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
到 系统➡️启动项➡️本地启动脚本。
域名无法解析
可能需要关闭“重绑定保护”(网络,DHCP/DNS,常规设置)。
设备接入
现在的这个工作模式,是作为“旁路由”模式的。由于设备连上 WiFi 以后,主路由的 DHCP 服务器下发的是主路由作为网关和 DNS 服务器。 所以对于有需要自动代理的设备,可以手动修改一下 IP 网关和 DNS 服务器地址为虚拟机的 IP 地址即可。
不太建议修改主路由的 DHCP 配置,以防虚拟机出问题导致网络故障。 由于设备应该都能记住 IP 和 DNS 设置。所以不是什么问题。需要自动代理的设备,设置一次即可。
参考文献
结束
后续有遗漏或更新再添加。