ipvlan 2层与3层模型
  mPcyh9OXzYGu 2023年11月02日 25 0


IPVLAN 是 Linux 内核中的一种网络虚拟化技术,它允许你在同一物理设备上创建多个虚拟网络接口,这些接口可以共享同一个 MAC 地址。IPVLAN 提供了两种工作模式:L2 模式和 L3 模式。

在 L2 模式下,所有的 IPVLAN 接口都在同一广播域内,它们可以像在同一个交换网络中一样直接通信。这类似于传统的以太网网络,其中的设备可以直接通过 MAC 地址通信。

ip link add ipvlan0 link eth0 type ipvlan mode l2
ip link set ipvlan0 up
ip addr add 192.0.2.1/24 dev ipvlan0

ip link add ipvlan1 link eth0 type ipvlan mode l2
ip link set ipvlan1 up
ip addr add 192.0.2.2/24 dev ipvlan1
root@vm-133:~# ip r
default via 192.168.9.1 dev eth0 onlink 
192.0.2.0/24 dev ipvlan0 proto kernel scope link src 192.0.2.1 
192.0.2.0/24 dev ipvlan1 proto kernel scope link src 192.0.2.2 
192.168.9.0/24 dev eth0 proto kernel scope link src 192.168.9.133 
root@vm-133:~# ping 192.0.2.2
PING 192.0.2.2 (192.0.2.2) 56(84) bytes of data.
64 bytes from 192.0.2.2: icmp_seq=1 ttl=64 time=0.012 ms
^C
--- 192.0.2.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.012/0.012/0.012/0.000 ms
root@vm-133:~# ping 192.0.2.2 -I ipvlan0
PING 192.0.2.2 (192.0.2.2) from 192.0.2.1 ipvlan0: 56(84) bytes of data.
^C
--- 192.0.2.2 ping statistics ---
75 packets transmitted, 0 received, 100% packet loss, time 75765ms

在 L2 模式下,所有的 IPVLAN 接口都在同一广播域中,并且共享同一 MAC 地址。这意味着,当 ipvlan0 接口发送一个数据包到 ipvlan1 接口时,数据包将通过硬件接口(例如 eth0)发出,但由于 ipvlan1 接口共享同一 MAC 地址,它将忽略这个数据包

删除已存在的 IPVLAN 接口:
ip link delete ipvlan0
ip link delete ipvlan1
创建 L3 模式的 IPVLAN 接口:
ip link add ipvlan0 link eth0 type ipvlan mode l3
ip link add ipvlan1 link eth0 type ipvlan mode l3
启动 IPVLAN 接口:
ip link set ipvlan0 up
ip link set ipvlan1 up
为 IPVLAN 接口分配 IP 地址:
ip addr add 192.0.2.1/24 dev ipvlan0
ip addr add 192.0.2.2/24 dev ipvlan1

root@vm-133:~# ip r
default via 192.168.9.1 dev eth0 onlink 
192.0.2.0/24 dev ipvlan0 proto kernel scope link src 192.0.2.1 
192.0.2.0/24 dev ipvlan1 proto kernel scope link src 192.0.2.2 
192.168.9.0/24 dev eth0 proto kernel scope link src 192.168.9.133 
root@vm-133:~#  ping 192.0.2.2 -I ipvlan0
PING 192.0.2.2 (192.0.2.2) from 192.0.2.1 ipvlan0: 56(84) bytes of data.

 ^C
--- 192.0.2.2 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3078ms

在 L3 模式下,每个 IPVLAN 接口都在自己的 L3 域中。即使它们共享同一物理设备和 MAC 地址,它们也不能直接通信。这是因为在 L3 模式下,IPVLAN 接口是通过 IP 地址进行通信的,而不是通过 MAC 地址。这意味着,即使两个 IPVLAN 接口在同一个网络命名空间中,它们也不能直接通信,除非有一个路由进程或设备将数据包从一个接口路由到另一个接口。

这种设计使 L3 模式的 IPVLAN 能够在网络层(即 IP 层)提供隔离,这是 L2 模式无法提供的。这对于某些使用场景来说是非常有用的,例如,在云环境中,你可能希望每个虚拟机或容器都在自己的网络命名空间中,并且只能通过 IP 地址进行通信。

为了使它们能够通信,我们需要将数据包从一个 IPVLAN 接口路由到另一个 IPVLAN 接口,这需要使用网络命名空间和路由规则。

#创建网络命名空间:
ip netns add ns1
ip netns add ns2
#创建 L3 模式的 IPVLAN 接口,然后将它们移动到新的网络命名空间:
ip link add ipvlan0 link eth0 type ipvlan mode l3
ip link set ipvlan0 netns ns1
ip link add ipvlan1 link eth0 type ipvlan mode l3
ip link set ipvlan1 netns ns2
#在新的网络命名空间中启动 IPVLAN 接口,并为它们分配 IP 地址:
ip netns exec ns1 ip link set ipvlan0 up
ip netns exec ns1 ip addr add 192.0.2.1/24 dev ipvlan0
ip netns exec ns2 ip link set ipvlan1 up
ip netns exec ns2 ip addr add 192.0.2.2/24 dev ipvlan1

ipvlan 2层与3层模型_命名空间

不通网段网络通信,需要配置网关,否则不通,之后就变成一个路由器了

ip netns add net1
ip netns add net2

ip link add ipv1 link eth0 type ipvlan mode l3
ip link add ipv2 link eth0 type ipvlan mode l3

ip link set ipv1 netns net1
ip link set ipv2 netns net2
ip netns exec net1 ip link set ipv1 up
ip netns exec net2 ip link set ipv2 up

ip netns exec net1 ip addr add 10.0.1.10/24 dev ipv1
ip netns exec net2 ip addr add 192.168.1.10/24 dev ipv2
ip netns exec net1 ip route add default dev ipv1
ip netns exec net2 ip route add default dev ipv2
sysctl -w net.ipv4.ip_forward=1

ipvlan 2层与3层模型_net_02

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  Yoru5qB4TSKM   2023年12月10日   39   0   0 服务器重启IP
  ozzp9aSSE46S   2023年11月30日   30   0   0 DNSIPPod
  48fXx4UfWSFg   2023年12月06日   54   0   0 bcIPbundle
  aYmIB3fiUdn9   2023年12月08日   50   0   0 客户端IPNATlvs
mPcyh9OXzYGu