安卓手机安装Openwrt
更新源
apt-get update
你可以查看qemu有什么包,可以根据自己的需求安装模拟其他架构
apt search qemu
安装qemu工具包
apt install qemu-utils
当然,我的是arm64位架构的,模拟arm的性能损耗会更低
安装模拟aarch64架构的
apt install qemu-system-aarch64-headless
首先进行arm架构的教程
这里先采用官方releases版固件,你们成功后可以换其他充满插件的固件、或者手动构建armvirt镜像,替换执行命令里固件名字就行了
下载arm固件
(额,可能提示The program wget is not installed.那就执行pkg install wget安装wget后,再下载)
gzip -d openwrt-19.07.8-armvirt-64-root.ext4.gz
与X86会有combined不同的是,还有指定kernel,所以还要内核镜像。你们使用自己编译的固件时,记得也把内核文件复制到手机
这个时候输入查看命令ls执行可以看到文件openwrt-19.07.8-armvirt-64-root.ext4 和 openwrt-19.07.8-armvirt-64-Image
开始运行openwrt
qemu-system-aarch64 -M virt -m 1024m -kernel openwrt-19.07.8-armvirt-64-Image -append “root=fe00” -hda openwrt-19.07.8-armvirt-64-root.ext4 -no-reboot -nographic -cpu cortex-a53 -smp 3 -net nic -net user,id=wan,hostfwd=tcp7080-:80,hostfwd=tcp7022-:22
qemu-system-aarch64 \
-M virt \
-m 1024m \
-kernel openwrt-19.07.8-armvirt-64-Image \
-append "root=/dev/vda rootfstype=ext4" \
-drive file=openwrt-19.07.8-armvirt-64-root.ext4,format=raw \
-no-reboot \
-nographic \
-cpu cortex-a53 \
-smp 3 \
-net nic \
-net user,id=wan,hostfwd=tcp::7080-:80,hostfwd=tcp::7022-:22
-net nic:这表示创建一个虚拟网卡(NIC)。它是一个标准配置,用于虚拟机与外部网络进行连接。每个虚拟机启动时都会有一个虚拟网卡。-net user:这设置网络为用户模式(user-mode networking),即 NAT 模式。在这种模式下,虚拟机通过主机的网络连接到外部网络。虚拟机中的所有网络流量都通过主机的 IP 地址进行 NAT 转发,这使得虚拟机无需在网络上暴露其真实 IP 地址。id=wan:为网络配置指定一个标识符 "wan"。这个 ID 主要在多个网络设备存在时使用,用于区分不同的网络接口。hostfwd=tcp::7080-:80,hostfwd=tcp::7022-:22:这部分配置了端口转发规则。hostfwd=tcp::7080-:80:将宿主机的 7080 端口转发到虚拟机的 80 端口。通常用于 Web 管理界面的访问。hostfwd=tcp::7022-:22:将宿主机的 7022 端口转发到虚拟机的 22 端口。通常用于 SSH 连接。
这样配置后,主机的 7080 端口和 7022 端口会分别转发到虚拟机中的 80 和 22 端口,方便访问虚拟机的 Web 管理界面和通过 SSH 进行远程管理。
可能的问题及解决方案
虚拟机 IP 地址问题:
在用户模式网络下,虚拟机通常会被分配一个私有 IP 地址,这个地址只在虚拟机内部可见,不能直接从宿主机访问。如果你希望能够通过宿主机的端口访问虚拟机中的服务,确保虚拟机的服务(如 Web 或 SSH)已经在该虚拟机内正确配置并启动。
确保端口转发生效:
在宿主机上,访问 http://127.0.0.1:7080 应该能够访问虚拟机的 Web 服务,访问 ssh 127.0.0.1 -p 7022 应该能够通过 SSH 连接到虚拟机。如果没有,请确保虚拟机中的 Web 服务和 SSH 服务已经正常启动并且监听相应的端口。
可以通过以下命令检查虚拟机中相关服务的状态:
Web 服务(如 nginx 或 uhttpd):
ps | grep httpd
SSH 服务:
ps | grep dropbear
命令说明:
-M 是模拟的机器,可以执行qemu-system-aarch64 -M help查看列表,可以看到有树莓派的,所以也可以直接用树莓派的固件
-m 是分配内存大小 我这里分配1024mb
-kernel是指定内核
-append cmdline 设置Linux内核命令行和启动参数
我这里”root=fe00“指定根的块设备是fe00,如果你没有指定这个,内核将列出可用的块设备并重新启动,之后你们自己的固件可以取消这个”root=fe00“看可用块设备列表,再修改填上。我之前在这徘徊了很久啊。
-hda是指定硬盘镜像
–no-reboot 就是字面意思,里面客户系统如果重启就会直接退出qemu,重启相当于关机退出qemu。可以不要这条,这样客户系统可以进行重启的操作
-nographic 关闭qemu的图形化界面输出。也可以去掉,然后加上–vnc :1 以vnc为图像模式输出到”显示器”,并占用vnc 1端口,vnc访问手机ip:5901显示进入图像界面。-nographic与–vnc不同的是执行运行后不会立即有回显。
-cpu cortex-a53 模拟cortex-a53类型的处理器,因为前面查询我的骁龙625是cortex-a53类型处理器,模拟这个性能损失较小。可以输入qemu-system-aarch64 -cpu help查看可模拟列表
-smp 核数,给cpu分配核数
-net nic 就是快速配置网卡。后面net user,id=wan,hostfwd=tcp7080-:80,hostfwd=tcp7022-:22配置网卡网络模式为用户模式(nat模式,使用主机网络nat联网),分配id标识为wan,hostfwd是端口重定向参数,可以加逗号多个使用,很清晰可以自己根据需要增加和删改,这里我把主机7080端口重定向到客户系统的80端口,把主机7022端口重定向到客户系统的22端口。这两个端口分别是web网页管理地址端口、ssh端口。还有具体设置网卡可以百度搜索qemu网络模式。
执行后耐心等待跑码,看下面图
出现第一个框就可以按回车输命令了,但是不急,等第二个
出现br-lan: port 1(eth0) entered forwarding state就是启动好了(改过下面以后,第二次运行是出现8021q: adding VLAN 0 to HW filter on device eth0)
因为第一个网卡默认是分配给lan的,所以我们要改一下,分给wan(这个镜像改过一次,下次再启动就不用改了)
输入
vi /etc/config/network
按键盘i就可以编辑进行增删了,把config interface ‘wan’ 那整部分改成以下这样
config interface ‘wan’
option ifname ‘eth0’
option proto ‘dhcp’
编辑好了,按键盘ESC,然后按住shift再按一下键盘上的;就可以输入wq回车后保存退出(就是按esc退出后,按出冒号,wq命令保存退出)
重启网络服务
/etc/init.d/network restart
输入ifconfig看看
eth0 Link encap:Ethernet HWaddr 52:54:00:12:34:56
inet addr:10.0.2.15
获得了一个nat地址
现在ping一下外网
ping www.baidu.com
只要手机能联网,它就能联网!
因为我手机用的是4g数据,地方信号不好,延迟有点大哈别介意
开放wan的80端口
iptables -I INPUT -p tcp --dport 7080 -j ACCEPT
前面执行命令的时候,我们已经弄好手机7080端口重定向客户机的80端口了,所以我们在浏览器访问手机ip加7080端口,就可以进入openwrt的管理页面啦!
连上openwrt的ssh,前面执行命令的时候,我们已经弄好手机7022端口重定向客户机的22端口了,只要在openwrt开放22端口,就可以手机ip加7022连上了
iptables -I INPUT -p tcp –-dport 80 -j ACCEPT
你可以根据需要设置好重定向端口和开放端口,例子很明白了
iptables -I INPUT -p tcp –-dport 7080 -j ACCEPT
浏览器访问手机ip:7080进行设置
本次用到的工具是termux 安卓7 (API 24) 及以上版本,旧版本系统使用本镜像可能导致程序错误。