Open vSwitch 入门实践(2)使用OVS构建隔离网络

前言 在前面我们已经使用Linux Bridge完成了多台网络设备的通信,但是它对于网络隔离的支持不是很好,长期以来,在Linux平台上缺少一个功能完备的虚拟交换机,直到OVS的出现。 实验 接下来我们来尝试完成两个实验,单机无隔离网络、单机隔离网络。 实验一:单机无隔离网络 使用ovs构建无隔离网络非常简单,只需要添加一个网桥,然后在这个网桥上再增加几个内部端口,最后把端口移动到netns中即可。 # 添加网桥 ovs-vsctl add-br br-int # 添加三个内部端口 ovs-vsctl add-port br-int vnet0 -- set Interface vnet0 type=internal ovs-vsctl add-port br-int vnet1 -- set Interface vnet1 type=internal ovs-vsctl add-port br-int vnet2 -- set Interface vnet2 type=internal # 添加三个netns ip netns add ns0 ip netns add ns1 ip netns add ns2 # 将内部端口分别移动到netns中 ip link set vnet0 netns ns0 ip link set vnet1 netns ns1 ip link set vnet2 netns ns2 # 启动端口并配置IP ip netns exec ns0 ip link set lo up ip netns exec ns0 ip link set vnet0 up ip netns exec ns0 ip addr add 10....

November 26, 2020 · 3 分钟 · dushixiang

Open vSwitch 入门实践(1)Open vSwitch 是什么

OVS简介 Open vSwitch 是什么? Open vSwitch(以下简称OVS)是一个用C语言开发的多层虚拟交换机,使用Apcahe 2开源许可证,现如今基本上已经成为了开源SDN(软件定义网络)基础设施层的事实标准。 OVS支持哪些功能? 支持NetFlow、sFlow(R)、IPFIX、SPAN、RSPAN和GRE隧道镜像等多种流量监控协议 支持LACP (IEEE 802.1AX-2008) 支持标准802.1Q VLAN协议,允许端口配置trunk模式 支持组播 支持BFD和802.1ag链路监控 支持STP(IEEE 802.1D-1998)和RSTP(IEEE 802.1D-2004) 支持细粒度的QoS(服务质量)配置 支持HFSC qdisc 支持接管每一个虚拟机的流量 支持基于源MAC的负载均衡、主备模式和L4哈希的端口绑带 支持OpenFlow协议(包含了很多对虚拟化的扩展) 支持IPv6 支持多种隧道协议(GRE、VXLAN、STT、Geneve和IPsec) 支持C和Python的远程配置协议 支持内核和用户空间的转发引擎选项 具有流缓存引擎的多表转发管道 转发层抽象以简化向新软件和硬件平台的移植 OVS的术语解释 Bridge 中文名称网桥,一个Bridge代表一个以太网交换机(Switch),一台主机中可以创建一个或多个Bridge,Bridge可以根据一定的规则,把某一个端口接收到的数据报文转发到另一个或多个端口上,也可以修改或者丢弃数据报文。 Port 中文名称端口,需要注意的是它和TCP里面的端口不是同样的概念,它更像是物理交换机上面的插口,可以接水晶头的那种。Port隶属于Bridge,必须先添加了Bridge才能在Bridge上添加Port。Port有以下几种类型: Normal 用户可以把操作系统中已有的网卡添加到Open vSwicth上,Open vSwitct会自动生成一个同名的Port开处理这张网卡进和出的数据报文。 不过需要注意的是这种方式添加的Port不支持分配IP地址,如果之前网卡上配置的有IP,挂载到OVS上面之后将不可访问。此类型的Port常用于VLAN模式的多台物理主机相连的那个口,交换机一端属于Trunk模式。 Internal 当Port的类型是Internal时,OVS会自动创建一个虚拟网卡(Interface),此端口收到的数据报文都会转发给这块网卡,从这块网卡发出的数据报文也会通过Port交给OVS处理。当OVS创建一个新的网桥时,会自动创建一个与网桥同名的Internal Port,同时也会创建一个与网桥同名的Interface,因此可以通过ip命令在操作系统中查看到这张虚拟网卡,但是状态是down的。 Patch Patch Port和veth pair功能相同,总是成双成对的出现,在其中一端收到的数据报文会被转发到另一个Patch Port上,就像是一根网线一样。Patch Port常用于连接两个Bridge,这样两个网桥就和一个网桥一样了。 Tunnel OVS 支持 GRE、VXLAN、STT、Geneve和IPsec隧道协议,这些隧道协议就是overlay网络的基础协议,通过对物理网络做的一层封装和扩展,解决了二层网络数量不足的问题,最大限度的减少对底层物理网络拓扑的依赖性,同时也最大限度的增加了对网络的控制。 Interface (iface/接口)接口是OVS与操作系统交换数据报文的组件,一个接口即是操作系统上的一块网卡,这个网卡可能是OVS生成的虚拟网卡,也有可能是挂载在OVS上的物理网卡,操作系统上的虚拟网卡(TUN/TAP)也可以被挂载在OVS上。 Controller OpenFlow控制器,OVS可以接收一个或者多个OpenFlow控制器的管理,功能主要是下发流表,控制转发规则。 Flow 流表是OVS进行数据转发的核心功能,定义了端口之间转发数据报文的规则,一条流表规则主要分为匹配和动作两部分,匹配部分决定哪些数据报文需要被处理,动作决定了匹配到的数据报文该如何处理。 OVS常用操作 安装 yum install openvswitch systemctl enable openvswitch systemctl start openvswitch 如果当前软件源中没有openvswitch,可以通过阿里云官方镜像站下载和操作系统版本对应的rpm包到本地再安装。 示例命令: yum localinstall openvswitch-2....

