建立基于Open vSwitch的GRE隧道

news2024/11/24 22:58:25

建立基于Open vSwitch的GRE隧道

1. 环境的准备

图6-1 连接拓扑图

如图6-1所示为两台虚拟机连接拓扑图,两台虚拟机ens33网卡,通过虚拟交换机连接在一起,地址网段为30.0.0.0/24。在Docker主机ens33,IP地址为30.0.0.10/24,创建br-int网桥,IP地址为30.1.0.1/24。创建br0网卡,Docker容器使用br0网卡,绑定到br-int网桥上。KVM主机中创建br-ex网桥,配置IP地址为30.0.0.20/24,创建br-int网卡,KVM虚拟机使用br-int网卡,绑定到br-ex网桥上。KVM主机br-int网卡和Docker主机br-int建立GRE隧道,为GRE隧道指定静态路由。

(1)Docker主机

配置1核CPU,2 GB内存,系统为CentOS 7.5,使用NAT模式,ens33地址为30.0.0.10。

(2)KVM主机

配置1核CPU,1 GB内存,系统为CentOS 7.5,使用NAT模式,ens33地址为30.0.0.20。

(3)所需要准备的软件和镜像包

需要的软件和镜像包有VMware Workstation Pro、CentOS-7-x86_64-DVD-1804.iso镜像包、YUM安装包。

2. Docker主机

(1)升级内核版本

1 查看当前系统版本。

# uname -r

3.10.0-862.el7.x86_64

2 更新内核。

# yum install kernel

3 修改grup引导,重新启动。

# vi /etc/grub.conf

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title CentOS (3.10.5-3.el6.x86_64)

        root (hd0,0)

        kernel /vmlinuz-3.10.5-3.el6.x86_64 ro root=UUID=285d26b4-1a82-4f6d-be2b-21924be294ac rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=

us rd_NO_DM rhgb quiet

        initrd /initramfs-3.10.5-3.el6.x86_64.img

title CentOS (2.6.32-431.el6.x86_64)

        root (hd0,0)

        kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=285d26b4-1a82-4f6d-be2b-21924be294ac rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABL

E=us rd_NO_DM rhgb quiet

        initrd /initramfs-2.6.32-431.el6.x86_64.img

内核版本由上至下进行选择,将default改为0,即选择第一个内核版本。

重新启动系统。

# reboot

4 查看升级后系统版本。

# uname -r

3.10.0-862.el7.x86_64

(2)配置网络

1 修改主机名称。

# hostnamectl set-hostname docker

或# vi /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=docker

2 配置Docker主机ens33的网络。

# vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改是否连接网络(ONBOOT)。

ONBOOT=yes

修改关闭网络实时生效(NM_CONTROLLED)。

NM_CONTROLLER=no

添加静态网络模式(BOOTPROTO)。

BOOTPROTO=static (也可用DHCP)

添加IP地址掩码和网关。

IPADDR=30.0.0.10 (根据实际要求配置IP地址)

NETMASK=255.255.255.0

GATEWAY=30.0.0.1

3 重启网络。

# systemctl restart network

(3)基础配置

1 上传Packages.tar.gz和docker.tar.tz文件。

# tar -zxvf Packages.tar.gz -C /opt/

#tar -zxvf  docker.tar.gz  -C /opt/

2 配置本地YUM。

# vi /etc/yum.repos.d/local.repo

[docker]

name=docker

baseurl=file:///opt/docker

gpgcheck=0

enabled=1

3 清除防火墙规制。

#yum -y install iptables

# iptables -F

# iptables -X

# iptables -Z

# iptables-save

# systemctl stop iptables

4 开启核内转发。

# echo 1 > /proc/sys/net/ipv4/ip_forward

# echo 'net.ipv4.ip_forward=1' >/etc/sysctl.conf

# echo "net.ipv4.conf.default.rp_filter=0" >> /etc/sysctl.conf

# echo 'net.ipv4.conf.all.rp_filter=0' >> /etc/sysctl.conf

生效核内转发。

# /sbin/sysctl –p

5 修改SELinux规则。

# vi /etc/selinux/config

SELINUX=permissive

# setenforce 0

(4)安装服务

1 安装Open vSwitch、Docker和Bridge服务。

# yum install openvswitch bridge-utils tunctl docker-io –y

2 更新路由。

# yum update iproute

3 启动Open vSwitch。

# systemctl start openvswitch

查看ovs-vsctl的配置。

# ovs-vsctl show

