从网络命名空间访问 USB 无线适配器

从网络命名空间访问 USB 无线适配器

我有一个无线 USB 适配器,我希望我的 docker 容器仅使用它来连接互联网(而不是计算机自己的无线适配器)。我想如果我知道如何从网络命名空间访问适配器,我就可以做到这一点(因为我可以为 docker 容器创建一个命名空间,然后它也应该可以访问它)。

我的网络知识很基础,所以我尝试阅读大量内容来弄清楚如何做到这一点,但我完全超出了我的能力范围。

到目前为止,我已经尝试了以下方法但没有成功(enx582c80139263是usb无线适配器):

1)创建一个网络命名空间并将无线适配器移动到该命名空间(通过以下操作):

sudo ip netns add ns1
sudo ip link set enx582c80139263 netns ns1
sudo ip netns exec ns1 ip address add 10.0.0.1/24 dev enx582c80139263
sudo ip netns exec ns1 ip link set dev enx582c80139263 up

我尝试直接为所有 ip 创建默认路由,并将网关设置为 10.0.0.1,但都不起作用:

sudo ip netns exec ns1 route add default enx582c80139263
sudo ip netns exec ns1 route add default gw 10.0.0.1 enx582c80139263

我想我可能需要对 ip 路由或 iptables 做一些事情才能使其工作,但我不确定做什么。

2)为容器创建一个网络命名空间,然后创建veth对,其中一个veth位于容器命名空间中,另一个位于全局命名空间中。然后我给他们 IP 地址并使用桥 (brctl) 将无线适配器接口连接到全局名称空间 veth。

sudo ip netns add ns1 
sudo ovs-vsctl add-br br0

sudo ip link add veth0 type veth peer name veth1
sudo ip link set veth0 netns ns1
sudo ovs-vsctl add-port br0 veth1
sudo ovs-vsctl add-port br0 enx582c80139263

sudo ip link set dev veth1 up
sudo ip netns exec ns1 ip link set dev veth0 up
sudo ip netns exec ns1 ip address add 192.168.1.99/24 dev veth0

如果删除网桥,我可以从一个 veth ping 到另一个 veth,但当网桥存在时却不能。不知道为什么,也许需要更改 iptables 或 ip 路由。


我可能会以完全错误的方式处理这个问题......在过去的几天里真正了解了网络和 docker。请让我知道我是否应该以不同的方式处理这个问题

相关内容