Skip to content

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即可