9ea07837-4f42-413b-bdc8-56829647874a

ovs_version: "2.1.3"

(5)创建网桥

1 创建br-int网桥。

#ovs-vsctl add-br br-int

创建br0网桥。

#brctl addbr br0

2 重启网络。

# systemctl restart network

3 给br0网桥添加地址。

#ifconfig  br0 30.1.0.1/24

4 绑定br0网桥到br-int上面。

#brctl addif br0 br-int

(6)创建GRE隧道

1 创建gre0接口。

#ovs-vsctl add-port  br-int gre0 -- set interface gre0 type=gre options:remote_ip=30.0.0.20(对端ens33IP地址)

2 启动br0、br-int网桥。

#ip link set br0 up

#ip link set br-int up

#ifconfig br-int up

# ifconfig br0 up

3 配置静态路由。

#ip route add 30.2.0.0/24 via 30.0.0.20(对端ens33IP地址) dev ens33

4 配置Docker容器使用的网桥。

#vi /etc/sysconfig/docker

other_args=’--bridge=br0’ (文件最后)

(7)启动Docker服务

1 启动Docker。

#systemctl  start docker

2 上传CentOS 6.5的镜像包。(上传xd-centos6.5-ssh-tar)

# docker  load < xd-centos6.5-ssh-tar   //将镜像包重新导入

#docker  images (查看ID号)

# docker  tag d0d663863c34 (ID为上一步上传镜像的IMAGE ID) centos:6.5

3 运行容器。

# docker run -itd  --name=centos6.5 centos:6.5 /bin/bash

#docker ps -a

4 查看容器IP。

# docker exec -it centos6.5  /bin/bash

进入dock查看IP地址

则获取的IP地址段为30.1.0.0/24 (与br0在同一个网段)

3. KVM主机

(1)基本配置

检查系统是否支持虚拟化

看看CPU是否支持虚拟化。

# grep -E -o 'vmx|svm' /proc/cpuinfo

注意:返回vmx代表支持因特尔(Intel)系列CPU的虚拟化,返回svm代表支持AMD系列CPU的虚拟化。

1 配置主机名。

# hostnamectl set-hostname kvm

# vi /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=kvm

2 配置KVM主机ens33的网络。

# vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改是否连接网络(ONBOOT)。

ONBOOT=yes

修改关闭网络实时生效(NM_CONTROLLED)。

NM_CONTROLLED=no

添加静态网络模式(BOOTPROTO)。

BOOTPROTO=static (也可以用DHCP)

添加IP地址掩码和网关。

IPADDR=30.0.0.20

NETMASK=255.255.255.0

GATEWAY=30.0.0.1

3 重启网络。

# systemctl restart network

4 配置br-ex网桥。

# cd /etc/sysconfig/network-scripts/

#cp -p ifcfg-ens33 ifcfg-br-ex

#vi ifcfg-br-ex

DEVICE=br-ex

TYPE=Enternet

ONBOOT=yes

NM_CONTROLLED=no

BOOTPROTO=static

IPADDR=30.0.0.20 (用当前宿主机的IP地址)

NETMASK=255.255.255.0

GATEWAY=30.0.0.1

#vi ifcfg-ens33 

DEVICE=ens33

TYPE=Enternet

ONBOOT=yes

NM_CONTROLLED=no

BOOTPROTO=none

5 配置YUM。

上传Packages.tar.gz文件。

# tar -zxvf Packages.tar.gz -C /opt/

配置本地YUM文件。

# vi /etc/yum.repos.d/local.repo

[centos]

name=centos

baseurl=file:///opt/docker

gpgcheck=0

enabled=1

[Packages]

name=Packages

baseurl=file:///opt/Packages

gpgcheck=0

enabled=1

6 清空防火墙配置。

# iptables –Z

# iptables –X

# iptables –F

# iptables-save

# systemctl stop iptables

7 开启核内转发。

#echo 1 > /proc/sys/net/ipv4/ip_forward

# echo 'net.ipv4.ip_forward=1' > /etc/sysctl.conf

# echo "net.ipv4.conf.default.rp_filter=0" >> /etc/sysctl.conf

# echo 'net.ipv4.conf.all.rp_filter=0' >> /etc/sysctl.conf

生效核内转发。

[root@kvm ~]# sysctl -p

修改SELinux规则。

# vi /etc/selinux/config

SELINUX=permissive

# setenforce 0

(2)安装服务软件包

1 安装所需安装包。

# yum update iproute

