记录一下ImmortalWrt的安装方法,以及一些配置。
¶镜像下载
下载地址:https://firmware-selector.immortalwrt.org/。根据目标设备选择对应的镜像即可,
¶安装
¶VMware虚拟机
在镜像下载页面搜索Generic x86/64,选择ext4 vmdk镜像下载。当前最新版本24.10.2,查看package,确认kernel版本是6.6。
将下载好的vmdk文件复制到存放虚拟机的文件夹。VMware新建虚拟机,操作系统类型选择其他Linux 6.x 内核 64 位,命名为p73wrt,处理器和内存按需配置。网络选择NAT。磁盘界面选择复制进去的vmdk文件。虚拟机创建好之后直接启动即可。
系统启动之后,如果终端一直在吐log,可以用echo 0 > /proc/sys/kernel/printk关闭log。
¶树莓派3B
镜像下载页面搜索Raspberry Pi 3,我选择的64位ext4版本。解压后用Win32DiskImage或其他类似工具写入TF卡,插入树莓派启动即可。
¶基础设置
¶IP地址
进入虚拟机终端,编辑文件/etc/config/network,给网卡lan设置IP地址,网段和路由器保持一致。添加网关和dns的配置。网关可以填路由器的地址。最后/etc/init.d/network restart重启网卡。可以ping路由器、8.8.8.8或baidu.com测试网络是否正常。
1 | lan |
网络配置好之后,在浏览器输入IP地址,即可进入网页端,默认没有密码。以上关于网络接口的配置,也可以访问管理网页,进入网络->接口,进入设置。
¶root密码
shell执行 passwd root,或网页web进入系统->管理权进行设置。
¶软件包更新和安装
immortalwrt 使用opkg管理软件包,所以可以使用opkg安装软件包。也可以访问网页端,进入系统->软件包,对软件包进行管理。
¶rootfs扩容
安装系统的时候,默认分配了1GB大小的磁盘,但是rootfs最大只有290MB。
1 | root@ImmortalWrt:~# df -h |
安装相关工具的指令
1 | opkg install resize2fs parted losetup fdisk |
关闭虚拟机,进入虚拟机设置,把磁盘设置为10GB大小(如果是树莓派,忽略)。启动虚拟机,进入终端,执行fdisk /dev/vda命令,进入交互式界面,敲p查看分区表,确认rootfs分区编号,应该是2。然后输入e->2,不输入大小,直接回车,用默认的最大值。最后敲w保持退出。
1 | Command (m for help): e |
重启系统,待系统重启成功后,执行 resize2fs /dev/vda2,扩大文件系统。最终效果如下。
1 | root@ImmortalWrt:~# df -h |
也可以参考 https://blog.csdn.net/2301_81011704/article/details/142636930 扩容rootfs。
如果 rootfs 扩容遇到如下错误。
1 | root@ImmortalWrt:~# resize2fs /dev/sda2 |
kernel log 如下。
1 | root@ImmortalWrt:~# dmesg | grep sda2 |
参考https://github.com/openwrt/openwrt/issues/7729,拿到如下修复命令。成功修复。如果是虚拟机,分区名字要换成 /dev/sda2。
1 | mount -o remount,ro / #Remount root as ReadOnly |
¶webserver 切换到nginx
首先停止uhttpd,防止端口冲突。然后安装nginx。
1 | service uhttpd stop && service uhttpd disable |
nginx的主配置文件是/etc/nginx/uci.conf。这个文件是根据/etc/config/nginx里面的配置生成来的。修改此文件,参考如下。主要修改了第一个server的名字,server_name,证书的文件名,以及包含文件p73wrt.inc.conf。
1 | config main global |
修改完成之后,使用如下命令重启nginx。
1 | touch /etc/nginx/p73wrt.inc.conf |
在p73wrt.inc.conf添加如下内容,禁止IP直接访问。
1 | if ($host != 'p73wrt.inc') { |
参考:
¶DHCP
把主路由的静态IP设置,同步到ImmortalWrt。关闭主路由的DHCP服务,使用软路由分配IP地址。在网络->DHCP/DNS->静态地址分配,可以为某台设备设置静态IP地址和标签。注意,如果只设置标签而没有设置固定IP地址,则标签设置不会生效。
dhcp 选项3用于指定网关。关闭主路由的dhcp后,软路由dhcp默认指定的网关是软路由地址,这样局域网内所有的设备都能科学上网了。但是不想所有设备都走代理。关键配置在于设备的网关地址。
经过搜索资料,有两种方式可以做到。黑名单,即默认网关指向软路由(默认走代理),如果某个设备不想走代理,通过设置把网关指向主路由。白名单,即默认网关指向主路由(默认不走代理),如果想让某个设备走代理,通过设置把这台设备的网关指向软路由。这里选择白名单模式。
网络->接口->点击lan编辑->DHCP服务器->高级设置,增加三个DHCP选项,3,192.168.100.1、6,192.168.100.25和tag:outsea,3,192.168.100.55,保存并应用。
DHCP的地址范围在网络->接口->点击lan编辑->DHCP服务器->常规设置下面,默认是从100开始分配地址。
参考:
- DHCP协议,https://zhuanlan.zhihu.com/p/17391337608
- openwrt旁路由dhcp指定主路由网关方法,https://blog.51cto.com/fxn2025/9836451
- 设置 OpenWrt 指定主机DHCP 获取不同网关DNS,https://www.right.com.cn/forum/thread-8225205-1-1.html
¶DNS
切换lan到inc,网络->DHCP/DNS->常规,将本地解析这些项目改成/inc/,本地域名改成inc。这样会自动增加一个<hostname>.inc的域名。
选项卡下面的所有服务器,即打开all-servers选项,同时查询所有的上游DNS服务器。询问AI,会导致CPU使用率增加、带宽使用增加、减低缓存命中率。打开之后会提高查询速度,避免DNS劫持。综合考虑,性能优先,打开这个选项。
DNS记录选项卡下面可以添加DNS记录,例如A记录、CNAME记录等。图形化界面。但是历史DNS记录比较多,图形化界面不利于重新部署,还是考虑自动化部署。首先将/etc/dnsmasq.d包含到dnsmasq的配置文件中,参考如下命令。最后修改相关自动化脚本,将DNS记录配置文件部署到/etc/dnsmasq.d 下面。。
1 | mkdir -p /etc/dnsmasq.d |
转发选项卡下面的DNS转发可以设置上游DNS服务器地址。可以设置为阿里的公共DNS服务器,223.5.5.5和223.6.6.6。注意,如果安装了openclash插件,clash默认会打开DNS劫持,DNS转发的设置总是会被自动修改成127.0.0.1#7874。建议在服务->OpenClash->插件设置->DNS设置关闭DNS劫持。避免部分网页无法打开。为了访问速度更快,建议使用运营商的dns。主路由拨号时会自动获取运营商的dns,所以这里填主路由IP即可。
Resolv和Hosts文件选项卡下面的解析文件,默认也配置了两个上游DNS服务器。默认是文件/tmp/resolv.conf.d/resolv.conf.auto。参考https://www.openwrt.pro/post-141.html,看起来是netifd自动生成的。
openclash也有设置上游DNS服务器的地方,在服务->OpenClash->复写设置->DNS设置,找到设置自定义上游 DNS 服务器(在上方设置中启用本功能后生效),有NameServer和Default-NameServer两个选项卡可以配置。这里默认不生效。
Resolv和Hosts文件选项卡下面的忽略解析文件,表示打开选项noresolv,忽略/etc/resolv.conf文件。
¶打开dnsmasq的log
修改dhcp和dns的时候,可能遇到问题,这时就需要打开dnsmasq的log进行debug。首先编辑/etc/dnsmasq.conf文件,注释log-facility=/dev/null。然后service dnsmasq restart重启服务。
进入web,进入网络->DHCP/DNS->日志,勾选记录查询日志,记录设施选自定义,填/tmp/dnsmasq.log,保存并应用。这时就能在/tmp/dnsmasq.log文件看到相关日志。
调整完成之后,记得关闭log,提高性能。
如果在web界面打开log后,dnsmasq启动失败。使用命令
logread | grep dnsmasq查询启动日志,确认启动失败的原因。