docker安装openwrt
想法: 有一台家用小服务器,在服务器上安装一个软路由系统充当旁路由实现科学~
安装openwrt
1. 网卡配置
bash
# 查看物理网卡名称(一般带有路由器分配的ip)
ifconfig
# 设置网卡混杂模式PROMISC
ifconfig enp4s0 promisc
# 查看网卡标识是否设置成功
ifconfig |grep enp4s0
2. 创建macvlan类型docker网络
参数设置:
- 子网subnet: 局域网地址段
- 网关gateway: 主路由器的ip地址
bash
docker network create -d macvlan --subnet=192.168.101.0/24 --gateway=192.168.101.1 -o parent=enp4s0 openwrt_net
3. 启动容器与lan配置
镜像使用x86_64/amd64版本,仓库地址: https://github.com/SuLingGG/OpenWrt-Docker
bash
# 拉取镜像
docker pull registry.cn-shanghai.aliyuncs.com/suling/openwrt:x86_64
# 创建数据卷
docker volume create openwrt_volume
# 启动容器[/etc涵盖了openwrt配置数据]
docker run --restart always --name openwrt -v openwrt_volume:/etc -d --network openwrt_net --privileged registry.cn-shanghai.aliyuncs.com/suling/openwrt:x86_64 /sbin/init
# 进入容器
docker exec -it openwrt /bin/bash
# 配置Lan口网络
vim /etc/config/network
# config interface 'lan'
# option type 'bridge'
# option ifname 'eth0'
# option proto 'static'
# option netmask '255.255.255.0'
# option ip6assign '60'
# option ipaddr '192.168.101.111' # openwrt系统的地址
# option gateway '192.168.101.1' # 局域网主路由的地址
# option dns '192.168.101.1' # 局域网主路由的地址, 也可以是公共公益DNS服务地址
保存后, exit退出容器, 在宿主机环境重启docker容器, ping或者访问192.168.101.111
测试, 默认账户密码 root/password
TIP
创建docker数据卷挂载,不是很稳定,因此可以创建一个image镜像来作为一个备份
- 保存openwrt容器到新镜像openwrt_new
docker commit openwrt openwrt_new:latest
- 从新镜像启动容器
docker run --restart always --name openwrt -d --network openwrt_net --privileged openwrt_new:latest /sbin/init
旁路由设置
要将openwrt设置为旁路由,需要三个必要配置
1. 关闭桥接
【网络】-【接口】-【物理设置】,将【桥接接口】选项去掉 保存
2. 新增防火墙自定义规则
【网络】-【防火墙】-【自定义规则】增加一条规则
bash
iptables -t nat -I POSTROUTING -j MASQUERADE
3. 设置公共DNS
这个步骤可以省略,前面在Lan口设置中已设置为主路由器的IP地址为DNS
【网络】-【接口】-【基本配置】-【使用自定义的 DNS 服务器】配置为一个公共dns. eg: 114.114.114.114
设备连接方式
已小米手机举例: 连接主路由->设置ip地址为静态->路由器地址
和DNS1地址
填写为openwrt软路由容器地址192.168.101.111
遇到的问题
- openclxsh内核加载失败
bash
# 进入容器
docker exec -it openwrt /bin/bash
# 进入内核安装目录
cd /etc/openclash/core/
# 下载对应内核安装包
# release地址 https://github.com/vernesong/OpenClash/releases/tag/Clash
wget https://github.com/vernesong/OpenClash/releases/download/Clash/clash-linux-amd64.tar.gz
# wget https://github.com/vernesong/OpenClash/releases/download/Clash/clash-linux-armv8.tar.gz
# 解压内核安装包
tar -zxvf clash-linux-armv8.tar.gz
# 给予最高权限
chmod 777 clash
# 退出容器启动openclxsh即可