#yum install openvswitch qemu-kvm libvirt dnsmasq -y

2 启动Open vSwitch。

# systemctl start openvswitch

3 配置网桥。

# ovs-vsctl add-br br-int

# ifconfig  br-int 30.2.0.1/24

#ifconfig br-int up

# ovs-vsctl add-br br-ex

#ovs-vsctl add-port br-ex ens33 && systemctl  restart network

(3)配置GRE隧道

1 配置GRE隧道。

#ovs-vsctl add-port  br-int gre0 -- set interface gre0 type=gre options:remote_ip=30.0.0.10(对端ens33IP地址)

2 配置路由。

#ip route add 30.1.0.0/24 via 30.0.0.10(对方的IP地址) dev br-ex

3 配置DNS。

# /usr/sbin/dnsmasq --strict-order --bind-interfaces --interface=br-int --except-interface=lo --pid-file=/var/run/qdhcp.pid --leasefile-ro --dhcp-range=30.2.0.3,30.2.0.254,255.255.255.0,12h --conf-file=

#ps -ef  |grep dnsmasq

4 创建安装网卡脚本。(up,down脚本文件都保存/root)

# vi ovs-ifup

#!/bin/sh

switch='br-int'

/sbin/ifconfig $1 up

ovs-vsctl add-port ${switch} $1

5 创建卸载网卡脚本。

# vi ovs-ifdown

#!/bin/sh

switch='br-int'

/sbin/ifconfig $1 down

ovs-vsctl del-port ${switch} $1

6 修改创建的脚本的权限。

# chmod 777 ovs-if* 

7 开启虚拟机。

# ovs-vsctl del-port tap0

#/usr/libexec/qemu-kvm -m 1024 -drive file=/root/cirros-0.3.3-x86_64-disk.img,if=virtio -net nic,model=virtio -net tap,script=ovs-ifup -nographic -vnc :1

进入主机查看IP地址,其获取的地址为:30.2.0.0/24(br-int网段地址)

4. 主机测试

1 查看开启的Docker容器进程。

# docker ps –a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES

a76c2fc817d1        d0d663863c34        "/bin/bash"         6 hours ago         Up 6 hours                                      mad_poincare    

进入Docker容器内部

#docker exec -it 9adae010e4a3 /bin/bash

# ip a

6: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP

    link/ether 02:42:1e:01:00:02 brd ff:ff:ff:ff:ff:ff

    inet 30.1.0.2/24 scope global ens33

    inet6 fe80::42:1eff:fe01:2/64 scope link

       valid_lft forever preferred_lft forever

2 测试网络连通性。

测试Docker主机和KVM主机与br0和br-int网桥之间的连通性。

# ping 30.1.0.1 -c 4

PING 30.1.0.1 (30.1.0.1) 56(84) bytes of data.

64 bytes from 30.1.0.1: icmp_seq=1 ttl=64 time=0.041 ms

64 bytes from 30.1.0.1: icmp_seq=2 ttl=64 time=0.062 ms

64 bytes from 30.1.0.1: icmp_seq=3 ttl=64 time=0.041 ms

64 bytes from 30.1.0.1: icmp_seq=4 ttl=64 time=0.040 ms

--- 30.1.0.1 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3000ms

rtt min/avg/max/mdev = 0.040/0.046/0.062/0.009 ms

[root@a76c2fc817d1 /]# ping 30.0.0.10 -c 4

PING 30.0.0.10 (30.0.0.10) 56(84) bytes of data.

64 bytes from 30.0.0.10: icmp_seq=1 ttl=64 time=0.040 ms

64 bytes from 30.0.0.10: icmp_seq=2 ttl=64 time=0.048 ms

64 bytes from 30.0.0.10: icmp_seq=3 ttl=64 time=0.045 ms

64 bytes from 30.0.0.10: icmp_seq=4 ttl=64 time=0.047 ms

--- 30.0.0.10 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3000ms

rtt min/avg/max/mdev = 0.040/0.045/0.048/0.003 ms

[root@a76c2fc817d1 /]# ping 30.0.0.20 -c 4

PING 30.0.0.20 (30.0.0.20) 56(84) bytes of data.

64 bytes from 30.0.0.20: icmp_seq=1 ttl=63 time=0.614 ms

64 bytes from 30.0.0.20: icmp_seq=2 ttl=63 time=0.295 ms

64 bytes from 30.0.0.20: icmp_seq=3 ttl=63 time=2.38 ms

