创建新的网络命名空间:

sudo ip netns add ns1
sudo ip netns add ns2

创建一对 veth 接口:(连接2个不同的命名空间)

sudo ip link add veth1 type veth peer name veth2

将 veth1 移动到命名空间 ns1,将 veth2 移动到命名空间 ns2:

sudo ip link set veth1 netns ns1
sudo ip link set veth2 netns ns2

在 ns1 中配置 veth1 接口:

sudo ip netns exec ns1 ip addr add 192.168.1.2/24 dev veth1
sudo ip netns exec ns1 ip link set veth1 up
sudo ip netns exec ns1 ip link set lo up

在 ns2 中配置 veth2 接口:

sudo ip netns exec ns2 ip addr add 192.168.1.3/24 dev veth2
sudo ip netns exec ns2 ip link set veth2 up
sudo ip netns exec ns2 ip link set lo up

在 ns1 中配置路由:

sudo ip netns exec ns1 ip route add default dev veth1

查看某个命名空间的网络接口:

sudo ip netns exec ns1 ip link show 

查看网络接口:

sudo ip link show 

查看命名空间:

sudo ip netns show 

启动/禁用网络接口:

ip link set eth0 up/down

查看主命名空间中 veth1 的 IP 地址:

ip addr show dev veth1

如果 veth1 在命名空间 ns1 中:

sudo ip netns exec ns1 ip addr show dev veth1

在主命名空间中绑定 IP 地址:

ip addr add 192.168.1.2/24 dev veth1

Open vSwitch(OVS)是一种高性能、多层虚拟交换机,广泛应用于各种网络虚拟化和云计算环境中。

  • 在数据中心中,OVS用于在虚拟机(VM)或容器之间提供网络连接和隔离。它支持多种隧道协议(如 VXLAN、GRE)和 VLAN,以实现虚拟网络的分段和隔离。
  • 在云计算平台(如 OpenStack、Kubernetes)中,OVS用于实现虚拟网络的创建和管理,为不同租户提供隔离的网络环境。

创建虚拟交换机:

sudo ovs-vsctl add-br br0

查看当前的 OVS 配置:

sudo ovs-vsctl show

将虚拟机的虚拟网络接口 vnet0 添加到网桥 br0:

sudo ovs-vsctl add-port br0 vnet0

使用 ovs-ofctl 工具配置 OVS 的流表。例如,将所有来自 eth0 的流量转发到 vnet0:

sudo ovs-ofctl add-flow br0 in_port=eth0,actions=output:vnet0

Ryu 是一个开源的 SDN 控制器框架,使用 Python 编写。

apt install python3-venv
python3 -m venv ryu-env

激活虚拟环境:

source ryu-env/bin/activate
pip install ryu

如果安装ryu有兼容问题, 编辑 ryu/hooks.py 文件,注释掉或修改不兼容的部分:

git clone https://github.com/faucetsdn/ryu.git
cd ryu
修改源码
# _main_module()._orig_get_script_args = easy_install.get_script_args
pip install .

Mininet 是一个用于创建虚拟网络的工具,常用于测试 SDN 控制器。

sudo apt-get install mininet

Mininet 可以创建复杂的topo:

#!/usr/bin/python

from mininet.net import Mininet
from mininet.node import Controller, OVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info

def customTopo():
    net = Mininet(controller=Controller, switch=OVSSwitch)

    info('*** Adding controller\n')
    net.addController('c0')

    info('*** Adding switches\n')
    s1 = net.addSwitch('s1')
    s2 = net.addSwitch('s2')

    info('*** Adding hosts\n')
    h1 = net.addHost('h1')
    h2 = net.addHost('h2')
    h3 = net.addHost('h3')
    h4 = net.addHost('h4')

    info('*** Creating links\n')
    net.addLink(h1, s1)
    net.addLink(h2, s1)
    net.addLink(s1, s2)
    net.addLink(s2, h3)
    net.addLink(s2, h4)

    info('*** Starting network\n')
    net.start()

    info('*** Running CLI\n')
    CLI(net)

    info('*** Stopping network\n')
    net.stop()

if __name__ == '__main__':
    setLogLevel('info')
    customTopo()

集成 SDN 控制器测试:

  • 启动 Ryu 控制器

    ryu-manager ryu.app.simple_switch_13
  • 启动 Mininet 并连接到 Ryu 控制器

    sudo mn --topo single,3 --mac --switch ovsk --controller remote,ip=127.0.0.1,port=6633
  • 在 Mininet 中进行测试
mininet> pingall
mininet> h1 iperf -s
mininet> h2 iperf -c h1

禁用链路

mininet> link s1 h1 down

启用链路

mininet> link s1 h1 up

putao
8 声望1 粉丝

推动世界向前发展,改善民生。


引用和评论

0 条评论