BlueXIII's Blog

热爱技术,持续学习

0%

Linux虚拟网络学习笔记

参考文档

tun/tap

1
2
3
4
5
6
7
8
9
10
11
12
13
# 创建 tap 
ip tuntap add dev tap0 mode tap
# 创建 tun
ip tuntap add dev tun0 mode tun

# 删除 tap
ip tuntap del dev tap0 mode tap
# 删除 tun
ip tuntap del dev tun0 mode tun

# 例如使用ip link命令也可以删除tun/tap设备
ip link del tap0
ip link del tun0

netns

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
ip netns list

# 添加并启动虚拟网卡tap设备
ip tuntap add dev tap0 mode tap
ip tuntap add dev tap1 mode tap
ip link set tap0 up
ip link set tap1 up

# 配置IP
ip addr add 10.0.0.1/24 dev tap0
ip addr add 10.0.0.2/24 dev tap1

# 添加netns
ip netns add ns0
ip netns add ns1

# 将虚拟网卡tap0,tap1分别移动到ns0和ns1中
ip link set tap0 netns ns0
ip link set tap1 netns ns1

# 指定netns后查看网卡
ip netns exec ns0 ip a
ip netns exec ns1 ip a

# 重新启动网卡并设置IP
ip netns exec ns0 ip link set lo up
ip netns exec ns0 ip link set tap0 up
ip netns exec ns0 ip addr add 10.0.0.1/24 dev tap0

ip netns exec ns1 ip link set lo up
ip netns exec ns1 ip link set tap1 up
ip netns exec ns1 ip addr add 10.0.0.2/24 dev tap1

# 指定netns后ping
ip netns exec ns0 ping 10.0.0.1
ip netns exec ns1 ping 10.0.0.2

# 清理
ip netns delete ns0
ip netns delete ns1

vethpair

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 添加netns
ip netns add ns0
ip netns add ns1

# 创建一对veth
ip link add veth0 type veth peer name veth1

# 将veth移动到netns中
ip link set veth0 netns ns0
ip link set veth1 netns ns1

# 指定netns后查看网卡
ip netns exec ns0 ip a
ip netns exec ns1 ip a

# 启动
ip netns exec ns0 ip link set veth0 up
ip netns exec ns1 ip link set veth1 up

# 查看路由表
ip netns exec ns0 route -n
ip netns exec ns1 route -n

# 修改路由出口为veth
ip netns exec ns0 ip route change 10.0.0.0/24 via 0.0.0.0 dev veth0
ip netns exec ns1 ip route change 10.0.0.0/24 via 0.0.0.0 dev veth1

# 跨ns互ping
ip netns exec ns0 ping 10.0.0.2
ip netns exec ns1 ping 10.0.0.1

# 清理
ip netns delete ns0
ip netns delete ns1

bridge

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 安装bridge-utils
yum install -y bridge-utils

# 添加网桥
brctl addbr br0

# 启动网桥
ip link set br0 up

# 新增三个netns
ip netns add ns0
ip netns add ns1
ip netns add ns2

# 新增两对veth
ip link add veth0-ns type veth peer name veth0-br
ip link add veth1-ns type veth peer name veth1-br
ip link add veth2-ns type veth peer name veth2-br

# 将veth的一端移动到netns中
ip link set veth0-ns netns ns0
ip link set veth1-ns netns ns1
ip link set veth2-ns netns ns2

# 将netns中的本地环回和veth启动并配置IP
ip netns exec ns0 ip link set lo up
ip netns exec ns0 ip link set veth0-ns up
ip netns exec ns0 ip addr add 10.0.0.1/24 dev veth0-ns

ip netns exec ns1 ip link set lo up
ip netns exec ns1 ip link set veth1-ns up
ip netns exec ns1 ip addr add 10.0.0.2/24 dev veth1-ns

ip netns exec ns2 ip link set lo up
ip netns exec ns2 ip link set veth2-ns up
ip netns exec ns2 ip addr add 10.0.0.3/24 dev veth2-ns

# 查看网卡
ip netns exec ns0 ip a
ip netns exec ns1 ip a
ip netns exec ns2 ip a

# 查看路由表
ip netns exec ns0 route -n
ip netns exec ns1 route -n
ip netns exec ns2 route -n

# 将veth的另一端启动并挂载到网桥上
ip link set veth0-br up
ip link set veth1-br up
ip link set veth2-br up
brctl addif br0 veth0-br
brctl addif br0 veth1-br
brctl addif br0 veth2-br

# 查询网桥
brctl show

# 添加iptables规则
iptables -A FORWARD -i br0 -j ACCEPT

# 测试网络连通性
ip netns exec ns0 ping 10.0.0.1
ip netns exec ns0 ping 10.0.0.2
ip netns exec ns0 ping 10.0.0.3

localhost

1
2
3
4
5
6
7
8
# 查本地的路由表
ip route show table local

# 查主路由表
ip route show table main

# 环回网络接口
ifconfig lo