64 bytes from 30.0.0.20: icmp_seq=4 ttl=63 time=0.533 ms

--- 30.0.0.20 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3003ms

rtt min/avg/max/mdev = 0.295/0.957/2.387/0.834 ms

[root@a76c2fc817d1 /]# ping 30.2.0.1 -c 4   

PING 30.2.0.1 (30.2.0.1) 56(84) bytes of data.

64 bytes from 30.2.0.1: icmp_seq=1 ttl=63 time=0.864 ms

64 bytes from 30.2.0.1: icmp_seq=2 ttl=63 time=0.545 ms

64 bytes from 30.2.0.1: icmp_seq=3 ttl=63 time=0.321 ms

64 bytes from 30.2.0.1: icmp_seq=4 ttl=63 time=0.637 ms

--- 30.2.0.1 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3002ms

rtt min/avg/max/mdev = 0.321/0.591/0.864/0.196 ms

[root@a76c2fc817d1 /]# ping 30.2.0.140 -c 4

PING 30.2.0.140 (30.2.0.140) 56(84) bytes of data.

64 bytes from 30.2.0.140: icmp_seq=1 ttl=62 time=3.20 ms

64 bytes from 30.2.0.140: icmp_seq=2 ttl=62 time=0.800 ms

64 bytes from 30.2.0.140: icmp_seq=3 ttl=62 time=1.24 ms

64 bytes from 30.2.0.140: icmp_seq=4 ttl=62 time=0.766 ms

--- 30.2.0.140 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3005ms

rtt min/avg/max/mdev = 0.766/1.504/3.203/0.999 ms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/579194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0到1接入钉钉消息通知

前段时间给项目接入监控告警&#xff0c;消息通知渠道选了钉钉。预算的原因内部办公刚从飞书转回钉钉&#xff0c;飞书消息通知之前就有一套了&#xff0c;测试钉钉从应用授权到消息测试花了不少时间。这里记录下从钉钉开放平台权限申请到消息接收全流程&#xff0c;给后面有同…

SAP-MM-采购申请字段解析

采购申请抬头以及行项目字段解析 1、采购申请类型&#xff1a; 对PR进行分类&#xff1b; 控制PR行项目的编号间隔&#xff1b; 控制PR编号范围&#xff0c;以及是否内/外部给号&#xff1b; 控制PR的屏幕选择格式&#xff1b; 控制PR是否允许凭证抬头审批&#xff0c;如果允…

mybatis-plus实现逻辑删除(详细!)

文章目录 什么是逻辑删除&#xff1f;为什么用到逻辑删除&#xff1f;在springboot使用Mybatis-Plus提供的逻辑删除1、在application.yml配置2、 实体类字段上加上TableLogic注解演示 什么是逻辑删除&#xff1f; 逻辑删除的本质是修改操作&#xff0c;并不是真正的删除&#…

2023/5/28周报

目录 摘要 论文阅读 1、标题和现存问题 2、使用GNN进行文本分类 3、INDUCT-GCN 4、实验准备 5、实验结果 深度学习 1、时空图的种类 2、图在环境中的应用 3、STGNN 总结 摘要 本周在论文阅读上&#xff0c;阅读了一篇InducT-GCN:归纳图卷积文本分类网络的论文。基…

AWVS使用手册

目录 AWVS基本操作 AWVS工具介绍 AWVS界面介绍 AWVS主要操作区域简介 AWVS的功能及特点的功能及特点 AWVS的菜单栏&#xff0c;工具栏简介 AWVS基本功能介绍 AWVS的蜘蛛爬虫功能 AWVS目标目标探测工具 AWVS的子域名探测工具 AWVS的的HTTP嗅探工具 AWVS的的HTTP模糊…

排序算法的时间复杂度、空间复杂度对比总结

参考&#xff1a;八大排序算法的稳定性和时间复杂度

【linux】守护进程(精灵进程)

文章目录 一、TCP服务器日志二、守护进程预备知识2.1 守护进程概念2.2 前台任务和后台任务2.3 进程组与组长ID2.4 前台进程后台进程的切换2.5 自成会话 三、实现守护进程3.1 自建会话setsid3.2 守护进程的条件3.3 代码实现 一、TCP服务器日志 上一章我们写了一个TCP网络服务器…

SAP-MM-计算方案字段解析

