使用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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 155,541评论 4 358
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 65,987评论 1 285
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 105,387评论 0 236
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,325评论 0 201
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,657评论 3 284
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,125评论 1 202
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,519评论 2 305
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,242评论 0 193
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,863评论 1 234
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,198评论 2 239
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,747评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,106评论 2 249
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,635评论 3 227
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,926评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,631评论 0 190
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,131评论 2 261
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,083评论 2 257

推荐阅读更多精彩内容