记录如何在 docker 中部署运行 openwrt 系统

因以下操作有风险会导致相关设备不能上网,请确保在操作前确定自己拥有足够多的 linux、docker 及网络相关知识经验,能够理解以下命令的含义,请不要盲目跟从操作

以下内容参考自:https://mlapp.cn/376.html

实际操作环境基于群晖 DSM 7.1-42661 Update 1 版本系统,使用其内置的 docker 套件(版本 20.10.3-1306)部署运行

 

1、Docker 的安装在群晖中可以直接使用套件安装,这里不再赘述

 

2、需要在群晖系统配置的终端机中开启 SSH 功能

 

3、使用 SSH 登录群晖系统,然后依次执行以下命令来准备网络环境:

# 打开网卡的混杂模式(eth0 为当前在使用的网卡名称)
ip link set eth0 promisc on

# 在 docker 中增加一个 macvlan 模式的网卡(子网和网关请根据 eth0 所在网络信息设置)
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 macnet

 

4、拉取并运行 openwrt 容器

# 拉取 openwrt 镜像(请根据实际设备自行选择镜像标签)
docker pull sulinggg/openwrt:x86_64

# 运行 openwrt 容器(请根据 eth0 所在网络设置 ip,不要与现有网络设备冲突)
docker run -d \
--restart always \
--network macnet \
--ip 192.168.1.2 \
--privileged \
--name openwrt \
sulinggg/openwrt:x86_64 /sbin/init

 

5、进入 openwrt 容器修改默认配置

# 进入容器
docker exec -it openwrt bash

# 编辑网络配置
vim /etc/config/network

将 config interface 'lan' 下的 option 根据 eth0 所在网络信息进行修改

option netmask '255.255.255.0' # 子网掩码
option ipaddr '192.168.1.2'   # 为 openwrt 设置 ip 地址
option gateway '192.168.1.1' # 网关
option dns '192.168.1.1'     # DNS

保存退出,重启容器内网络

# 重启网络
/etc/init.d/network restart

 

6、此时 openwrt 已经部署运行完成,可以通过上述配置中的 ip 地址(示例为 192.168.1.2)访问到 openwrt 的 web 界面了

默认账号:root
默认密码:password

 

7、登录 web 界面后,请进入 “网络” -> “接口” -> “LAN” -> “修改”,检查最下方 “基本设置” 中的 “忽略此接口” 要是勾选状态,如果不是,请修改保存

 

8、如何使用 openwrt 作为旁路由?

到这一步应该就知道该怎么做了,这里也简单记录一下几种方案,根据所需情况进行选择:

方法①:可以修改主路由的 dhcp 配置,将其下发的网关与DNS改为 openwrt 的 ip 地址

方法②:关闭主路由的 dhcp,打开 openwrt 的 dhcp,由 openwrt 来分配网络中的 ip 地址和下发相关信息

方法③:直接修改设备上的网络信息,不从 dhcp 获取,直接手动填写

 

9、使用 openwrt 做旁路由后,在 openwrt 中检测网络通畅,但设备不能正常上网?

应该是 openwrt 防火墙的配置问题,因为 docker 的网络环境可能跟正常的硬件网络环境还有些许区别,目前在网上找到以下几个解决方案:

首先进入“网络”->“防火墙”

方法①:在“基本设置”中,“转发” 的选项从 “拒绝” 改为 “接受” 试试
来自:https://github.com/SuLingGG/blog-comments/issues/2#issuecomment-903896998

方法②:“自定义规则”中,注释规则 “iptables -t nat -I POSTROUTING -j MASQUERADE” 试试
来自:https://github.com/SuLingGG/OpenWrt-Docker/issues/13

方法③:“自定义规则”中,添加规则 “iptables -I FORWARD -j ACCEPT”、“iptables -I INPUT -j ACCEPT” 试试
来自:https://www.bilibili.com/video/BV1d3411J7bp

 

posted @ 2022-05-09 15:35  不是豆豆  阅读(13182)  评论(0编辑  收藏  举报
友情链接:迷途