01、 “步骤”&#xff1a;标识此条件类型在计算方案中的顺序编号&#xff0c;此编号会影响到后续业务中条件类型的排序&#xff0c;不同条件类型之间的编号最好间隔大一些&#xff0c;这样设置便于以后对计算方案进行扩展&#xff1b; 02、 “计数器”&#xff1…

(哈希表 ) 349. 两个数组的交集 ——【Leetcode每日一题】

❓349. 两个数组的交集 难度&#xff1a;简单 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[…

Hbase学习笔记

1 HBase介绍 (1) HBase是什么 HBase是一个开源的非关系型分布式、实时数据库(Nosql)&#xff0c;运行于HDFS文件系统之上&#xff0c;因此key容错地存储海量稀疏的数据。 海量稀疏就是说不能保证每一个key它的列都有value。 关系型数据库&#xff1a;mysql、oracle 非关系…

Midjourney AI绘画咒语与生成的作品(实例)

据说Midjourney出来后&#xff0c;有一大批设计师抱着电脑&#xff0c;哭晕了~~ 有兴趣的朋友&#xff0c;可以看一下我前两天发的&#xff0c;地址如下&#xff1a; Midjourney AI绘画中文教程详解&#xff08;完整版&#xff09;模型、命令、参数与各种高级用法https://blog…

马斯洛的的五层需求完美吗 不

马斯洛五层需求难道就很完美吗&#xff1f;不&#xff01; 我很佩服的复旦大学哲学王德峰教授批判 对马斯洛的自我实现&#xff0c;他认为 中国人没有西方意义上的自我实现 比如儒家成人达己、圆满、道问学和尊德性&#xff0c;比如孔子的学生颜回 比如佛家的渡人、觉悟。比如弘…

使用sklearn进行机器学习案例(1)

文章目录 案例一. 加州房价预测案例二. MNIST手写数字识别案例三. 波士顿房价预测 案例一. 加州房价预测 线性回归通过对训练集进行训练&#xff0c;拟合出一个线性方程&#xff0c;使得预测值与实际值之间的平均误差最小化。这个过程可以使用梯度下降法等优化算法来实现。即通…

使用curl命令传输数据

文章目录 一、curl命令二、举例和注意事项Reference 一、curl命令 curl是传输数据的命令行工具&#xff0c;可以通过命令行发送HTTP请求和接收HTTP响应。它的名字是“client for URLs”&#xff0c;意为URL的客户端&#xff0c;表示该工具主要用于处理URL相关的任务。curl可以…

Mysql数据库对表的基本操作

一.表基本操作 1.当前数据库内创建表 2.查看表 3.删除表 4.修改表结构 5.复制表&#xff08;结构&#xff09; 二.表约束创建 1.约束的作用 2.约束的类型 3.演示 一.表基本操作 1.当前数据库内创建表 CREATE TABLE 表名( 列名 列数据类型&#xff0c; 列名 列…

如何在华为OD机试中获得满分?Java实现【寻找关键钥匙】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

使用compose desktop构建桌面应用

使用compose desktop构建桌面应用时遇到的一些坑 官方指导移步&#xff1a;多平台开发说明&#xff0c;我这里只写一些自己遇到问题 我在mac机器开发&#xff0c;然后使用githubAction构建的win平台的包&#xff0c;现记录一下遇到的问题 构建文件build.gradle编写不同平台的程…

SAM-MM-配额协议字段解析

1、有效起始日&#xff1a;配额协议的生效日期&#xff0c;系统默认为当前创建日期&#xff0c;灰色&#xff0c;不可更改&#xff1b; 2、有效至&#xff1a;配额协议的失效日期&#xff0c;要手动填一个日期&#xff1b; 3、最小数量拆分&#xff1a;如果要按照配额比例&am…

.NET面向AI编程——SK框架(SemanticKernel)的简易入门实践

前言&#xff1a;随着ChatGPT开始在各个领域遍地开花&#xff0c;有关的应用也开始层出不穷。随着微软开源SK框架&#xff0c;无疑是给.NET开发者带来面向AI应用的新机遇。以下内容&#xff0c;通过创建一个简单的prompt开始&#xff0c;开发一个使用SK框架进行开发的入门教程&…

xss跨站之waf绕过及安全修复(28)

手工探针xss绕过waf规则 打开靶场 写入跨站测试语句发现拦截 这里就做一个最经典的方法&#xff0c;做一个关键字拆分来确立拦截的是什么东西。 去掉最后字符串&#xff0c;访问还是拦截&#xff0c;再去掉alert&#xff08;1&#xff09;&#xff0c;访问还是拦截&#xff…