November 25, 2020 · 2 分钟 · dushixiang

服务器不允许上网并且需要跳板机才能访问?学会使用这个工具,轻松让服务器使用yum。

前言 你是否遇到过这样的场景,服务器不能上网,但是又需要安装某个软件,面对如蛛网般杂乱的rpm包依赖关系,放弃或许是最好的选择,这样你就不必再为无法完成工作而痛苦又懊恼。 但是今天,你有了一个更好的选择。 4DNAT 4DNAT取名源自4和DNAT。这个工具工作在OSI模型的第四层传输层,同时4和for谐音,意为专门为目标地址转换而服务的工具。4DNAT使用go语言开发,具有天然的跨平台性,并且完全使用go标准库开发,没有任何的第三方依赖,编译之后只有一个二进制可执行文件。它有4种工作模式: 转发模式 接受两个参数,监听端口和目标地址,在监听端口接收到请求后会主动连接目标地址,示例: ./4dnat -forward 2222 192.168.1.100:22 监听模式 接受两个参数,监听端口1和监听端口2,并交换两个端口接收到的数据,示例: ./4dnat -listen 10000 10001 代理人模式 接受两个参数,目标地址1和目标地址2,启动后会主动连接这两个目标地址,并交换两个端口接收到的数据,示例: ./4dnat -agent 127.0.0.1:10000 127.0.0.1:22 http/https代理模式 接受两个参数或四个参数,代理类型、监听端口、证书路径和私钥路径,示例: http代理 ./4dnat -proxy http 1080 https代理 ./4dnat -proxy https 1080 server.crt server.key 使用场景 场景一 期望可以在用户电脑上直接访问目标服务器上的3306端口,跳板机器是一台Windows机器,没办法做ssh端口转发。 单向虚线箭头表示可以单向访问,反之不行。 使用4DNAT在跳板机器上执行如下命令做端口转发 # 本地监听3307端口,接收到请求后主动连接10.1.0.40的3306端口 ./4dnat -forward 3307 10.1.0.40:3306 在用户电脑上访问172.16.0.30:3307即等同于访问10.1.0.40:3306,于是就可以在用户电脑愉快的访问目标机器上的服务啦。 场景二 期望目标目标机器可以上网,如使用yum安装软件。 在用户电脑上开启一个http代理 ./4dnat -proxy http 1080 在跳板机器上使用监听模式监听两个端口,用于交换数据 ./4dnat -listen 10000 10001 在目标机器上使用监听模式监听两个端口,用于交换数据 ./4dnat -listen 20000 20001 在用户电脑上使用代理人模式主动连接两个目标地址,用于交换数据 ./4dnat -agent 127.0.0.1:1080 172....

