自从上次因为不小心(手贱)将自己小服务器分区给整坏了,导致开不了机,重新搭建了OpenWrt,不到1个月的时间,这次觉得上次使用的镜像太久没有更新了,然后加上是别人编译的镜像,这次想着自己来做一次镜像,并且学习一下,也碰到了很多自己没有遇到过的报错,也在一次又一次的报错中学习到了很多东西,如果有写错的地方,欢迎评论提出或者邮件,谢谢!

使用官方固件

这里以x86-64平台为例

首先获取固件的下载地址

  1. 打开ImmortalWrt的官网, 选择当前最新的稳定版本23.05.3(笔记后面用的是23.05.2,因为写笔记的时候 23.05.3 刚刚更新,有些导航页还没完成) image.png

  2. 选择x86平台

  1. 选择64image.png

  2. 选择固件rootfs.tar.gz image.png

  3. 鼠标右键点击"复制链接地址"获取到固件的下载地址,后面第6步需要用到 image.png

  4. 开始构建镜像

git clone https://github.com/crazygit/openwrt-x86-64.git openwrt-x86-64
cd openwrt-x86-64
# 参数1: 第5步中获取的固件下载地址
# 参数2: docker镜像的名字,可以随便指定: 如pseudowang/openwrt-x86-64
./build.sh "https://downloads.immortalwrt.org/releases/23.05.2/targets/x86/64/immortalwrt-23.05.2-x86-64-rootfs.tar.gz" pseudowang/openwrt-x86-64

设置网络

  1. 将网卡混杂模式打开
sudo ip link set enp3s0 promisc on

混杂模式(Promiscuous Mode)是一种网络接口卡 (NIC) 操作模式。在这种模式下,网络接口卡会接收它所在网络上的所有数据包,而不仅仅是发送给它的数据包。

  1. 创建 Docker 网卡
docker network create -d macvlan --subnet=192.168.10.0/24 --gateway=192.168.10.1 -o parent=enp3s0 macnet

macvlan 是一种网络驱动程序,它允许Docker 容器直接连接到宿主机的物理网络。使用macvlan 时,每个容器将获得一个唯一的 MAC 地址, 并直接出现在物理网络上, 就像它是一个独立的设备

使用刚刚创建的镜像并启动容器

docker run --restart always --name openwrt -d --network macnet --privileged pseudowang/openwrt-x86-64

设置容器ip

到目前为止, 容器已经启动了,可以通过docker ps -a 查看运行的容器,然后查看OpenWRT 的 container ID

我的容器ID是: 48ec9c884f45, 然后我们进入到容器内部并设置容器的ip。通过命令docker exec -it 48ec9c884f45 /bin/sh 进入容器内部

docker exec -it 48ec9c884f45 /bin/sh

下面开始设置容器的ip 以便我们能通过ip 地址访问容器,通过命令: vi /etc/config/network 来设置ip

config interface 'lan'
        option ifname 'eth0'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option ipaddr '192.168.10.110'
        option gateway '192.168.10.1'
        option dns '192.168.10.1'

其中的 option ipaddr 是你的 openwrt 的地址, 注意不要与局域网其他设备冲突。option gatewayoption dns 设置你路由器的地址

保存完成后通过命令 /etc/init.d/network restart 重启网络,重启完成后就可以通过IP 访问我们的 OpenWRT 服务了

登录网页并下载软件包

image.png 一开始是不需要密码登录,直接回车登录就行,登录上去记得要更改密码

下载软件包

系统 –> 软件包, 然后点击 “更新列表” image.png 但是 这里会有一个报错,因为我们没有安装wget-ssl 这个包,所以会导致更新不了,再加上默认的地址似乎不能够使用,所以我换了一个新的地址,这个地址是在官方仓库有人提的Issues中拿到的。(wget returened 1 )

因为没有安装wget-ssl 这个包,update 不了,所以暂时把https 更换为 http, 安装源的文件路径为(/etc/opkg/distfeeds.conf)

src/gz immortalwrt_core http://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.1/targets/x86/64/packages
src/gz immortalwrt_base http://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.1/packages/x86_64/base
src/gz immortalwrt_luci http://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.1/packages/x86_64/luci
src/gz immortalwrt_packages http://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.1/packages/x86_64/packages
src/gz immortalwrt_routing http://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.1/packages/x86_64/routing
src/gz immortalwrt_telephony http://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.1/packages/x86_64/telephony
  1. 更换安装源,并暂时把https –> http 之后, update 成功 image.png

image.png

  1. 安装wget-ssl 软件包 image.png

安装成功后,重新将http 恢复为 https image.png

update 成功!!! image.png

image.png

  1. 安装theme-argon 软件包 image.png

就可以愉快的使用OpenWRT 了。我通过这些步骤完成了ImmortalWrt的搭建,如果你在搭建过程中有错误或者文章哪里写错了,可以在评论中指出,也可以给我发邮件

参考网站: https://github.com/crazygit/openwrt-x86-64