拉取Openwrt镜像

镜像介绍地址https://hub.docker.com/r/kanshudj/n1-openwrtgateway/tags 注意带tags r9字样 就是集成不可描述模块的

  1. docker pull kanshudj/n1-openwrtgateway:r9.10.1 #arm64架构的镜像 X86/64 用不了

宿主机器配置

开启宿主网卡的混杂模式,否则OpenWrt无法连网,主机也ping不通OpenWrt,此种方式重启后会失效,后面会介绍持久化配置方法

  1. ip link set eth0 promisc on #对应关闭是 ip link set eth0 promisc off
  2. #ifconfig eth0 -promisc 这个命令也可以
  3. ifconfig eth0 #查询是否成功 成功标志=>PROMISC
  1. #创建docker macvlan网络
  2. docker network create -d macvlan --subnet=192.168.50.0/24 --gateway=192.168.50.1 -o parent=eth0 macnet
  3. # 查看命令
  4. docker network ls
  5. # 查看 docker 网桥详细
  6. docker network inspect <name>

从宿主的 eth0 网卡虚拟个子网卡接口,并且子网段是 192.168.50.0/24,网关是 192.168.50.1,名字叫 macnet 的 macvlan 网络,

一般eth0只能创建一个macvlan 网络

参数: -d macvlan # 网络模式为macvlan 。 —subnet # 创建大池网段,指定容器获取网段范围。 —ip-range # 创建小池网段,指定容器获取网段范围。 —gateway # 网关,继承宿主机所在网关(主路由IP)。 -o parent=eth0 # 解释:-o -> option / parent=eth0 -> macvlan 继承的物理接口。 -o macvlan_mode bridge # macvlan 模式,默认就是 bridge。 macnet # 自定义该 macvlan 名字。

  1. ```bash
  2. #部署镜像
  3. docker run --restart always --name openwrt -d --network macnet --privileged kanshudj/n1-openwrtgateway:r9.10.1 /sbin/init

运行参数:

-d # 后台运行 —name # 设定该容器名字 —restart always # 自启 —privileged # 容器提权 —network # 指定哪个 macvlan 网络,这里是 macnet —ip # 指定 ip 运行 这里没设置

  1. ```bash
  2. docker exec openwrt ifconfig #查看 openwrt 网络配置
  3. docker exec openwrt route -n #查看 openwrt 路由

OpenWrt容器内配置

  1. docker exec -it openwrt /bin/sh # 进入openwrt容器shell
  2. vim /etc/config/network # 编辑openwrt网络配置

config interface ‘lan’ option type ‘bridge’ option ifname ‘eth0’ option proto ‘static’ option ipaddr ‘192.168.50.2’ option netmask ‘255.255.255.0’ option ip6assign ‘60’ option gateway ‘192.168.50.1’ option dns ‘192.168.50.1’

  1. /etc/init.d/network restart # 重启网络
  2. exit #退出容器shell
  3. docker exec OpenWrt ping 192.168.50.1 # 检查是否能ping通路由器

管理OpenWrt

局域网中用浏览器访问 http://192.168.50.2/ 打开OpenWrt的管理页面
用户:root
密码:password
左侧菜单->网络->接口 ->修改lan
网关和DSN设置为主路由IP 192.168.50.1
image.png
物流设置的桥接接口取消勾选 点击保存&应用
image.png
左侧菜单->网路->防火墙->自定义规则
添加

  1. iptables -t nat -I POSTROUTING -j MASQUERADE #添加后重启防火墙

主路由配置

这里以华硕路由器官方固件的配置为例,在DHCP服务器配置中将默认网关和DNS 设置为 Openwrt的IP
image.png

注意事项

  • 如果主路由采用padavan及开启硬加速, 而用N1做旁路由时可能出现不兼容情况,导致网络卡顿,关闭主路由硬加速可以解决(将主路由padavan的外部网络WAN -> 外网设置选项卡 -> IPv4硬件加速,由OFFLOAD TCP/UDP for LAN/WLAN,修改为OFFLOAD TCP/UDP for LAN
  • 宿主机即armbian下无法上网,不能ping通OpenWrt,解决方法就是将macvlan与eth0桥接,在宿主机Armbian的sh环境下执行下面命令
  1. vim /etc/network/interfaces

auto eth0 iface eth0 inet manual up ip link set eth0 promisc on #这里永久将宿主机的网卡改成混杂模式

auto macvlan iface macvlan inet static address 192.168.50.8 #此处为宿主armbian的IP netmask 255.255.255.0 gateway 192.168.50.2 #openwrt即旁路由的IP dns-nameservers 192.168.50.2 #openwrt即旁路由的IP pre-up ip link add macvlan link eth0 type macvlan mode bridge post-down ip link del macvlan link eth0 type macvlan mode bridge

  1. #修改完后重启网络或者重启系统查看效果。
  2. systemctl restart networking
  • 重启主路由后,宿主机又不能ping通OpenWrt的情况下,宿主机尝试重启网络解决systemctl restart networking
  • 无法访问解析内网的域名 解决方法 打开openwrt的管理页面 左侧菜单->网络 -> DHCP/DNS -> 服务器设置 - 基本设置, 找到”重绑定保护(丢弃RFC1918上行响应数据),取消勾选后 保存&应用
  • 配置完网络后 一定要在主路由的内网IP分配列表查看 openwrt的IP是否对应上面配置的IP,主路由的DHCP服务分配的IP段避开openwrt的IP,这样防止openwrt的IP 与局域网内其他机器的IP 相同,导致莫名其妙的问题

参考链接:
https://leeyr.com/326.html