下载docker镜像
sudo docker pull registry.cn-shanghai.aliyuncs.com/suling/openwrt:x86_64
建立macvlan
docker network create -d macvlan --subnet=192.168.123.0/24 --gateway=192.168.123.1 -o parent=enp4s0f1 macnet
开启网卡混杂模式
ifconfig enp4s0f1 promisc
方法一
建立OpenWrt的配置文件
mkdir -p /opt/openwrt
vim /opt/openwrt/network
按自己的网络情况修改内容
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config globals 'globals'
option packet_steering '1'
config interface 'lan'
option type ''
option ifname 'eth0'
option proto 'static'
option netmask '255.255.255.0'
option ipaddr '192.168.123.10'
option gateway '192.168.123.1'
option dns '192.168.123.1'
config interface 'vpn0'
option ifname 'tun0'
option proto 'none'
运行Docker run启动容器
docker run --restart always --name openwrt -d --network macnet --privileged --ip 192.168.123.10 -v /opt/openwrt/network:/etc/config/network registry.cn-shanghai.aliyuncs.com/suling/openwrt:x86_64 /sbin/init
在【网络】-【防火墙】-【自定义规则】增加规则:
iptables -t nat -I POSTROUTING -j MASQUERADE

方法二
运行Docker run启动容器
docker run --restart always --name openwrt -d --network macnet --privileged --ip 192.168.123.10 -v /opt/openwrt/network:/etc/config/network registry.cn-shanghai.aliyuncs.com/suling/openwrt:x86_64 /sbin/init
创建docker后进入容器
docker exec -it openwrt /bin/bash
vim /etc/config/network
按自己的网络情况修改内容
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config globals 'globals'
option packet_steering '1'
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.123.10'
option gateway '192.168.123.1'
option dns '192.168.123.1'
config interface 'vpn0'
option ifname 'tun0'
option proto 'none'
重启容器,进入web页面
将【网络】-【接口】-【物理设置】,将【桥接接口】选项去掉

在【网络】-【防火墙】-【自定义规则】增加规则:
iptables -t nat -I POSTROUTING -j MASQUERADE

安装ADG
使用以下docker run命令直接安装
docker run --name AdGuard_Home -d --network school --privileged --ip 192.168.123.5 -v /opt/AdGuard_Home/work:/opt/adguardhome/work -v /opt/AdGuard_Home/conf:/opt/adguardhome/conf --restart=always -d adguard/adguardhome
设置宿主机与Docker通信
配置一个.sh
例如:vi /home/macvlan-setup.sh
输入以下内容
!/bin/bash
ifconfig enp4s0f1 promisc
ip link add macvlan-proxy link enp4s0f1 type macvlan mode bridge
ip addr add 192.168.123.20 dev macvlan-proxy
ip link set macvlan-proxy up
ip route add 192.168.123.10 dev macvlan-proxy
ip route add 192.168.123.5 dev macvlan-proxy
可以依据需要继续添加容器的地址,例如:
ip route add 192.168.123.XXX dev macvlan-proxy
enp4s0f1
是物理网卡的名称
192.168.123.20
是宿主机通信地址,可以是其他地址也可以是物理网卡的地址
如果旁路由被DHCP做为网关需要添加
route add default gw 192.168.
123
.10 macvlan-proxy
添加执行权限
chmod +x /home/macvlan-setup.sh
创建systemctl
vi /etc/systemd/system/macvlan-setup.service
填入
[Unit]
Description=Setup Macvlan Network
After=network.target
[Service]
Type=oneshot
ExecStart=/home/macvlan-setup.sh
[Install]
WantedBy=multi-user.target

启动这个守护进程
sudo systemctl enable macvlan-setup.service
sudo systemctl start macvlan-setup.service
现在openwrt和adg容器是全功能且能与宿主机通信的状态