Macvlan网络实现Docker分流以及IPv6
Macvlan
使用macvlan网络模式创建docker,使容器拥有独立ip,便于分流适用场景;或者支持 IPv6;
家里主路由网关是192.168.31.1,旁路由网关是192.168.31.3,因nas需要科学环境比如拉docker镜像、刮削等等,如何做到单独让qb、tr不走科学网络?常见的方法是使用旁路由的分流规则,比如openclash、passwall等或者爱快主路由上根据协议、域名分流等等,但是这种方法还是难免有一些流量偷走科学流量,如果docker容器可以有独立的ip,单独设置网关是最保险的措施。
查看网卡名称,使用 ifconfig 命令:
主路由的 ipv6 模式改成无状态模式或者叫 SLAAC,这样子可以保证 ipv6 地址前缀变化时容器跟着变化!
命令
创建macvlan命令:
docker network create \
-d macvlan \
--subnet=192.168.31.0/24 --gateway=192.168.31.3 \
--ipv6 --subnet=fd00::/64 \
-o parent=ens7 \
macnet
--subnet
家里V4子网网段--gateway
家里V4不走科学环境的网关--ipv6 --subnet
家里V6子网网段,这是个内网段,创建容器时会向父网卡dhcp获取真实ip。如果要指定,增加:--subnet=fd0d:7eb5:2afd::/64
和--gateway=fd0d:7eb5:2afd::1
。第二组--subnet
和--gateway
是为 IPv6 配置的 ULA 网段,根据上面的内容,这部分是私有网段,与宿主机的 IP 设置和路由器设置无关,不会用于公网通信,因此可以自行设置。容器会自动从上级路由获取公网 IPv6 地址。-o parent
指定了出口网卡,需要通过ifconfig
或ip a
命令查看实际的出口网卡,还可能是en0
、eth0
等等,务必修改为正确的网卡。macnet 这个随意,就是macvlan网络的网卡名称
创建容器命令:
docker run --name qbittorrent \
--network macnet \
-v /vol1/1000/docker/qb:/config \
-v /vol2/1000/download:/downloads \
--ip=192.168.31.29 \
--restart=always \
--privileged=true -d \
linuxserver/qbittorrent:4.6.5
容器不需要额外配置ipv6地址,会自动获取
命令注释:
--name
容器名称,随意就好,通过这个名字可以分辨哪些容器就行--net=macnet
macnet是上一步创建的macvlan网卡名称--ip=192.168.31.29
ip地址根据实际情况更改Macvlan 模式下无需配置端口映射。
Compose:
version: '3'
services:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- WEBUI_PORT=8080
volumes:
- /path/to/appdata/config:/config
- /path/to/downloads:/downloads
restart: unless-stopped
networks: # 指定网络
bridge-host:
ipv4_address: 192.168.31.202
dns: #可选,指定 dns 服务器
- 223.5.5.5
- 119.29.29.29
- "2400:3200::1"
- "2402:4e00::"
networks:
bridge-host: # 引用之前创建的外部网络
external: true
至此,docker 应该可以顺利使用 IPv6 网络了,可以进入容器内部通过 ifconfig
或 ip a
命令查看网络配置是否正常。