linux网络环境模拟,用linux的network namespace模拟docker bridge网络模式搭建虚拟网络环境ping不通...

在尝试使用Linux的networknamespace模拟Docker的bridge模式时,创建了两个namespace net0和net1,并通过veth pair连接到bridge br0。尽管配置似乎正确,但net0无法ping通net1。通过tcpdump抓包分析,发现ICMP请求发出但未收到回应。问题可能在于路由或者命名空间间的通信设置。
摘要由CSDN通过智能技术生成

我用linux的network namespace来模拟docker的bridge模式,模拟下图所示结构:(命令里用的是br0来代替bridge)

bVQaun?w=350&h=182

我的命令键入顺序依次是:

ip netns add net0

ip netns add net1

ip link add br0 type bridge

ip link set dev br0 up

ip link add type veth

ip link set dev veth0 netns net0

ip netns exec net0 ip link set dev veth0 name eth0

ip netns exec net0 ip addr add 10.0.1.1/24 dev eth0

ip netns exec net0 ip link set dev eth0 up

ip link set dev veth1 master br0

ip link set dev veth1 up

ip link add type veth

ip link set dev veth0 netns net1

ip netns exec net1 ip link set dev veth0 name eth0

ip netns exec net1 ip addr add 10.0.1.2/24 dev eth0

ip netns exec net1 ip link set dev eth0 up

ip link set dev veth2 master br0

ip link set dev veth2 up

这个时候的环境信息分别是:

root@VM-102-49-ubuntu:/home/ubuntu# ip link show

1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: eth0: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

link/ether 52:54:00:36:e0:7a brd ff:ff:ff:ff:ff:ff

3: docker0: mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default

link/ether 02:42:5a:64:40:f4 brd ff:ff:ff:ff:ff:ff

6: br0: mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000

link/ether 32:e5:fd:61:13:44 brd ff:ff:ff:ff:ff:ff

8: veth1@if7: mtu 1500 qdisc noqueue master br0 state UP mode DEFAULT group default qlen 1000

link/ether 8e:64:2e:b3:10:0b brd ff:ff:ff:ff:ff:ff link-netnsid 0

10: veth2@if9: mtu 1500 qdisc noqueue master br0 state UP mode DEFAULT group default qlen 1000

link/ether 32:e5:fd:61:13:44 brd ff:ff:ff:ff:ff:ff link-netnsid 1

root@VM-102-49-ubuntu:/home/ubuntu# ip netns exec net0 ip addr

1: lo: mtu 65536 qdisc noop state DOWN group default qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

7: eth0@if8: mtu 1500 qdisc noqueue state UP group default qlen 1000

link/ether 9a:ee:e3:4e:a5:74 brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet 10.0.1.1/24 scope global eth0

valid_lft forever preferred_lft forever

inet6 fe80::98ee:e3ff:fe4e:a574/64 scope link

valid_lft forever preferred_lft forever

root@VM-102-49-ubuntu:/home/ubuntu# ip netns exec net1 ip addr

1: lo: mtu 65536 qdisc noop state DOWN group default qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

9: eth0@if10: mtu 1500 qdisc noqueue state UP group default qlen 1000

link/ether fa:d5:1f:6b:ac:e2 brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet 10.0.1.2/24 scope global eth0

valid_lft forever preferred_lft forever

inet6 fe80::f8d5:1fff:fe6b:ace2/64 scope link

valid_lft forever preferred_lft forever

root@VM-102-49-ubuntu:/home/ubuntu# bridge link

8: veth1 state UP @(null): mtu 1500 master br0 state forwarding priority 32 cost 2

10: veth2 state UP @(null): mtu 1500 master br0 state forwarding priority 32 cost 2

看着没什么问题,然而试着用net0去ping net1的时候,却ping失败:

root@VM-102-49-ubuntu:/home/ubuntu# ip netns exec net0 ping -c 3 10.0.1.2

PING 10.0.1.2 (10.0.1.2) 56(84) bytes of data.

--- 10.0.1.2 ping statistics ---

3 packets transmitted, 0 received, 100% packet loss, time 2007ms

这时候试着用tcpdump工具去抓包看了一下:

root@VM-102-49-ubuntu:/home/ubuntu# ip netns exec net1 tcpdump -n -i eth0

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

00:03:23.061964 ARP, Request who-has 10.0.1.2 tell 10.0.1.1, length 28

00:03:23.061979 ARP, Reply 10.0.1.2 is-at fa:d5:1f:6b:ac:e2, length 28

2 packets captured

2 packets received by filter

0 packets dropped by kernel

root@VM-102-49-ubuntu:/home/ubuntu# ip netns exec net0 tcpdump -n -i eth0

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

00:04:00.540777 IP 10.0.1.1 > 10.0.1.2: ICMP echo request, id 18216, seq 1, length 64

00:04:01.548514 IP 10.0.1.1 > 10.0.1.2: ICMP echo request, id 18216, seq 2, length 64

00:04:02.556267 IP 10.0.1.1 > 10.0.1.2: ICMP echo request, id 18216, seq 3, length 64

00:04:05.541908 ARP, Request who-has 10.0.1.2 tell 10.0.1.1, length 28

00:04:05.541961 ARP, Reply 10.0.1.2 is-at fa:d5:1f:6b:ac:e2, length 28

5 packets captured

5 packets received by filter

0 packets dropped by kernel

root@VM-102-49-ubuntu:/home/ubuntu# sudo tcpdump -n -i br0

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on br0, link-type EN10MB (Ethernet), capture size 262144 bytes

00:06:28.266228 IP 10.0.1.1 > 10.0.1.2: ICMP echo request, id 18399, seq 1, length 64

00:06:29.265953 IP 10.0.1.1 > 10.0.1.2: ICMP echo request, id 18399, seq 2, length 64

00:06:30.265941 IP 10.0.1.1 > 10.0.1.2: ICMP echo request, id 18399, seq 3, length 64

00:06:33.269893 ARP, Request who-has 10.0.1.2 tell 10.0.1.1, length 28

00:06:33.269944 ARP, Reply 10.0.1.2 is-at fa:d5:1f:6b:ac:e2, length 28

5 packets captured

5 packets received by filter

0 packets dropped by kernel

也没有看出什么问题,所以求助一下大家为什么会ping失败

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值