docker通过macvlan建立多个openwrt容器实现单线多拨

Archives

STEP1:

docker network create -d macvlan \
  --subnet=192.168.8.0/24 \
  --ip-range=192.168.8.118/29 \
  --gateway=192.168.8.1 \
  -o parent=eth0 mn

STEP2:

docker network create -d macvlan \
  --subnet=192.168.8.0/24 \
  --ip-range=192.168.8.158/27 \
  --gateway=192.168.8.129 \
  -o parent=eth0.1 mn1

STEP3:

docker network create -d macvlan \
  --subnet=192.168.8.0/24 \
  --ip-range=192.168.8.188/27 \
  --gateway=192.168.8.161 \
  -o parent=eth0.2 mn2

STEP4:

docker run --name op1 \
        --restart always \
        --network mn \
        -d --privileged=true \
        --ulimit nofile=16384:65536  \
        jekyll/openwrt-n1:latest

STEP5:

docker exec -it op1 /bin/sh
vi /etc/config/network

修改IP地址为192.168.8.116

vi /etc/rc.local

新增

ip link add link eth0 name veth0 type macvlan
ifconfig veth0 up

重启容器。

STEP6:
浏览器配置openwrt。
修改管理密码,清空计划任务,关闭UPNP,添加wan接口,设置PPPOE;
修改防火墙规则,启用FullCone-NAT,转发改为接受,lan和wan防火墙规则全部改为接受;
通过端口转发添加192.168.8.158为DMZ主机(端口留空即可);
添加自定义规格如下:

iptables -t nat -I POSTROUTING -j MASQUERADE

修改LAN接口DHCP范围,起始129,数量30;
修改LAN接口静态地址为192.168.8.129。

STEP7:

docker stop op1
docker network disconnect mn op1
docker network connect mn1 op1
docker restart op1

过程中N1可能重启,需注意各行命令有无执行成功。