1、开启网卡混杂模式

1.1、网卡设置

  • 查看网卡名称
1
ifconfig
  • 开启网卡混杂模式
1
sudo ip link set end0 promisc on
  • 检测网卡是否开启了混杂模式
1
ifconfig end0
  • 创建 docker 网卡,创建 WAN 端口的 macvlan,名称为 macnet0
1
docker network create -d macvlan --subnet=192.168.5.0/24 --gateway=192.168.5.1 -o parent=end0 macnet0
  • 验证是否创建成功
1
docker network ls

1.2、设置开机自启

注意,这里的配置会在重启后失效,要重启后仍然生效,需要添加到启动参数中

  • 启动脚本,修改文件 /etc/rc.local,并添加可执行权限
1
sudo vim /etc/rc.local
1
sudo chmod u+x /etc/rc.local
  • 添加开启网卡混杂模式的命令
1
2
ip link set end0 promisc on
exit 0
  • 创建启动服务
1
sudo vim /etc/systemd/system/rc-local.service
  • rc-local.service 启动服务内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
  • 启动 systemd 并设置开机启动
1
sudo systemctl enable rc-local
1
sudo systemctl start rc-local.service
1
sudo systemctl status rc-local.service

2、部署 OpenWrt

2.1、拉取镜像

镜像地址,具体型号根据自己的机器自行选择。

1
docker pull sulinggg/openwrt:armv8

2.2、部署 OpenWrt

1
docker run -d --restart always --network macnet0 --privileged --name openwrt sulinggg/openwrt:armv8 /sbin/init

2.3、进入容器,修改网络配置

  • 输入以下命令进入容器
1
docker exec -it openwrt /bin/bash
  • 编辑网络配置文件
1
vim /etc/config/network
1
2
3
4
5
6
7
8
config interface 'lan'
option ifname 'eth0'
option proto 'static'
option netmask '255.255.255.0'
option ip6assign '60'
option ipaddr '192.168.31.110' # 修改一个静态地址,要和主路由器地址在同一个网段下
option gateway '192.168.31.1' # 修改为主路由器地址
option dns '192.168.31.1' # 修改为主路由器地址
  • 修改完成后保存,重启 OpenWrt 网络
1
/etc/init.d/network restart

3、配置 OpenWrt

3.1、接口设置

网络 -> 接口 -> LAN

  • 基本设置

基本设置中,使用自定义的 DNS 服务器,内容删除。下方基本设置默认应该是忽略此接口已打勾,IPV6 设置全部已禁用。

  • 物理配置

物理配置中,取消勾选桥接接口;在最下方的基本配置中,关闭 DHCP,也就是忽略此接口需打勾;最下方的 IPV6 设置中,路由通告服务、DHCPv6 服务和 NDP 代理全部选择已禁用。

设置完成,保存并应用。

3.2、防火墙添加配置

网络 -> 防火墙 -> 自定义规则,添加下面这条规则

1
iptables -t nat -I POSTROUTING -j MASQUERADE

设置完成,保存并应用。

3.3、DNS 设置

网络 -> Turbo ACC 网络加速设置

打开 DNS 缓存,其他设置保存默认即可。

设置完成,保存并应用。

参考文章:
使用Docker安装OpenWrt
Docker中OpenWrt旁路由安装教程