工具 | 官网 | 说明 |
---|---|---|
docker | https://www.docker.com/ | 🐋 |
frr | https://frrouting.org/ | 在linux/unix平台上的互联网路由协议套件 |
containerlab | https://containerlab.dev/ | 为docker搭建网络拓扑的工具(yaml配置文件) |
containernet | https://containernet.github.io/ | 支持sdn/docker的网络拓扑搭建工具(python代码实现) |
ryu | https://ryu-sdn.org/ | python实现的sdn控制器,支持bgp |
os-ken | https://github.com/openstack/os-ken/ | python实现的sdn控制器,支持bgp, 为ryu的后续维护版本 |
研究目的 | 工具 | 说明 |
---|---|---|
- | docker | 必须 |
frr | docker容器必须,源码可选(如果你需要修改源码重新编译为容器) | |
sdn+ovs | containernet | 可选 |
ryu | ||
单独研究frr | containerlab | 可选 |
本教程是基于ubuntu22.04进行的,python版本为3.10.12 python版本为3.10(很重要),因为部分代码需要做些修改 containerlab/containernet/ryu 都是通过源码安装
工具 | 安装步骤 | 补充说明 |
---|---|---|
Docker | https://github.com/docker/docker-install | containernet 会帮你安装docker |
frr | docker pull quay.io/frrouting/frr:10.2.1 | docker镜像地址 frr源码修改教程:todo |
containerlab | https://containerlab.dev/install/ | - |
docker pull ghcr.io/code-with-bgp-xd/infrastructure-osken:latest
在本机安装好containerlab的情况下
选择合适的地方创建虚拟环境并安装相关工具
mkdir -p ~/research && cd ~/research
git clone https://github.com/code-with-bgp-XD/infrastructure.git
cd ./infrastructure
git submodule update --init --recursive
cd ..
用于环境隔离,防止打乱本机python环境
当前目录为
reseach
└── infrastructure
python3 -m venv .venv
或者是
pip install -U virtualenv
virtualenv .venv
# 假设你使用的是bash
source .venv/bin/activate
# fish
. .venv/bin/activate.fish
如果pip安装太慢可以考虑使用国内pip镜像源
当前目录为
reseach
├── .venv
└── infrastructure
安装containernet
sudo apt-get install ansible
sudo ansible-playbook -i "localhost," -c local ./infrastructurecontainernet/ansible/install.yml
# 如果你想修改代码立刻生效,通过此方法安装
pip install -e ./infrastructure/containernet --no-binary :all:
# 普通安装模式
pip install ./infrastructure/containernet
测试containernet
参考:https://github.com/containernet/containernet?tab=readme-ov-file#running-a-basic-example
如有遇到权限问题可以试试 sudo -E env PATH=$PATH python3
安装ryu
# 回退setuptools版本
pip install setuptools==67.6.1
pip install ./infrastructure/ryu-patch
测试ryu
ryu-manager --version
- 使用
ryu-manager
时提示dns/....py出现问题,collections.Mapping
- 将
collections.Mapping
改为collections.abc.Mapping
(python3 >= 3.10)