November 19, 2020 · 1 分钟 · dushixiang

Docker?Vmware?小孩子才做选择,打工人我全都要。

前言 作为一个称职的打工人,电脑上常备一个Vmware不是什么新鲜事了,但是它和Docker for Windows不兼容往往很让人头大。通过查找资料,发现提供的解决方案大致有三种 先使用Vmware创建一台Linux虚拟机,在这台Linux虚拟机上再安装docker。 配置Vmware作为Docker for Windows的运行平台。 使用微软的Hyper-v来创建虚拟机。 对我而言,第一种不太优雅,第二种配置繁琐,第三种不会用。 直到我发现了vctl这个好东西。 vctl 是什么? vctl 是一款捆绑在Vmware Workstation Pro 应用程序中的命令行实用程序,仅在 Windows 10 1809 或更高版本上受支持。如果 Workstation Pro 所在主机上的 Windows 操作系统低于 Windows 10 1809,则它不支持 vctl CLI。 简单来说它就是Vmware上的一个工具,可以用它来管理容器,使用命令基本上和docker一致,只需要把docker <cmd>换成vctl <cmd>就足够了。Docker for Windows?不需要。现在容器都交给vctl来管理了。 在使用vctl命令前,和启动docker一样,需要先启动vctl的守护进程。 vctl system start 当需要关闭守护进程时执行 vctl system stop 接下来就是和普通的docker命令一样了。 # 拉取镜像 vctl pull nginx # 查看镜像 vctl images # 启动容器 vctl --name some-nginx -d -p 8080:80 nginx # 查看容器 vctl ps # 进入容器 vctl exec -it <cid> bash 更多使用信息可参考Vmware的官方文档 使用vctl命令管理容器

November 17, 2020 · 1 分钟 · dushixiang

Linux Bridge 详解

Linux Bridge 详解 Linux Bridge(网桥)是用纯软件实现的虚拟交换机,有着和物理交换机相同的功能,例如二层交换,MAC地址学习等。因此我们可以把tun/tap,veth pair等设备绑定到网桥上,就像是把设备连接到物理交换机上一样。此外它和veth pair、tun/tap一样,也是一种虚拟网络设备,具有虚拟设备的所有特性,例如配置IP,MAC地址等。 Linux Bridge通常是搭配KVM、docker等虚拟化技术一起使用的,用于构建虚拟网络,因为此教程不涉及虚拟化技术,我们就使用前面学习过的netns来模拟虚拟设备。 如何使用Linux Bridge? 操作网桥有多种方式,在这里我们介绍一下通过bridge-utils来操作,由于它不是Linux系统自带的工具,因此需要我们手动来安装它。 # centos yum install -y bridge-utils # ubuntu apt-get install -y bridge-utils 使用brctl help查看使用帮助 never heard of command [help] Usage: brctl [commands] commands: addbr <bridge> add bridge delbr <bridge> delete bridge addif <bridge> <device> add interface to bridge delif <bridge> <device> delete interface from bridge hairpin <bridge> <port> {on|off} turn hairpin on/off setageing <bridge> <time> set ageing time setbridgeprio <bridge> <prio> set bridge priority setfd <bridge> <time> set bridge forward delay sethello <bridge> <time> set hello time setmaxage <bridge> <time> set max message age setpathcost <bridge> <port> <cost> set path cost setportprio <bridge> <port> <prio> set port priority show [ <bridge> ] show a list of bridges showmacs <bridge> show a list of mac addrs showstp <bridge> show bridge stp info stp <bridge> {on|off} turn stp on/off 常用命令如...

November 13, 2020 · 4 分钟 · dushixiang