如何使用内部网络将Linux网络命名空间与其他VM连接?

如何使用内部网络将Linux网络命名空间与其他VM连接?

我在 Virtualbox 中有两个与内部网络连接的虚拟机(VM)。在第一个上,我有名为 n0 的网络命名空间。我想将此命名空间连接到网络接口,最后使用内部连接将其与第二个虚拟机 (VM2) 连接。网络示例:

网络示例

如您所见,我希望在 192.168.127.2/24 和 192.168.127.1/24 之间建立连接。

我尝试使用 openvswitch 解决这个问题(不起作用):

sudo ovs-vsctl add-br br0 
sudo ifconfig br0 up
sudo ip link add veth type veth peer name veth-br 
sudo ip link set veth netns ns0
sudo ifconfig veth-br up
sudo ovs-vsctl add-port br0 veth-br
sudo ip netns exec ns0 ip addr add 192.168.127.2/24 dev veth
sudo ip netns exec ns0 ip link set veth up
sudo ip addr add 192.168.127.3/24 dev br0
sudo ovs-vsctl add-port br0 eth0 

你能帮我解决这个问题吗?您知道如何改进我的解决方案才能正常工作吗?

扩展网络拓扑:

在此输入图像描述

ns1 和 ns0 之间存在有效连接,但我尝试将 ns1 与 192.168.127.1/24 连接。为此,除了 192.168.127.2/24 和 192.168.127.1/24 之间的连接之外,我还需要添加静态路由,但我做不到。我打算尝试使用 openvswitch 和命令来做到这一点:

sudo ip netns exec ns1 route add -net 192.168.127.0/24 gw 192.168.1.10 dev wlan1
sudo ip route add 192.168.1.0/24 via 192.168.127.2 dev br0 

其中 br0 是 openvswitch - 桥。

答案1

(对问题进行更改是添加澄清的可接受方式,所以这完全没问题)

但我还是不明白为什么你需要 openvswitch。我的做法是(注意我如何将网络段表示为线,清楚地显示这些段在网络设计中很重要):

192.168.1.*/24                      192.168.127.*/24
   WLAN                                Internal
     :                                    |
     :  +------------------------------+  |  +----------------------+
     :  | +--------------------------+ |  |  |                      |
     +--|-|- wlan0 192.168.1.1       | |  +--|- 192.168.127.1 eth0  |
     :  | |                      ns1 | |  |  |                      |
     :  | +--------------------------+ |  |  |                  VM2 |
     :  |                              |  |  +----------------------+
     :  | +--------------------------+ |  |  
     +--|-|- wlan1 192.168.1.10      | |  |  
     :  | |                          | |  |
     :  | |  macvlan0 192.168.127.2 -|-|--+
     :  | |  (to eth0)           ns0 | |  |
     :  | +--------------------------+ |  |
     :  |                              |  |
     :  |        eth0 192.168.127.4 ---|--+
     :  |                              |  |
     :  |                          VM1 |  |
        +------------------------------+

因此VM1、ns0和VM2可以在virtualbox内部网络上看到彼此。假如说你的目标,我还不太清楚。

所以你创建一个macvlanwitheth0作为 master ,并将其移到里面ns0

# In VM1, main namespace
ip link add macvlan0 link eth0 type macvlan mode bridge
ip link set macvlan0 netns ns0
ip -n ns0 addr add 192.168.127.2/24 dev macvlan0
ip -n ns0 link set macvlan0 up
ip -n ns0 show macvlan0

或者您只是使用内部网络上的 DHCP 服务器来让 macvlan 获取其 IP,运行 DHCP 客户端等。有多种方法可以使上述内容永久化,具体取决于您的发行版。

该解决方案取决于与 virtualbox 内部网络配合使用的 macvlan(它们可能会也可能不会;正如我所写,virtualbox 网络很奇怪)。如果它不起作用,我接下来要尝试的就是废弃内部网段,并尝试使用虚拟机桥接网段。

不需要 openvswitch,而且我实际上没有看到任何将 openvswitch 与 virtualbox 内部网络结合起来的简单方法。

因此,如果您只想使用 openvswitch 因为您在某处读到它并且发现它很有趣,那么也许您不必在这里使用它。

相关内容