打开网卡混杂模式和开启pppoe,可以将下列代码增加到/etc/rc.local的exit 0之前,达到开机自动打开混杂模式。

sudo ip link set eth0 promisc on
sudo ip link set wlan0 promisc on
sudo modprobe pppoe

利用无线网卡创建Docker虚拟网卡实现容器内OpenWrt联网。注意执行命令之前替换ip地址和网关。

#创建IPVlan虚拟网卡,重启失效,可以增加到/etc/rc.local达到开机启动目的。
sudo ip link add ipvlan link wlan0 type ipvlan mode l2
sudo ifconfig ipvlan up
sudo ip addr add dev myipvlan xxx.xxx.xxx.xxx

#为Docker创建ipvlan网络名称为ipnet
docker network create -d ipvlan \
--subnet=xxx.xxx.xxx.0/24 --gateway=xxx.xxx.xxx.xxx \
--ipv6 --subnet=fe80::/16 --gateway=fe80::1 \
-o parent=wlan0 \ #此处绑定无线网卡
-o macvlan_mode=bridge \
ipnet

利用有线网卡创建Docker虚拟网卡实现容器内OpenWrt联网。注意执行命令之前替换ip地址和网关。

#创建MACVlan虚拟网卡,重启失效,可以增加到/etc/rc.local达到开机启动目的。
sudo ip link add macvlan link eth0 type macvlan mode bridge
sudo ip link set macvlan up

#为Docker创建macvlan网络名称为macnet
docker network create -d macvlan \
-subnet=xxx.xxx.xxx.0/24 --gateway=xxx.xxx.xxx.xxx \
--ipv6 --subnet=fe80::/16 --gateway=fe80::1 \
-o parent=eth0 \ #此处绑定有线网卡
-o macvlan_mode=bridge \
macnet

启动OpenWRT容器绑定上面任意一个网卡

docker run -d --name="OpenWRT" \
--restart unless-stopped \
--network macnet \  #选择前面创建的macnet或者ipnet网卡,注意宿主机使用无线连接不可以使用macnet。
--privileged \
kanshudj/n1-openwrtgateway:r9.10.1 \ #此处为aarch64版本OpenWRT容器镜像,可以更换为其他对应版本。
/sbin/init

增加另一个网卡到OpenWRT

docker network connect ipnet ipnet

进入容器修改/etc/config/network文件修改OpenWRT的访问地址

docker exec -i OpenWRT /bin/bash

注意:macnet的网卡可以正确获得DHCP分配的ip地址,ipnet的网卡只能绑定ip使用(据说可以利用dhcp clientid获取dhcp分配的ip地址,但是我没有成功)。

4 对 “Linux系统下手工安装docker版本OpenWRT方法”的想法;

  1. N1下跑openwrt的容器有个奇怪现象, 如果直接删除openwrt的容器, 会导致宿主机重启, 不知道博主有没有遇到这种问题.

发表回复