docker容器使用旁路由

hello world ! and say something say anything~

最近,我弄了个自动签到。但是,有几个网站需要扶梯。就需要让容器走单独的线路。

打开网卡的混杂模式

ip link set eth0 promisc on

这里 eth0 是网卡名称,你必须改成你机器的实际网卡名称。使用 ifconfig 命令可以查询当前网卡名称。这里开混杂模式是因为 eth0 网卡必须接收不同 IP 的数据包,而且这个网卡下的 IP 可以固定 IP。

创建 macvlan 网络

docker network create -d macvlan --subnet=10.10.10.0/24 --gateway=10.10.10.251 --ip-range 10.10.10.230/28 -o parent=ovs_eth0 clash

这里 -d 指定网络类型为 macvlan--subnet 指定该网络的 CIDR,它必须和路由/主机同处于一个网段。--gateway 指定网关,指定 OpenWRT 地址即可。-o parent 指定要从哪个网卡创建 macvlanmacvlan0 区分网络名称,这个后面创建容器的时候使用。--ip-range 通过限定 IP 范围绕开 IP 冲突。

创建容器

docker run --restart always --name qiandao-clash -p 8923:80 -d --network clash --ip 10.10.10.231 --privileged qdtoday/qd

这里 name 指定容器名称,p 指定外部端口:容器端口。network 指定之前的网络,IP 可以固定 IP。

配置容器网络

编辑 /etc/config/network 文件:

nano /etc/config/network
...
config interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option netmask '255.255.255.0'
option ip6assign '60'
option ipaddr '10.10.10.254'
option gateway '10.10.10.251'
option dns '10.10.10.251'
...

编辑完成后,保存并重启 network 服务 /etc/init.d/network restart

最后,还必须将 br-lan 网口设置成混杂模式(这一步还是在容器中执行):

ip link set br-lan promisc on

如果不行,可以 export ALL_PROXY=’socks5://10.10.10.251:7891’。

最后,我发现 macvlan 网卡不互通。所以,容器都应该在一个网卡下才能顺利访问。

上一篇
下一篇