因以下操作有风险会导致相关设备不能上网,请确保在操作前确定自己拥有足够多的 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