跳转到主要内容

NeighGen - 使用Python编写的BGP邻居配置生成器,使用PeeringDB的API发现ASN BGP地址

项目描述

NeighGen - BGP邻居配置生成器 + PeeringDB查询工具

Screenshot of ASINFO command showing the generated tables
+===================================================+
|                 © 2021 Privex Inc.                |
|               https://www.privex.io               |
+===================================================+
|                                                   |
|        NeighGen                                   |
|        License: X11/MIT                           |
|                                                   |
|        Core Developer(s):                         |
|                                                   |
|          (+)  Chris (@someguy123) [Privex]        |
|          (+)  Kale (@kryogenic) [Privex]          |
|                                                   |
+===================================================+

NeighGen - A BGP neighbour config generator written in Python, 
using PeeringDB's API to discover ASN BGP addresses.
Copyright (c) 2021    Privex Inc. ( https://www.privex.io )

Docker快速入门

docker pull privex/neighgen

docker run --rm -it privex/neighgen -h

docker run --rm -it privex/neighgen asinfo -x -F 210083
docker run --rm -it privex/neighgen asinfo -x 210083
docker run --rm -it privex/neighgen asinfo-raw 210083
docker run --rm -it privex/neighgen neigh 210083
docker run --rm -it privex/neighgen neigh -o ios 210083

如果您想能够通过数据库在本地查询PeeringDB,可以使用Git项目中准备好的Docker Compose环境。

克隆仓库

git clone https://github.com/Privex/neighgen.git

复制用于docker-compose的dk-config.yaml

cp example.dk-config.yaml dk-config.yaml

然后只需运行docker-compose up -d,这将构建neighgen和postgres容器,并在后台启动它们。

docker-compose up -d

您可以通过docker的日志来监控neighgen的导入过程

docker-compose logs -f ngen

一旦同步完成,您应该可以进入postgres容器,并执行任何查询

docker-compose exec postgres psql -U peeringdb peeringdb

请注意,PeeringDB数据库的生成不是本仓库的一部分。

PeeringDB本地数据库同步功能由peeringdb包提供:https://github.com/peeringdb/peeringdb-py

安装

从PyPi

我们建议在您的操作系统可用的最新Python版本上安装此包。

当时的大多数现代LTS版本,例如Ubuntu 20.04和Debian 10,至少有Python 3.8可用,而Ubuntu 20.04有Python 3.9可用。

例如,如果您的系统上最新的Python版本是3.8,那么您可以这样在Python 3.8上安装它

python3.8 -m pip install -U privex-neighgen

如果由于某种原因,您的Python发行版不支持使用python3.x -m pip方法调用Pip,那么您可以使用经典的pip3命令

pip3 install -U privex-neighgen

从Github

git clone https://github.com/Privex/neighgen.git
cd neighgen
# Option 1. - Install NeighGen onto your system from the repo
pip3 install -U .

# Option 2. - Create a Pipenv virtualenv, and use the software
# straight from the project folder:
pip3 install -U pipenv
pipenv install
pipenv install --dev
pipenv shell

python3 -m neighgen -h
python3 -m neighgen asinfo 210083

配置

软件主要通过一个YML配置文件进行配置。

您可以使用以下命令在~/.ngen.yml生成一个基本示例配置

neighgen gen_config -o ~/.ngen.yml yml

应用程序将按顺序搜索以下位置以查找配置,直到找到存在的配置文件。它将只加载找到的第一个配置文件

from os import getcwd
from pathlib import Path
PWD = Path(getcwd()).expanduser().resolve()
_CONFIG_FILES = [
    'config.yaml', 'config.yml', 'ngen.yaml', 'ngen.yml',
    PWD / 'config.yaml', PWD / 'config.yml', PWD / 'ngen.yaml', PWD / 'ngen.yml',
    '~/.neighgen/config.yaml', '~/.neighgen/config.yml'
    '~/.ngen/config.yaml', '~/.ngen/config.yml'
    '~/.ngen.yaml', '~/.ngen.yml'
    '~/.peeringdb/config.yaml', '~/.peeringdb/config.yml'
]

列表中的第一个文件,将在项目的基目录中进行扫描,即它将在项目的根目录中查找config.yaml / config.yml / ngen.yaml / ngen.yml,其中包含LICENSE.txtDockerfileREADME.md和其他文件。

文件的第二行,将在您的当前工作目录中进行搜索,如果您通过pip安装了应用程序,这可能会很有用,因此它将使用您当前cd到的目录中的config.yml / ngen.yaml

您还可以生成一个示例ENV文件,但是,只有在YML文件本身不适用时才应使用ENV文件/环境参数,例如,当您需要从使用ENV文件的管理系统(例如systemd)配置应用程序时。

# This will just output to your terminal. You can use either '-o', or you can
# pipe the contents to where-ever you want the ENV file to be.
neighgen gen_config env

neighgen可以生成的最后一种配置类型是稍作修改的标准YML配置,但预先配置为与Docker(特别是与docker-compose设置)一起使用。

要生成针对Docker的YML配置

neighgen gen_config -o dk-config.yaml docker

示例

asinfo

以美观的表格形式显示PeeringDB关于AS210083 (Privex)的信息

python3 -m neighgen asinfo 210083

以美观的表格形式显示PeeringDB关于AS210083 (Privex)的信息,并包括互联网交换信息

python3 -m neighgen asinfo -x 210083

以美观的表格形式显示PeeringDB关于AS210083 (Privex)的信息,并包括互联网交换信息和设施信息

python3 -m neighgen asinfo -x -F as210083

asinfo-raw

以编程形式显示PeeringDB关于AS210083的信息 - 默认为JSON格式

python3 -m neighgen asinfo-raw 210083

以编程形式显示PeeringDB关于AS210083的信息,包括IXP和设施信息

python3 -m neighgen asinfo-raw -x -F 210083

仅以编程形式显示PeeringDB关于AS210083的IXP信息

python3 -m neighgen asinfo-raw -OX 210083

仅以编程形式显示PeeringDB关于AS210083的设施信息

python3 -m neighgen asinfo-raw -OF 210083

以编程形式显示PeeringDB关于AS210083的IXP信息 - 但为YAML格式而不是JSON

python3 -m neighgen asinfo-raw -OX 210083 yml

以编程形式显示PeeringDB关于AS210083的信息,包括IXP和设施信息,但为XML格式而不是JSON

python3 -m neighgen asinfo-raw -x -F 210083 xml

neigh

显示与AS210083在所有其IXP上进行对等连接的邻居配置,使用默认的操作系统配置格式'nxos'(Cisco NX-OS)

python3 -m neighgen neigh 210083

仅显示名称中包含'ams-ix'的交换点的AS210083的对等配置,使用默认的操作系统配置格式'nxos'(Cisco NX-OS)

python3 -m neighgen neigh 210083 ams-ix

与上一个示例相同,但这次我们手动指定我们想要配置为与'ios'(Cisco IOS)一起使用

python3 -m neighgen neigh -o ios 210083 ams-ix

与上一个示例相同,但我们将v4和v6的对等策略设置为空白,从而禁用了添加对等策略邻居命令

python3 -m neighgen neigh -p4 '' -p6 '' -o ios 210083 ams-ix

网络AS13335在多个不同的AMS-IX区域进行对等连接,因此要限制邻居只使用名为"AMS-IX"的IXP,而不是"AMS-IX香港"或"AMS-IX加勒比",我们使用"-X"启用精确IXP匹配(匹配不区分大小写)。这确保它只使用名为"AMS-IX"的交换点的IXP对等,而不使用其其他区域。

python3 -m neighgen neigh -X 13335 ams-ix

许可证

此Python模块由位于伯利兹城Privex Inc.创建,并许可为X11/MIT许可证。有关许可证文本,请参阅文件LICENSE

TL;DR;许可证

我们不提供任何保修。您可以复制它、修改它、在具有不同许可证的项目中使用它,甚至在其商业(付费)软件中使用它。

最重要的规则是 - 您必须保留原始许可文本的可视性(见 LICENSE)在任何副本中。

截图

完整的截图相册可以在以下链接找到: https://imgur.com/a/5Z15DSv

Screenshot of ASINFO command showing the generated tables

ASINFO 命令的截图,显示了带有颜色编码生成的 Unicode/ASCII 表。

使用的命令

python3 -m neighgen asinfo -x -F 210083
# Alternative if you have neighgen installed from pip:
neighgen asinfo -x -F 210083
Screenshot of ASINFO-RAW command showing outputted JSON

ASINFO-RAW 命令的截图,显示了输出的 JSON,它表示 ASN 的元数据,包括它们的 IXP 和设施。

使用的命令

python3 -m neighgen asinfo-raw -x -F 210083
# Alternative if you have neighgen installed from pip:
neighgen asinfo-raw -x -F 210083
Screenshot of ASINFO-RAW command in YML output mode

ASINFO-RAW 命令的截图 - 与前一个示例相同,但以 YML 输出模式而不是 JSON。

使用的命令

python3 -m neighgen asinfo-raw -x -F 210083 yml
# Alternative if you have neighgen installed from pip:
neighgen asinfo-raw -x -F 210083 yml
Screenshot of ASINFO-RAW command in XML output mode

ASINFO-RAW 命令的截图 - 与前一个示例相同,但以 XML 输出模式而不是 JSON。

使用的命令

python3 -m neighgen asinfo-raw -x -F 210083 xml
# Alternative if you have neighgen installed from pip:
neighgen asinfo-raw -x -F 210083 xml
Screenshot of NEIGH command, showing both NX-OS and IOS generated config

NEIGH 命令的截图,显示了 NX-OS 和 IOS 生成的配置。

生成的配置可以粘贴到运行 NX-OS 或 IOS 的 Cisco 设备的 CLI 中。

有各种 CLI 参数和 YML 配置选项可用于自定义生成的配置,例如启用/禁用对等模板/策略/会话,或更改它们所引用的名称。

使用的命令

python3 -m neighgen neigh 210083 ams-ix
python3 -m neighgen neigh -o ios 210083 sthix
# Alternative if you have neighgen installed from pip:
neighgen neigh 210083 ams-ix
neighgen neigh -o ios 210083 sthix

感谢阅读!

如果这个项目对您有帮助,请考虑从 Privex 购买 VPS 或专用服务器

价格从低至每月 US$0.99 开始(我们接受加密货币!)

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分布

privex_neighgen-0.8.0.tar.gz (26.9 KB 查看哈希值

上传时间 源代码

构建分布

privex_neighgen-0.8.0-py3-none-any.whl (28.1 KB 查看哈希值

上传时间 Python 3

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面