Linux虚拟网络1-namespace实践

一、tap

tap(虚拟以太设备)位于二层,tun位于三层,两者都是操作系统内核中的虚拟网络设备。

Linux使用tun模块实现了tun/tap,要想使用Linux命令行操作一个tap,首先需要检查系统是支持/加载了tum模块。

#输入modinfo tun,如果有输出,说明系统具有tun模块
[root@localhost ~]# modinfo tun
filename:       /lib/modules/3.10.0-1127.8.2.el7.x86_64/kernel/drivers/net/tun.ko.xz
alias:          devname:net/tun
alias:          char-major-10-200
license:        GPL
author:         (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
description:    Universal TUN/TAP device driver
retpoline:      Y
rhelversion:    7.8
srcversion:     E26A36A927427B2BAE3FB17
depends:        
intree:         Y
vermagic:       3.10.0-1127.8.2.el7.x86_64 SMP mod_unload modversions 
signer:         CentOS Linux kernel signing key
sig_key:        FF:31:8C:E9:B8:32:4E:45:57:70:C2:6E:E8:BF:60:81:39:FF:A9:28
sig_hashalgo:   sha256

#lsmod检查是否加载了tun模块
[root@localhost ~]# lsmod | grep tun

#modprobe命令进行加载
[root@localhost ~]# modprobe tun
[root@localhost ~]# lsmod | grep tun
tun                    36164  0 

#检查是否有安装tunctl工具
[root@localhost ~]# tunctl help
-bash: tunctl: command not found

#直接安装,装不了
[root@localhost ~]# yum -y install tunctl 

#指定自定义的Yum源
yum --enablerep o=nux-misc install -y tunctl

2、创建tap

[root@localhost ~]# tunctl -t tap_test
Set 'tap_test' persistent and owned by uid 0

[root@localhost ~]# ip addr add 10.100.50.5/24 dev tap_test

[root@localhost ~]# ifconfig tap_test
tap_test: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        inet 10.100.50.5  netmask 255.255.255.0  broadcast 0.0.0.0
        ether a6:78:f3:c7:4d:79  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

二、namespace

一个namespace提供了一份独立的网络协议栈(网络设备接口、ipv4、ipv6、ip路由、防火墙规则、sockets等)。一个设备(Linux Device)只能位于一个namespace中,不同的namespace中的设备可以利用veth pair进行桥接。

#创建
[root@localhost ~]# ip netns add ns_test

#查看ns列表
[root@localhost yum.repos.d]# ip netns list
ns_test

#将虚拟网卡迁移到ns
[root@localhost ~]# ip link set tap_test netns ns_test

#exec ns执行命令
[root@localhost ~]# ip netns exec ns_test ip link list
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: tap_test: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether a6:78:f3:c7:4d:79 brd ff:ff:ff:ff:ff:ff

#设定IP
[root@localhost ~]# ip netns exec ns_test ip addr add 100.10.89.21/24 dev tap_test
[root@localhost ~]# ip netns exec ns_test ifconfig tap_test up
[root@localhost ~]# ip netns exec ns_test ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: tap_test: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether a6:78:f3:c7:4d:79 brd ff:ff:ff:ff:ff:ff
    inet 100.10.89.21/24 scope global tap_test
       valid_lft forever preferred_lft forever

#启动虚拟网卡,但启动失败
[root@localhost ~]# ip netns exec ns_test ip link set tap_test up
[root@localhost ~]# ip netns exec ns_test ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: tap_test: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether a6:78:f3:c7:4d:79 brd ff:ff:ff:ff:ff:ff
    inet 100.10.89.21/24 scope global tap_test
       valid_lft forever preferred_lft forever

三、veth pair

veth pair不是一个设备,而是一对设备,以连接两个虚拟以太端口。

#创建veth pair
[root@localhost ~]# ip link add tap1 type veth peer name tap2

#创建 ns
[root@localhost ~]# ip netns add ns1
[root@localhost ~]# ip netns add ns2

#把两个tap分别迁移到对应的namespace中
[root@localhost ~]# ip link set tap1 netns ns1
[root@localhost ~]# ip link set tap2 netns ns2

#分别给两个tap绑定IP地址
[root@localhost ~]# ip netns exec ns1 ip addr add local 192.168.50.1/24 dev tap1
[root@localhost ~]# ip netns exec ns2 ip addr add local 192.168.50.2/24 dev tap2

#将两个tap设置为tap
[root@localhost ~]# ip netns exec ns1 ifconfig tap1 up
[root@localhost ~]# ip netns exec ns2 ifconfig tap2 up

#ping测试
[root@localhost ~]# ip netns exec ns2 ping 192.168.50.1
PING 192.168.50.1 (192.168.50.1) 56(84) bytes of data.
64 bytes from 192.168.50.1: icmp_seq=1 ttl=64 time=0.053 ms
64 bytes from 192.168.50.1: icmp_seq=2 ttl=64 time=0.046 ms
^C
--- 192.168.50.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.046/0.049/0.053/0.007 ms
[root@localhost ~]# ip netns exec ns1 ping 192.168.50.2
PING 192.168.50.2 (192.168.50.2) 56(84) bytes of data.
64 bytes from 192.168.50.2: icmp_seq=1 ttl=64 time=0.030 ms
^C
--- 192.168.50.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.030/0.030/0.030/0.000 ms

参考来源:《深入理解Openstack Neutron》-李宗标

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值