使用BIRD+OSPF动态路由加速游戏(Outdate)

全局TOP

Bird2.png

配置说明

  • Bird文档地址https://bird.network.cz/?get_doc&f=bird.html&v=20
  • 全系为Debian,全通过Tunnel P2P连接。其中Node C和Node D为Debian 10 无法直接安装BIRD2,我只需要添加IPV4,所以用BIRD1替代。Node A 和Node B为Debian 11 安装BIRD2。
  • 其中Node A 只被动接受路由,Node B发送路由并且接受Node C发送的路由,Node C只发送路由,Node D临时设置不接受路由也不发送路由,只做出口。
  • 所有Nodes通过BFD进行连线状态检测,发现down立即切换二号路线。
  • Node D中的WARP Tunnel关闭设定全局路由表:Table = off

详细配置

  • Node A
router id 10.120.0.2;#唯一路由ID,自定义

filter Block_All { #定义一个过滤器,全部拒绝
    reject;
}

protocol device Local {
    scan time 60;
}

protocol kernel Main {
    scan time 60;
    metric 64;
        ipv4 {#使用IPV4
        import filter Block_All;#使用过滤器禁止从本机内核路由表导出到全局路由表
        export all;#允许从全局路由中导入路由表到本机内核路由表
    };
}

protocol bfd Nodes {#新建一个名为Nodes的BFD块
    interface "vpn0" {#监听设备改为Tunnel的NIC
        passive;#被动模式
        min rx interval 100 ms;
        min tx interval 100 ms;
        idle tx interval 300 ms;
        multiplier 10;
    };
    neighbor 10.120.0.1 dev "vpn0";#本机到本机的邻居的路由也就是Node B,走vpn0这个设备
}

protocol ospf v2 Lan {#新建一个名为Lan OSPF协议块,因为是BIRD2,协议版本选V2
    tick 2;
    rfc1583compat yes;
    ipv4 {#使用IPV4
        import all;#允许从全局路由表,从邻居也就是Node B获取路由表
        export filter Block_All;#禁止从本机导出路由至全局路由表
    };
    area 10.120.0.0 {#此Tunnel区域名
        interface "vpn0" {#监听设备为Tunnal的NIC
            type ptmp;#点对点模式,关闭boardcast寻找邻居
            hello 10;
            retransmit 6;
            cost 10;
            transmit delay 5;
            dead count 5;
            wait 50;
            bfd;
            neighbors {
                10.120.0.1;#邻居ip,也就是Node B 的ip
            };
        };
    };
}
  • Node B
router id 192.168.100.253; #唯一路由ID

filter Block_All { #定义一个过滤器,全部拒绝
    reject;
}

protocol device Local {
    scan time 60;
}

protocol kernel Main {
    scan time 60;
    metric 64;
    ipv4 {
        import filter Block_All;#导入过滤器,从本机内核路由导出至全局路由表
        export all;#允许所有区域全局路由导入至本机内核路由表
    };
}

protocol static Routes { #定义一个名为Routes的静态IP路由块,发送的路由表全从这里读取
    include "routes.conf";#包含此路由表文件
    ipv4 {#使用IPV4
        import all;#从本机本块中导出路由至全局路由表
        export filter Block_All;#使用过滤器禁止全局路由表导入至本块所包含的路由表文件
    };
}

protocol bfd Nodes {#定义一个名为Nodes的BFD块
    interface "tun*" {#包含的Tunnel设备NIC,到Node A
        min rx interval 100 ms;
        min tx interval 100 ms;
        idle tx interval 300 ms;
        multiplier 10;
    };
    interface "vpn*" {#包含的Tunnel设备NIC,到Node C/D
        min rx interval 100 ms;
        min tx interval 100 ms;
        idle tx interval 300 ms;
        multiplier 10;
    };
    #所有的邻居(nodes)路由
    neighbor 10.110.0.2 dev "tun1";#(TOP图中未使用)
    neighbor 10.120.0.2 dev "tun2";#(TOP图中已使用)
    neighbor 10.130.0.2 dev "tun3";#(TOP图中未使用)
    neighbor 10.11.0.1 dev "vpn1";#(TOP图中未使用)
    neighbor 10.12.0.1 dev "vpn2";#(TOP图中已使用)
}

protocol ospf v2 Tun1 {#定义一个名为TUN1的OSPF v2版本的协议块
    tick 2;
    rfc1583compat yes;
    ipv4 {#使用IPV4
        import filter Block_All;#禁止从本区域全局路由表中导入至本机
        export all;#允许本机导出路由表到本区域全局路由表
    };
    area 10.110.0.0 {#本区域ID
        interface "tun1" {#对等NIC名
            hello 10;
            retransmit 6;
            cost 10;
            transmit delay 5;
            dead count 5;
            wait 50;
            type ptmp;#使用P2P模式连接,禁止Boardcast发现邻居
            bfd;#使用BFD检测连接状态
            neighbors {
                10.110.0.2;#对等邻居IP
            };
        };
    };
}

protocol ospf v2 Tun2 {#定义一个名为TUN2的OSPF v2版本的协议块,对等Node为Node A
    tick 2;
    rfc1583compat yes;
    ipv4 {
        import filter Block_All;#禁止从本区域全局路由表中导入至本机
        export all;#允许从本机导出路由表到本区域全局路由表
    };
    area 10.120.0.0 {#本区域ID
        interface "tun2" {#对等NIC名
            type ptmp;
            hello 10;
            retransmit 6;
            cost 10;
            transmit delay 5;
            dead count 5;
            wait 50;
            bfd;
            neighbors {
                10.120.0.2;
            };
        };
    };
}

