虚拟网络设备-tap
tap设备,虚拟端口(例如实列虚拟网卡),位于OSI网络七层模型,第二层,需要启动tun模块,默认内核已经加载
lsmod|grep tun 查看是否启用tun模块
示例
ip tuntap add mode tap tap_test #新建一个设备 指定mode为tap 名字为tap_test
ip tuntap list #查看目前的虚拟网络设备
ip -d tuntap show tap_test #看一下当前设备的状态
ip addr add 192.168.1.100/24 tap_test #为当前设备配置一个ip
ip link set tap_test up&&down #启用当前 设备
ip addr show tap_test
ip tuntap del mode tap tap_test #删除这个tap_test设备
虚拟网络设备-netns
netns是在linux中提供网络虚拟化的一个项目,使用netns网络空间虚拟化可以在本地虚拟化出多个网络环境,目前netns在lxc容器中被用来为容器提供网络。
使用netns创建的网络空间独立于当前系统的网络空间,其中的网络设备以及iptables规则等都是独立的,就好像进入了另外一个网络一样。namespace
示例
ip netns help #查看netns 使用帮助
ip netns list #查看目前存在的网络空间
ip netns add net_test #新建以恶net_test网络空间
ip link set tap_test netns net_test #把tap_test设备归纳到net_test网络空间
ip netns exec net_test ip tuntap list #在net_test空间执行命令为ip tuntap list
ip netns exec net_test ifconfig tap_test 192.168.1.100/24 up #在net_test空间执行命令为tap_test设置ip地址
ip netns exec net_test ip addr #查看当前net_test空间网卡ip配置信息
ip netns del net_test #删除当前空间
虚拟网络设备-veth
在 Linux 下,我们可以通过使用 ip 命令创建一对儿 veth。其中 link 表示 link layer的意思,即链路层。这个命令可以用于管理和查看网络接口,包括物理网络接口,也包括虚拟接口。
示例
ip link add tap1 type veth peer name tap2 #增加一个tap1 veth类型对端名称是tap2
ip netns add ns1
ip netns add ns2
ip link set tap1 netns ns1
ip link set tap2 netns ns2
ip netns exec ns1 ip addr add 192.168.50.1/24 dev tap1
ip netns exec ns2 ip addr add 192.168.168.2/24 dev tap2
ip netns exec ns1 ifconfig tap1 up
ip netns exec ns2 ifconfig tap2 up
ping 测试
ip netns exec ns1 ping 192.168.50.2
ip netns exec ns2 ping 192.168.50.1
虚拟网络设备-Bridge
veth pair 打破了 Network Namespace 的限制,实现了不同 Network Namespace 之间的通信。但 veth pair 有一个明显的缺陷,就是只能实现两个网络接口之间的通信。
如果我们想实现多个网络接口之间的通信,就可以使用下面介绍的网桥(Bridge)技术。
简单来说,网桥就是把一台机器上的若干个网络接口 “连接” 起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。
示例
创建4个veth设备
ip link add tap1 type veth peer name tap1_peer
ip link add tap2 type veth peer name tap2_peer
ip link add tap3 type veth peer name tap3_peer
ip link add tap4 type veth peer name tap4_peer
创建4个ns
ip netns add ns1
ip netns add ns2
ip netns add ns3
ip netns add ns4
将veth一端添加到ns中
ip link set tap1 netns ns1
ip link set tap2 netns ns2
ip link set tap3 netns ns3
ip link set tap4 netns ns4
创建bridge
brctl show
brctl addbr bridge0
brctl addif bridge0 tap1_peer #4个接口
brctl addif bridge0 tap2_peer
brctl addif bridge0 tap3_peer
brctl addif bridge0 tap4_peer
启用bridge和bridge接口
ip link set bridge0 up
ip link set tap1_peer up
ip link set tap2_peer up
ip link set tap3_peer up
ip link set tap4_peer up
设置veth另外一段ip
ip netns exec ns1 ifconfig tap1 192.168.50.1/24 up
ip netns exec ns2 ifconfig tap2 192.168.50.2/24 up
ip netns exec ns3 ifconfig tap3 192.168.50.3/24 up
ip netns exec ns4 ifconfig tap4 192.168.50.4/24 up
虚拟网络设备-router
router在虚拟网络中就是路由器,实现三层通信作用。
Linux 本身开启转发功能后就是一个路由器。
不过linux默认没有打开路由转发功能。
通过 cat /proc/sys/net/ipv4/ip_forward 命令可以查看路由转发功能是否开启。
如果是1:表示打开了Linux的路由转发功能。
如果是0:表示没有打开路由转发功能。
临时开启方法,重启会失效:
echo "1" > /proc/sys/net/ipv4/ip_forward
永久开启的方法是修改配置文件:“/etc/sysctl.conf”,将net.ipv4.ip_forward=0修改为1,保存后退出即可。
ip netns exec ns1 ifconfig tap1 192.168.100.2/24 up
ip netns exec ns2 ifconfig tap2 192.168.200.2/24 up
ip netns exec router ifconfig tap1_peer 192.168.100.1/24 up
ip netns exec router ifconfig tap2_peer 192.168.200.1/24 up
ip netns exec ns1 ping 192.168.100.1
ip netns exec ns1 ping 192.168.200.1
ip netns exec ns1 route -n
ip netns exec ns1 route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.100.1
ip netns exec ns1 ping 192.168.200.1
ip netns exec ns1 ping 192.168.200.2
ip netns exec ns2 route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.200.1
ipnetns exec ns1 ping 192.168.200.2
No Comments