绕过软路由的代理
如果在路由器上部署了代理(如 OpenClash),那么它下面的全部设备都处于代理下。问题在于,有些的应用(比如种子下载器)或设备不应该被代理。尽管它能按MAC地址区分是否代理,但这对同一个机器上的不同应用的流量,还是无能为力。
既然这样,那就让特定的应用的网络数据包,拥有特定的MAC地址就好了🤪。
INFO
MACvLAN:一种网络技术。它允许你在一块物理网卡上创建多个虚拟网卡,每个虚拟网卡都有独立的 MAC 地址,从而实现网络隔离和资源共享。
Docker 应用的 MACvLAN
在MACvLAN时,应用不再能使用宿主机的MAC地址和IP,因此需要指定新的IP。首先确定一些信息:局域网IP的范围,应用的IP,宿主机网卡的名称。
假设:局域网的IP范围为192.168.5/24,指定要绕过代理的应用的IP为192.168.5.40
查看宿主机网卡的名称,用以下命令。假设我的输出是ens34: 00:0c:29:f5:16:a3,那么我的网卡名称是ens34。
shell
ip -o link show | grep -v 'docker' | grep -v 'veth' | awk 'NR==2 {print $2, $17}'那么为Docker创建新的网络,根据以下命令:
shell
docker network create \
--driver macvlan \
--subnet=192.168.5.0/24 \
--gateway=192.168.5.1 \
--ipv6 \
--subnet=fd0d:7eb5:2afd::/64 \
--gateway=fd0d:7eb5:2afd::1 \
-o parent=ens34 \
my-macvlan至于IPv6部分,不必修改,因为路由器会为其分配公网IP。
yaml
services:
app:
image: nginx
networks:
my-macvlan:
ipv4_address: 192.168.5.40
networks:
my-macvlan:
external: true在编写Docker Compose时,网络部分如此书写。
连通应用与宿主机
由于以太网的特性,导致使用MACvLAN的应用和宿主机,网络不连通。它和局域网的其他设备可连通。要解决此问题,可以使用一点小技巧,详见参考
应用绕过
来到 Portainer 的某个容器的详情界面,滑倒最底部,就可以看到其MAC地址。或者命令行法:进入容器后ip link show。
OpenWRT 管理页 > OpenClash > 插件设置 > 黑白名单 > 不走代理的局域网设备 Mac
在这里添加刚才获得的MAC地址。