1、VLAN划分
1.1 查看linux上支持vlan的8021q模块
[root@master1 ~]# modinfo 8021qfilename: ??????/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/net/8021q/8021q.ko.xzversion: ???????1.8……加载模块:[root@master1 ~]# modprobe 8021q[root@master1 ~]# ls /proc/net/vlan/config
1.2 使用vconfig完成VLAN配置
[root@master1 ~]# yum install vconfig[root@master1 ~]# vconfig --help
二、netns(CentOS7,网络名称空间)
1、杂项
1.1 使用帮助
[root@master1 ~]# ip netns helpUsage: ip netns list ??????ip netns add NAME ??????ip netns set NAME NETNSID ??????ip [-all] netns delete [NAME]……
1.2 添加网络名称空间
[root@master1 ~]# ip netns add r1[root@master1 ~]# ip netns add r2[root@master1 ~]# ip netns listr2r1
1.3 netns里面运行的程序,在其它地方是看不见的(隔离)
[root@master1 ~]# ip netns exec r1 ifconfig -alo: flags=8<LOOPBACK> ?mtu 65536 ???????loop ?txqueuelen 1 ?(Local Loopback) ???????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[root@master1 ~]# [root@master1 ~]# ip netns exec r1 route -nKernel IP routing tableDestination ????Gateway ????????Genmask ????????Flags Metric Ref ???Use Ifac[root@master1 ~]# ip netns exec r1 ifconfig lo 127.0.0.1/8 up[root@master1 ~]# ip netns exec r1 ifconfiglo: flags=73<UP,LOOPBACK,RUNNING> ?mtu 65536 ???????inet 127.0.0.1 ?netmask 255.0.0.0在名称空间加iptables规则,其他空间包括宿主机也看不见(隔离)
清空R1规则:[root@master1 ~]# ip netns exec r1 iptables -F
二、网络虚拟化
1、网络配置
1.1 创建外部桥并配置IP
创建外部网桥:[root@master1 ~]# brctl addbr br-ex激活桥:[root@master1 ~]# ip link set br-ex up拆除物理网卡IP地址,并将原IP配置到桥br-ex上。然后把物理网卡加入桥里面[root@master1 ~]# ip addr del 10.201.106.131/24 dev eth0;ip addr add 10.201.106.131/24 dev br-ex;brctl addif br-ex eth0
1.2 创建配置内部桥
[root@master1 ~]# brctl addbr br-in[root@master1 ~]# ip link set br-in up
1.3 网络名称空间添加网卡
打开路由转发功能:[root@master1 ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1立即生效:[root@master1 ~]# sysctl -pnet.ipv4.ip_forward = 1添加一对网卡:[root@master1 ~]# ip link add veth1.1 type veth peer name veth1.2将veth1.1网卡加入名称空间r1上:[root@master1 ~]# ip link set veth1.1 netns r1将veth1.2网卡加入名称空间r2上:[root@master1 ~]# ip link set veth1.2 netns r2宿主机已经看不到veth1.1和veth1.2
给两个名称空间里的网卡改名:[root@master1 ~]# ip netns exec r1 ip link set veth1.1 name eth0[root@master1 ~]# ip netns exec r2 ip link set veth1.2 name eth0
给网络名称空间的网卡添加IP:[root@master1 ~]# ip netns exec r1 ifconfig eth0 10.0.1.1/24 up[root@master1 ~]# ip netns exec r2 ifconfig eth0 10.0.1.2/24 up
测试联通性:
2、创建配置虚拟机
2.1 创建两个KVM虚拟机
[root@master1 ~]# ls /images/cirros/cirros-no_cloud-0.3.0-i386-disk.img 准备映像文件[root@master1 cirros]# cp cirros-no_cloud-0.3.0-i386-disk.img test1.qcow2[root@master1 cirros]# cp cirros-no_cloud-0.3.0-i386-disk.img test2.qcow2创建管理网桥脚本:[root@master1 ~]# vim /etc/qemu-ifup #!/bin/bash#bridge=br-inif [ -n "$1" ?]; then ???ip link set $1 up ???brctl addif $bridge $1 ???[ $? -eq 0 ] && exit 0 || exit 1else ???echo "Error,no interface specified" ???exit 1fi[root@master1 ~]# chmod +x /etc/qemu-ifup[root@master1 ~]# ln -sv /usr/libexec/qemu-kvm /usr/bin/启动第一个虚拟机:[root@master1 ~]# qemu-kvm -m 128 -smp 1 -name vm1 -drive file=/images/cirros/test1.qcow2,if=virtio,media=disk -net nic,macaddr=52:54:00:aa:bb:cc -net tap,ifname=vif1.0,script=/etc/qemu-ifup --nographic
启动第二个虚拟机:[root@master1 ~]# qemu-kvm -m 128 -smp 1 -name vm2 -drive file=/images/cirros/test2.qcow2,if=virtio,media=disk -net nic,macaddr=52:54:00:aa:bb:dd -net tap,ifname=vif2.0,script=/etc/qemu-ifup --nographic查看桥:[root@master1 ~]# brctl showbridge name bridge id ??????STP enabled interfacesbr-ex ??????8000.000c29a77aec ??no ?????eth0br-in ??????8000.1ad54dd0c92d ??no ?????vif1.0 ???????????????????????????vif2.0
2.2 重新配置路由器(网络名称空间)
[root@master1 ~]# ip netns delete r1[root@master1 ~]# ip netns delete r2[root@master1 ~]# ip netns list创建路由器(网络名称空间)[root@master1 ~]# ip netns add r1[root@master1 ~]# ip netns listr1启动r1,并在宿主机创建一对网卡,其中一块网卡关联到内部桥上面[root@master1 ~]# ip link add rinr type veth peer name rins[root@master1 ~]# ip link set rinr up[root@master1 ~]# ip link set rins up将rins添加到内部桥:[root@master1 ~]# brctl addif br-in rins将rinr添加到r1(网络名称空间,路由器)[root@master1 ~]# ip link set rinr netns r1rinr改名激活,配置IP[root@master1 ~]# ip netns exec r1 ip link set eth0 up[root@master1 ~]# ip netns exec r1 ifconfig eth0 10.0.1.254/24 up
2.3 虚拟机配置IP,网关指向rinr的IP地址
# ifconfig eth0 10.0.1.1/24 up# route add default gw 10.0.1.254因为我做实验的两个网段都是10段,如果不做外网网段的详细路由,会导致走默认直连路由,导致无法联通10.201.106段。现象是路由走到r1(网络名称空间后)走不下去# route add -net 10.201.106.0/24 gw 10.0.1.254因为我做实验的两个网段都是10段,如果不做外网网段的详细路由,会导致走默认直连路由,导致无法联通10.201.106段。# ifconfig eth0 10.0.1.2/24 up# route add default gw 10.0.1.254# route add -net 10.201.106.0/24 gw 10.0.1.254
2.4 增加另一对网卡,外网配置
rexr放在路由器,rexs放在外网网桥[root@master1 ~]# ip link add rexr type veth peer name rexs将rexs放入外部网桥[root@master1 ~]# ip link set rexs up[root@master1 ~]# brctl addif br-ex rexs将rexr加入路由器(网络名称空间),并配置IP激活[root@master1 ~]# ip link set rexr netns r1[root@master1 ~]# ip netns exec r1 ip link set rexr name eth1[root@master1 ~]# ip netns exec r1 ifconfig eth1 10.201.106.31/24 up
2.5 测试
虚拟机可以ping通10.201.106.31,但是ping不通其他10.201.106段,比如10.201.106.131。因为宿主机不知道虚拟机网段路由,无法回包。网络名称空间添加nat规则:[root@master1 ~]# ip netns exec r1 iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! -d 10.0.1.0/24 -j SNAT --to-source 10.201.106.31
3、名称空间配置DHCP服务器
3.1 安装dnsmasq
[root@master1 ~]# yum install dnsmasq
3.2 在名称空间配置DHCP
设置分配地址范围和网关:[root@master1 ~]# ip netns exec r1 dnsmasq -F 10.0.1.151,10.0.1.160 --dhcp-option=option:router,10.0.1.254虚拟机测试获取IP:# udhcpc -Rudhcpc (v1.18.5) startedSending discover...Sending select for 10.0.1.159...Lease of 10.0.1.159 obtained, lease time 3600deleting routersroute: SIOCDELRT: No such processadding dns 10.0.1.254
netns杂记
原文地址:http://blog.51cto.com/zhongle21/2096414