分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

netns杂记

发布时间:2023-09-06 01:48责任编辑:苏小强关键词:暂无标签
一、杂项

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved