docker 运行 openwrt
openwrt 单网卡 旁路由
以下所有 ip subnet gateway parent 根据自己网络环境调整
配置 docker
ubuntu 安装 docker
sudo apt install docker.io
加载 TPROXY 内核模块为支持 UDP 透明代理
sudo modprobe -v xt_TPROXY
创建一个名为 macvlan0 的新 macvlan 网络
# 网段与网关请替换成自己所处的网络 ens34请替换成自己的接口名
sudo docker network create \
-d macvlan \
--subnet=192.168.3.0/24 \
--gateway=192.168.3.1 \
-o parent=ens34 macvlan0
验证是否已创建 macvlan0 网络
sudo docker network ls
检查网络详细信息
sudo docker network inspect macvlan0
运行透明代理版 openwrt
# ip请替换成自己所处的网段ip
sudo docker run \
--privileged \
--name='openwrt' \
--net=macvlan0 \
--ip=192.168.3.254 \
--detach=true \
luoqeng/openwrt:18.06.2 \
/sbin/init
当前各种自发明加密协议基本残废,跑在 TLS 协议里面比较稳妥,推荐搭配。
运行原版 openwrt
#导入镜像
sudo docker import \
https://downloads.openwrt.org/releases/18.06.2/targets/x86/64/openwrt-18.06.2-x86-64-generic-rootfs.tar.gz \
openwrt:18.06.2
#创建并启动容器
sudo docker run -d \
--restart unless-stopped \
--network macvlan0 \
--ip=192.168.3.254 \
--privileged \
--name openwrt \
openwrt:18.06.2 \
/sbin/init
注意:Docker 的 IPAM 驱动程序不知道外部 DHCP 客户端已在使用的 IP 地址,从而导致子网中可能存在 IP 地址冲突。不应该让外部 DHCP 服务器与您在创建 macvlan 网络时配置的同一子网分配 IP 地址。但我们是单网卡路由忽略这一点,取后面几位 IP 尽量避免冲突 :)
验证 openwrt 是否正在运行
sudo docker ps
配置 openwrt
#进入容器
sudo docker exec -it openwrt /bin/sh
#编辑 /etc/config/network
config interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option ipaddr '192.168.3.254' #请替换成 docker run --ip 的参数
option netmask '255.255.255.0'
option ip6assign '60'
option gateway '192.168.3.1' #请替换成 docker network create --gateway 的参数
option dns '127.0.0.1'
#重启网络生效
/etc/init.d/network restart
配置 docker host (可选)
创建一个名为 macvlan1 的新 macvlan 网络,让其通过 openwrt 上网
sudo ip link add macvlan1 link ens34 type macvlan mode bridge
删除老的路由
sudo ip route del 192.168.3.0/24
设置 macvlan1 ip
sudo ip addr add 192.168.3.253/24 dev macvlan1
启用 macvlan1
sudo ip link set macvlan1 up
删除以前的默认网关
sudo ip route del default
添加新的默认网关
sudo ip route add default via 192.168.3.254 dev macvlan1
测试网络
ping www.baidu.com
查看ip
ip a
查看路由
ip route
网络内其他主机上网
-
默认 openwrt dhcp 已经开启,老的的 dhcp 服务关闭即可。
-
也可手动设置,网关与DNS设置成 192.168.3.254 即可。
-
openwrt root 密码 passwd@#2048,浏览器输入 192.168.3.254 访问 LuCI 自行添加 Shadowsocks 服务器。
其他
参考: https://hicu.be/docker-networking-macvlan-bridge-mode-configuration