VBox 虚拟机安装 Openwrt 做旁路由
VBox 虚拟机安装 Openwrt 做旁路由
需求:开个虚拟机做旁路由,电脑把网关设置成旁路由地址,用它跑个上网或其他什么东西。
安装及配置过程简述
这件事流程很简单,总结起来主要有以下几点:
-
安装 VBox 虚拟机并解决好相关驱动(如虚拟网卡)。
在配置网络中如果遇到任何问题都要先排查虚拟网卡驱动有没有问题。安装虚拟网卡驱动请到 VBox 安装路径找到以下地址,在每个文件夹中都有一个
.inf
文件,右键安装即可。 -
下载固件文件(一般会提供
.vmdk
文件,如果只有.img
文件自行转换(StarWind V2V Converter))。 -
创建虚拟机,创建时使用自定义的虚拟磁盘文件。(参考:附一__新建虚拟机)
-
配置虚拟机网卡一为“仅主机(Host-only)网络”,我们需且仅需配置虚拟电脑的网卡一,这个网卡默认作为 OpenWrt 的 LAN 口。(参考:附二__仅主机(Host-only)网络)
-
在首次启动前需要(物理机)先断开所有外部网络,将虚拟机设置成“仅主机(Host-only)网络”,其对应的虚拟网卡要关闭 DHCP 、IP 地址设置成与路由器管理地址同网段。
-
虚拟机开机后可以使用
cat /etc/config/network
查看默认的 LAN 口地址。
-
-
开机。如无特殊原因可以正常开机了,开机后在浏览器进入管理界面,依次点击 “网络 > 接口” 可以看到软路由的接口情况。正常情况下物理接口应该只有一个 LAN 口。(如果有其他的只要不影响使用也可忽略,比如我刷 keelshare 的固件就有一个 eth5的 WAN 口
-
配置 LAN 口,(关闭 DHCP, 修改基本设置,关闭"桥接接口")
-
关闭 DHCP. 进入 LAN 口配置页面,在其“DHCP 服务器”设置中勾选“忽略此接口”。
-
基本配置。配置 LAN 口的协议为“静态地址”,然后根据主路由设置 IPv4地址、掩码、网关、广播和DNS服务器。
注意:关于这里的DNS: 必须要设置成一个有效的 DNS, 否则路由器
curl baidu.com
无返回。(关于DNS更多知识参考:附三__DNS服务和Dnsmasq) -
关闭"桥接接口",这一点很重要!虽然我至今仍不明白它是什么,但它真的很重要。
“桥接网口”选项是默认勾选的,在不关闭“桥接网口”的情况下麦本本也能正常上网,但是在荣耀笔记本上国内正常,出国却慢的出奇,最高不到 700Kbps, 我尝试了各种方法未果,最终误打误撞发现在关闭“桥接网口”口出国速度飙升到 56Mbps, 与国内测速无异;关闭“桥接网口”后麦本本出国速度也有提升,从原来的 30M 涨到了 50Mbps.
-
保存并应用。
-
-
配置虚拟机网卡一为“桥接网卡”,桥接到物理机用来正常上网的网卡。
-
在完成上面的操作后继续使用默认管理地址应该已经无法进入路由器后台了,这时候可以使用命令
halt
关掉虚拟机,让后将虚拟机网络设置为桥接,桥接到物理机连接到主路由且可以正常上网的网卡。 -
启用主路由的网络连接、开启虚拟电脑。不出意外的话这时候就可以通过前面设置过的 LAN 口 IP 正常访问软路由管理界面了,在软路由的终端中运行一下
curl baidu.com
发现软路由也可以正常上网。
-
-
设置物理机的网关和 DNS 服务器为软路由IP。修改完成后发现可以正常上网,这时候把软路由的出国插件配置好,物理机也可以正常通过软路由出国。
存在的问题
-
(软路由正常运行中)物理机
休眠 - 重新唤醒
后出国服务失效,虽然显示在运行但没效果,重启软路由后恢复。使用 VBox 的快速休眠 - 唤醒
没这个问题。 -
如果需要局域网中其他设备使用虚拟机中的软路由上网,则除了将设备的网关和 DNS 设置为软路由的 IP 外还以一个需要注意点的——运行软路由的电脑不能使用无线网卡上网(当然虚拟机也必须要桥接到有线网卡上才行了)。(虽然我也不明白这是什么原因但事实的确如此,如确有这种需求但实现不了不妨切到有线网卡试一试)
附一__新建虚拟机
新建虚拟机的过程记录如下:
附二__仅主机(Host-only)网络
首先需要在虚拟机中选择这种模式。
但是有关这个虚拟网卡的进一步选项需要在“主机网络管理器”中设置。
在运行软路由系统时关于这个网卡的设置主要有两个要点:1:关闭DHCP;2:设置 IP 地址(这个地址是物理机地址)。
-
关闭DHCP
这个没什么多说的,关闭就行了。 -
设置 IP 地址
这个有讲究。在设置之前先搞清楚下载的固件后台管理页面是多少,将这个 IP 地址设置成与路由器后台地址同网段但是不冲突的,我这里后台地址是
192.168.1.1
, 所以我设置为192.168.1.2
.注意:如果路由器的后台网段已接入的其他网络冲突了,那没办法只好先断开其他网络了,进去路由器后台再改路由器地址。
附三__DNS服务和Dnsmasq
这块写的一塌糊涂,我也不知道我在说什么!
将物理机的 DNS 设置为软路由当然会存在某些问题,比如无法解析我在主路由中设置的 hosts 文件,虽然之前设置 LAN 口时将那个 DNS 设置为了主路由 IP ,但也没什么鸟用。
-
事实上虽然将软路由器 LAN 口 IP 设置为了主路由 IP, 但就算是软路由本身也无法使用主路由的 HOSTS 解析。比如我在主路由的 HOSTS 中有一条
192.168.42.61 ds119j.nas
是用来解析我的 NAS 的,但是在软路由中ping ds119j.nas
却始终不通,通过cat /etc/resolv.conf
和nslookup www.baidu.com
命令查到的软路由本机 DNS 服务器始终是 "127.0.0.1", 真是奇哉怪哉。 -
后来我才明白原来在 OpenWrt 中有一个本地默认的 DNS 服务叫做 Dnsmasq, 它监听本地地址(也就是 "127.0.0.1"),而你真实的 DNS 服务器地址,是被这个服务【Dnsmasq】管理维护着的。
# 解析流程 local process -> local dnsmasq -> router -> ISP dns
在 OpenWrt 的图形配置界面中 “网络 > DHCP/DNS” 实际上就是配置的 Dnsmasq.
-
回到最开始的问题:将物理机的 DNS 设置为软路由后就无法解析我在主路由中设置的 hosts 文件这事怎么解决?
这个问题暂未解决。除非把物理机的 DNS 设置为主路由的 IP, 但是这样虚拟机软路由上基于 DNS 的一些服务就没法发挥作用了,得不偿失。
虽然理论上有办法让 Dnsmasq 针对特定的域名使用特定的 DNS 服务,比如我想让主路由(192.168.42.1)解析我的 NAS(ds119j.nas),但我尝试了各种办法都没成功,看来只能在软路由中再设置一次 hosts 文件了。
-
今天一天我看的关于 Dnsmasq 的有价值的资料