klh

迁移 quagga-ripd 到 bird2 的配置实例分享

  •  
  •   klh · 2h 13m ago · 104 views

    多年前分享了一些帖子主要是多个 LAN 通过 n2n/tinc 等 P2P 技术组网后再通过 quagga-ripd 进行动态路由建立连接,如/t/791392等,但在新版本的 openwrt 上  quagga 已经不再官方库中提供了,一个比较简便的方便以及直接使用 frr 进行替换,frr 是 quagga 的分支,配置基本能够通用,配置方法也是接近一致,经过测试是能够正常工作的。

    但是一个更好的/更现代的方案就是通过 bird2 做动态路由管理,但是 bird2 和 quagga 的配置差异比较大,而且官方文档其它没有很好的介绍配置的具体作用,要想正常建立一下配置还是挺多坑的,特别是要兼容旧的用 quagga 建立的 rip 路由。

    以下分享一下具体配置的迁移实例供参考:

    The Migration Example

    Let’s look at a concrete scenario. Suppose you have an OpenWrt router acting as a node in a mesh network connected via Tinc VPN (tincn0) and serving a local LAN (br-lan).

    The Old Quagga Configuration (/etc/quagga/ripd.conf)

    In Quagga, the configuration relied on VTY lines for local access security and network network-fuzzing statements:

    password zebra
    !
    router rip
     network 10.193.111.0/24
     route 10.193.99.0/24
    !
    access-list vty permit 127.0.0.0/8
    access-list vty deny any
    !
    line vty
     access-class vty
    
    

    The New Equivalent BIRD2 Configuration (/etc/bird.conf)

    In BIRD2, there is no need for local VTY passwords because administration is safely handled via a local Unix Domain Socket (/var/run/bird.ctl).

    Instead of network network-fuzzing statements, BIRD2 maps explicitly to kernel interfaces and uses an Export Filter to control exactly what routes get broadcasted:

    # 1. Standard Production Log Levels
    log syslog { info, warning, error, fatal };
    
    # 2. Unique Router Identifier
    router id 10.193.111.99;
    
    # Core Protocol: Synchronizes BIRD routing table with the Linux Kernel
    protocol kernel {
        ipv4 {
            import all;
            export all; # Push routes learned via RIP straight to OpenWrt kernel
        };
    }
    
    # Core Protocol: Monitors interface link states (Up/Down)
    protocol device {
    }
    
    # Core Protocol: Imports local directly-connected interfaces into BIRD's memory
    protocol direct {
        ipv4;
        interface "br-lan", "tincn0";
    }
    
    # RIP Dynamic Routing Protocol Instance
    protocol rip my_rip {
        ipv4 {
            import all;    # Accept all RIP routes sent by neighbors
            export filter {
                # Equivalent to Quagga's 'network' and 'route' statements.
                # Only announce these specific local prefixes to neighbors.
                if net ~ [ 10.193.111.0/24, 10.193.99.0/24 ] then accept;
                reject;
            };
        };
    
        # Run RIPv2 Multicast over the Tinc VPN Interface
        interface "tincn0" {
            version 2;
            mode multicast;
            update time 30;
        };
    
        # Run RIPv2 Multicast over the Local LAN Interface
        interface "br-lan" {
            version 2;
            mode multicast;
            update time 30;
        };
    }
    
    

    以上,供参考。

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3922 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 04:14 · PVG 12:14 · LAX 21:14 · JFK 00:14
    ♥ Do have faith in what you're doing.