protocol ospf v2 Tun3 {
    tick 2;
    rfc1583compat yes;
    ipv4 {
        import filter Block_All;
        export all;
    };
    area 10.130.0.0 {
        interface "tun3" {
            type ptmp;
            hello 10;
            retransmit 6;
            cost 10;
            transmit delay 5;
            dead count 5;
            wait 50;
            bfd;
            neighbors {
                10.130.0.2;
            };
        };
    };
}

protocol ospf v2 USA {#定义一个名为USA的OSPF v2版本的协议块,对等Node为Node C
    tick 2;
    rfc1583compat yes;
    ipv4 {
        import all;#允许从本区域全局路由表导入至本机
        export filter Block_All;#禁止从本机导出路由表到本区域全局路由表
    };
    area 10.11.0.0 {#区域ID
        interface "vpn1" {#对等NIC,对等Node为Node C
            type ptmp;#P2P模式
            hello 10;
            retransmit 6;
            cost 10;
            transmit delay 5;
            dead count 5;
            wait 50;
            bfd;#使用BFD检测连接是否正常
            neighbors {
                10.11.0.1;#邻居IP,也就是Node C的IP
            };
        };
    };
}

protocol ospf v2 TW {#定义一个名为TW的OSPF v2版本的协议块,对等Node为Node D
    tick 2;
    rfc1583compat yes;
    ipv4 {#使用IPV4
        import all;#允许本区域全局路由表导入至本机
        export filter Block_All;#禁止从本机导出路由表到本区域全局路由
    };
    area 10.12.0.0 {#本区域ID
        interface "vpn2" {#对等NIC,对应为Node D
            type ptmp;#使用P2P模式连接
            hello 10;
            retransmit 6;
            cost 10;
            transmit delay 5;
            dead count 5;
            wait 50;
            bfd;#使用BFD检测连接是否正常
            neighbors {
                10.12.0.1;#对端IP
            };
        };
    };
}
  • Node C,本机安装的为BIRD非BIRD2,默认为IPV4,不需要ipv4块和ospf v2
router id 10.11.0.1;#唯一路由ID

filter Block_All {
    reject;
}

protocol device Local {
    scan time 60;
}

protocol kernel Main {
    scan time 60;
    metric 64;
    import filter Block_All;#禁止本机内核路由导入至全局路由
    export all;#允许全局路由导入到本机内核路由
}

protocol static {#定义一个静态路由块,不填名字会自动随机命名
    route 15.235.0.0/16 via "vpn";#一条静态路由表,走WARP端口,格式同Node B 的include中的文件内容相同
    import all;#导入至全局路由
    export filter Block_All;#静止导入到本块
}

protocol bfd Nodes {#定义一个名为Nodes的BFD块
    interface "tun2" {#Tunnel NIC
        passive;
        min rx interval 100 ms;
        min tx interval 100 ms;
        idle tx interval 300 ms;
        multiplier 10;
    };
    neighbor 10.11.0.2 dev "tun2";#到对端邻居的路由,对应Node B
}

protocol ospf Lan {#定义一个名为Lan的OSPF块,非BIRD2不需要V2
    tick 2;
    rfc1583compat yes;
    import filter Block_All;#禁止从本区域全局路由导入至本机
    export all;#允许从本机导入路由到本区域全局路由
    area 10.11.0.0 {#区域ID
        interface "tun2" {#Tunnel NIC
            type ptmp;#使用P2P模式
            hello 10;
            retransmit 6;
            cost 10;
            transmit delay 5;
            dead count 5;
            wait 50;
            bfd;#使用BFD检测连接
            neighbors {#对端IP,对应Node B
                10.11.0.2;
            };
        };
    };
}

  • Node D,本机安装的为BIRD非BIRD2,默认为IPV4,不需要ipv4块和ospf v2

router id 10.12.0.1;#唯一路由ID

filter Block_All {
    reject;
}

protocol device Local {
    scan time 60;
}

protocol kernel Main {
    scan time 60;
    metric 64;
    import filter Block_All;#禁止本机内核路由导入到全局路由
    export filter Block_All;#禁止全局路由导入到本机内核路由
}

protocol bfd Nodes {#定义一个名为Nodes的BFD块
    interface "tun2" {#Tunnel NIC
        passive;#被动模式
        min rx interval 20 ms;
        min tx interval 50 ms;
        idle tx interval 300 ms;
    };
    neighbor 10.12.0.2 dev "tun2";#到对端的路由,这里对应是Node B
}

protocol ospf Lan {#定义一个名为Lan的OSPF块
    tick 2;
    rfc1583compat yes;
    import filter Block_All;#禁止本机路由导入到本区域全局路由
    export filter Block_All;#禁止本区域全局路由导入到本机路由
    area 10.12.0.0 {#本区域ID
        interface "tun2" {#Tunnel NIC
            type ptmp;#P2P模式
            hello 10;
            retransmit 6;
            cost 10;
            transmit delay 5;
            dead count 5;
            wait 50;
            bfd;#使用BFD检测连接状况
            neighbors {
                10.12.0.2;#对端邻居IP,这里对应Node B
            };
        };
    };
}

route 147.135.0.0/16
    via 10.11.0.1 bfd;#主要出口,使用BFD测活
    via 10.12.0.1 bfd;#备份出口,主要出口挂了用备用出口

在Node C添加的路由如下:

 route 15.235.0.0/16 via "vpn";#到15.235.0.0/16出口为WARP

在Node A上Traceroute,正确分流。

  • 最终效果图


    Fina.png
A.png
B.png
C.png
D.png
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容