Linux系统下手工安装docker版本OpenWRT方法
打开网卡混杂模式和开启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网络名称为ipnetdocker 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网络名称为macnetdocker 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地址,但是我没有成功)。
N1下跑openwrt的容器有个奇怪现象, 如果直接删除openwrt的容器, 会导致宿主机重启, 不知道博主有没有遇到这种问题.
好像听说过
sudo ip addr add dev myipvlan xxx.xxx.xxx.xxx,,,,请问这些xxxxx是填网关还是宿主ip,还是填容器ip,
应该是宿主