使用 BIRD 建立 iBGP 连接

网络工程 路由 bgp
2021-07-23 12:19:30

我试图在我的实验室网络中运行 BIRD 1.4.5 的两个节点之间设置 iBGP 会话,但我无法建立工作会话。

除了不同的邻居 ip 和路由器 id 外,我的配置在两台主机上都是这样的:

log syslog { debug, trace, info, remote, warning, error, auth, fatal, bug };
router id 10.142.0.6;
debug protocols all;

protocol kernel {
import none;
export filter {
    if source = RTS_STATIC then reject;
    accept;
  };

}

protocol static {
    route 10.142.120.0/22 reject;
}

protocol bgp {
    local as 76118;
    neighbor 10.142.12.2 as 76118;
    export where source=RTS_STATIC;
    import all;
    direct;
    next hop self;
}

两台主机通过 tinc vpn 连接,并且都在 10.142.12.0/24 子网中。接口配置正确。

通过此设置,我的日志文件中没有错误,但 BGP 会话仅处于空闲状态。我已经和其他一些运行几乎相同配置的人一起检查了我的配置,它对他们有用。

如果我删除“direct”和“next hop self”配置选项,则会在主路由表中生成此路由。

10.142.112.0/22    unreachable [bgp1 16:38:55 from 10.142.12.2] * (100/-) [i]
10.142.120.0/22    unreachable [static1 16:25:50] * (200)
2个回答

所以我已经解决了问题。

第一个问题是缺少设备协议。需要该协议来获取路由器的接口。

第二个问题与第一个问题有关。BIRD 必须知道到我的 vpn 网络连接到的接口的路由。要获得此路由,我必须在静态协议块中添加静态路由,或者我必须使用直接协议定义动态获取主题。

作为最后的修改,我必须删除直接选项。我不知道为什么,但直接;选项定义了两个 BIRD 实例无法连接,并且它们之间的接口上没有流量。所以我必须在多跳模式下运行这个 iBGP BIRD 会话。如果有人能解释这最后一个小问题,那就太好了。

我的工作配置如下所示:

log syslog { debug, trace, info, remote, warning, error, auth, fatal, bug };
router id 10.142.0.2;
protocol device {
    scan time 10;
};
debug protocols all;
protocol kernel {
export filter {    
    if source = RTS_STATIC then reject;
    accept;
  };

}
protocol direct {
        interface "*";
}

protocol static {
    route 10.142.112.0/22 reject;
#   route 10.142.12.0/24 via "mapbone";
}

protocol bgp {
    local as 76118;
    neighbor 10.142.12.6 as 76118;
    export where source=RTS_STATIC;
    import all;
    next hop self;
}

你想要空路由,所以在任何地方添加一个静态路由来做到这一点。

192.0.2.1 -> null0(IP 是为该用例保留的)。

然后通过 192.0.2.1 宣布您想要 rTBH 的每个网络。

这样就行了。

http://packetlife.net/blog/2009/jul/6/remotely-triggered-black-hole-rtbh-routing/