Как украсть control plane или приготовление EIGRP для Juniper

    Как известно, SDN первоначально определялось как возможность физического разделения control и data plane. Хочу показать реализацию этой идеи без openflow и специальных контроллеров. В качестве control plane будет выступать отладочная плата ODROID-C1 с IOS запущеным внутри Dynamips. Как data plane выступает Juniper EX-2200.

    На плате будет работать протокол EIGRP, строить таблицу маршрутизации, а коммутатор на основании этой таблицы пересылать данные.

    Сначала объясню почему такой выбор:
    1. EIGRP широко известный протокол, полноценно реализованый только на устройствах cisco
    2. Juniper — т.к. второй по популярности вендор
    3. Juniper EX-2200 — самая младшая модель, так что метод будет работать со всеми более старшими
    4. ODROID-C1 был в своё время выбран из-за «честной» 1G сетевой карты (можно использовать любой сервер с linux).
    5. EX-2200 — по ширине меньше юнита, и в свободное место полностью помещается отладочная плата, так что вся конструкция помещается в 1U и не требует дополнительного места в стойке


    Как это будет работать в 2х словах:
    есть сеть построеная на оборудовании cisco, протокол маршрутизации EIGRP. Добавляем коммутатор Juniper EX-2200, соединяем его так «как нужно»(т.е. как боевой маршрутизатор). В Коммутатор включаем отладочную плату с Dynamips, перенаправляем в неё весь служебный трафик протокола маршрутизации. Виртуальная cisco строит таблицу маршрутизации и через redistribute отдаёт её коммутатору. В итоге весь трафик с данными будет пересылаться по таблице маршрутизации построенной протоколом EIGRP.

    Итак, тестовая схема:



    для простоты, сети нанесены на линки, а последний октет адреса всегда совпадает с номером устройства.

    конфигурации для цисок:
    R10 - Cisco 2811
    R10#sho running-config
    Building configuration…

    Current configuration: 1006 bytes
    !
    version 12.4
    service timestamps debug datetime msec
    service timestamps log datetime msec
    no service password-encryption
    !
    hostname R10
    !
    boot-start-marker
    boot-end-marker
    !
    !
    no aaa new-model
    !
    resource policy
    !
    ip subnet-zero
    !
    !
    ip cef
    !
    !
    !
    voice-card 0
    no dspfarm
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    interface FastEthernet0/0
    description S2
    ip address 10.2.0.10 255.255.255.0
    duplex auto
    speed auto
    !
    interface FastEthernet0/1
    description K15-ge0/0/8
    no ip address
    duplex auto
    speed auto
    !
    interface FastEthernet0/1.1010
    encapsulation dot1Q 1010
    ip address 10.10.0.10 255.255.255.0
    no snmp trap link-status
    !
    interface FastEthernet0/0/0
    !
    interface FastEthernet0/0/1
    !
    interface FastEthernet0/0/2
    !
    interface FastEthernet0/0/3
    !
    interface Vlan1
    no ip address
    !
    router eigrp 1
    network 0.0.0.0
    auto-summary
    !
    ip classless
    !
    !
    ip http server
    no ip http secure-server
    !
    !
    !
    !
    control-plane
    !
    !
    !
    !
    !
    !
    !
    !
    !
    line con 0
    line aux 0
    line vty 0 4
    login
    !
    scheduler allocate 20000 1000
    !
    end

    R10#

    R11 - Cisco 2851
    R11#sho running-config
    Building configuration…

    Current configuration: 897 bytes
    !
    version 12.4
    service timestamps debug datetime msec
    service timestamps log datetime msec
    no service password-encryption
    !
    hostname R11
    !
    boot-start-marker
    boot-end-marker
    !
    !
    no aaa new-model
    !
    resource policy
    !
    ip subnet-zero
    !
    !
    ip cef
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    interface GigabitEthernet0/0
    description R12-gi0/2
    ip address 10.12.1.11 255.255.255.0
    duplex auto
    speed auto
    no mop enabled
    !
    interface GigabitEthernet0/1
    description K15-ge0/0/9
    no ip address
    duplex auto
    speed auto
    !
    interface GigabitEthernet0/1.1011
    description K15
    encapsulation dot1Q 1011
    ip address 10.11.0.11 255.255.255.0
    no snmp trap link-status
    !
    router eigrp 1
    network 0.0.0.0
    no auto-summary
    !
    ip classless
    !
    no ip http server
    no ip http secure-server
    !
    snmp-server community public RO
    !
    !
    control-plane
    !
    !
    !
    line con 0
    line aux 0
    line vty 0 4
    password cisco
    login
    !
    scheduler allocate 20000 1000
    !
    end

    R11#

    R12 - WS-C3560-48TS
    R12#sho running-config
    Building configuration…

    Current configuration: 2289 bytes
    !
    version 12.2
    no service pad
    service timestamps debug uptime
    service timestamps log uptime
    no service password-encryption
    service unsupported-transceiver
    !
    hostname R12
    !
    !
    no aaa new-model
    system mtu routing 1500
    vtp mode transparent
    ip subnet-zero
    ip routing
    !
    !
    !
    !
    !
    !
    !
    no errdisable detect cause gbic-invalid
    !
    !
    spanning-tree mode pvst
    spanning-tree extend system-id
    !
    vlan internal allocation policy ascending
    !
    !
    !
    !
    interface FastEthernet0/1
    !
    interface FastEthernet0/2
    !
    interface FastEthernet0/3
    !
    interface FastEthernet0/4
    !
    interface FastEthernet0/5
    !
    interface FastEthernet0/6
    !
    interface FastEthernet0/7
    !
    interface FastEthernet0/8
    !
    interface FastEthernet0/9
    !
    interface FastEthernet0/10
    !
    interface FastEthernet0/11
    !
    interface FastEthernet0/12
    !
    interface FastEthernet0/13
    !
    interface FastEthernet0/14
    !
    interface FastEthernet0/15
    !
    interface FastEthernet0/16
    !
    interface FastEthernet0/17
    !
    interface FastEthernet0/18
    !
    interface FastEthernet0/19
    !
    interface FastEthernet0/20
    !
    interface FastEthernet0/21
    !
    interface FastEthernet0/22
    !
    interface FastEthernet0/23
    !
    interface FastEthernet0/24
    !
    interface FastEthernet0/25
    !
    interface FastEthernet0/26
    !
    interface FastEthernet0/27
    !
    interface FastEthernet0/28
    !
    interface FastEthernet0/29
    !
    interface FastEthernet0/30
    !
    interface FastEthernet0/31
    !
    interface FastEthernet0/32
    !
    interface FastEthernet0/33
    !
    interface FastEthernet0/34
    !
    interface FastEthernet0/35
    !
    interface FastEthernet0/36
    !
    interface FastEthernet0/37
    !
    interface FastEthernet0/38
    !
    interface FastEthernet0/39
    !
    interface FastEthernet0/40
    !
    interface FastEthernet0/41
    !
    interface FastEthernet0/42
    !
    interface FastEthernet0/43
    !
    interface FastEthernet0/44
    !
    interface FastEthernet0/45
    !
    interface FastEthernet0/46
    !
    interface FastEthernet0/47
    !
    interface FastEthernet0/48
    !
    interface GigabitEthernet0/1
    no switchport
    ip address 10.12.2.12 255.255.255.0
    !
    interface GigabitEthernet0/2
    no switchport
    ip address 10.12.1.12 255.255.255.0
    !
    interface GigabitEthernet0/3
    no switchport
    ip address 10.3.0.12 255.255.255.0
    !
    interface GigabitEthernet0/4
    !
    interface Vlan1
    no ip address
    !
    router eigrp 1
    network 0.0.0.0
    !
    ip classless
    ip http server
    ip http secure-server
    !
    !
    !
    control-plane
    !
    !
    line con 0
    line vty 0 4
    login
    line vty 5 15
    login
    !
    end

    R12#


    R14 - WS-C3560-24TS
    R14#sho running-config
    Building configuration…

    Current configuration: 1805 bytes
    !
    version 12.2
    no service pad
    service timestamps debug uptime
    service timestamps log uptime
    no service password-encryption
    service unsupported-transceiver
    !
    hostname R14
    !
    !
    no aaa new-model
    system mtu routing 1500
    vtp mode transparent
    ip subnet-zero
    ip routing
    !
    !
    !
    !
    !
    !
    no errdisable detect cause sfp-config-mismatch
    no errdisable detect cause gbic-invalid
    no file verify auto
    spanning-tree mode pvst
    spanning-tree extend system-id
    !
    vlan internal allocation policy ascending
    !
    vlan 100,200,300
    !
    !
    interface FastEthernet0/1
    !
    interface FastEthernet0/2
    !
    interface FastEthernet0/3
    !
    interface FastEthernet0/4
    !
    interface FastEthernet0/5
    !
    interface FastEthernet0/6
    !
    interface FastEthernet0/7
    !
    interface FastEthernet0/8
    !
    interface FastEthernet0/9
    !
    interface FastEthernet0/10
    !
    interface FastEthernet0/11
    !
    interface FastEthernet0/12
    !
    interface FastEthernet0/13
    !
    interface FastEthernet0/14
    !
    interface FastEthernet0/15
    !
    interface FastEthernet0/16
    !
    interface FastEthernet0/17
    !
    interface FastEthernet0/18
    !
    interface FastEthernet0/19
    !
    interface FastEthernet0/20
    !
    interface FastEthernet0/21
    !
    interface FastEthernet0/22
    !
    interface FastEthernet0/23
    !
    interface FastEthernet0/24
    no switchport
    ip address 10.4.0.14 255.255.255.0
    !
    interface GigabitEthernet0/1
    description K15-ge0/1/0
    no switchport
    ip address 10.14.0.14 255.255.255.0
    !
    interface GigabitEthernet0/2
    description r12-gi0/1
    no switchport
    ip address 10.12.2.14 255.255.255.0
    !
    interface Vlan1
    no ip address
    shutdown
    !
    router eigrp 1
    network 0.0.0.0
    no auto-summary
    !
    ip classless
    ip http server
    ip http secure-server
    !
    !
    ip access-list standard public
    !
    !
    control-plane
    !
    !
    line con 0
    exec-timeout 0 0
    line vty 0 4
    password cisco
    login
    line vty 5 15
    password cisco
    login
    !
    end

    R14#

    Настраиваем коммутатор:
    K15 - Juniper EX-2200
    root@K15# show
    version 13.2X50-D15.3;
    interfaces {
    interface-range tagget-ports {
    member «ge-0/0/[4-11]»;
    unit 0 {
    family ethernet-switching {
    port-mode trunk;
    vlan {
    members [ v-R11 v-R10 ];
    }
    filter {
    input cisco;
    }
    }
    }
    }
    ge-0/0/0 {
    description odroid-mgmt;
    unit 0 {
    family ethernet-switching {
    port-mode access;
    vlan {
    members v-odroid-mgmt;
    }
    }
    }
    }
    ge-0/0/1 {
    description odroid-c1;
    unit 0 {
    family ethernet-switching {
    port-mode trunk;
    vlan {
    members [ v-R14 v-R11 v-R10 v-S1 v-analyzer ];
    }
    native-vlan-id v-odroid-mgmt;
    }
    }
    }
    ge-0/0/2 {
    description S1;
    unit 0 {
    family ethernet-switching {
    port-mode access;
    vlan {
    members v-S1;
    }
    filter {
    input cisco;
    }
    }
    }
    }
    ge-0/0/8 {
    description R10;
    }
    ge-0/0/9 {
    description R11;
    }
    ge-0/1/0 {
    description R14;
    unit 0 {
    family ethernet-switching {
    port-mode access;
    vlan {
    members v-R14;
    }
    filter {
    input cisco;
    }
    }
    }
    }
    ge-0/1/1 {
    unit 0 {
    family ethernet-switching;
    }
    }
    vlan {
    unit 1001 {
    family inet {
    address 10.1.0.15/24;
    }
    }
    unit 1010 {
    family inet {
    address 10.10.0.15/24;
    }
    }
    unit 1011 {
    family inet {
    address 10.11.0.15/24;
    }
    }
    unit 1014 {
    family inet {
    address 10.14.0.15/24;
    }
    }
    }
    }
    firewall {
    family ethernet-switching {
    filter cisco {
    term eigrp {
    from {
    protocol 88;
    }
    then {
    accept;
    analyzer cisco;
    }
    }
    term others {
    then accept;
    }
    }
    }
    }
    ethernet-switching-options {
    analyzer cisco {
    output {
    vlan {
    v-analyzer;
    }
    }
    }
    dot1q-tunneling {
    ether-type 0x8100;
    }
    }
    vlans {
    v-R10 {
    vlan-id 1010;
    l3-interface vlan.1010;
    }
    v-R11 {
    vlan-id 1011;
    l3-interface vlan.1011;
    }
    v-R14 {
    vlan-id 1014;
    l3-interface vlan.1014;
    }
    v-S1 {
    vlan-id 1001;
    l3-interface vlan.1001;
    }
    v-analyzer {
    vlan-id 101;
    dot1q-tunneling;
    }
    v-odroid-mgmt;
    }


    K15 - Juniper EX-2200 - как набор комманд
    set interfaces interface-range tagget-ports member «ge-0/0/[4-11]»
    set interfaces interface-range tagget-ports unit 0 family ethernet-switching port-mode trunk
    set interfaces interface-range tagget-ports unit 0 family ethernet-switching vlan members v-R11
    set interfaces interface-range tagget-ports unit 0 family ethernet-switching vlan members v-R10
    set interfaces interface-range tagget-ports unit 0 family ethernet-switching filter input cisco
    set interfaces ge-0/0/0 description odroid-mgmt
    set interfaces ge-0/0/0 unit 0 family ethernet-switching port-mode access
    set interfaces ge-0/0/0 unit 0 family ethernet-switching vlan members v-odroid-mgmt
    set interfaces ge-0/0/1 description odroid-c1
    set interfaces ge-0/0/1 unit 0 family ethernet-switching port-mode trunk
    set interfaces ge-0/0/1 unit 0 family ethernet-switching vlan members v-R14
    set interfaces ge-0/0/1 unit 0 family ethernet-switching vlan members v-R11
    set interfaces ge-0/0/1 unit 0 family ethernet-switching vlan members v-R10
    set interfaces ge-0/0/1 unit 0 family ethernet-switching vlan members v-S1
    set interfaces ge-0/0/1 unit 0 family ethernet-switching vlan members v-analyzer
    set interfaces ge-0/0/1 unit 0 family ethernet-switching native-vlan-id v-odroid-mgmt
    set interfaces ge-0/0/2 description S1
    set interfaces ge-0/0/2 unit 0 family ethernet-switching port-mode access
    set interfaces ge-0/0/2 unit 0 family ethernet-switching vlan members v-S1
    set interfaces ge-0/0/2 unit 0 family ethernet-switching filter input cisco
    set interfaces ge-0/0/8 description R10
    set interfaces ge-0/0/9 description R11
    set interfaces ge-0/1/0 description R14
    set interfaces ge-0/1/0 unit 0 family ethernet-switching port-mode access
    set interfaces ge-0/1/0 unit 0 family ethernet-switching vlan members v-R14
    set interfaces ge-0/1/0 unit 0 family ethernet-switching filter input cisco
    set interfaces ge-0/1/1 unit 0 family ethernet-switching
    set interfaces vlan unit 1001 family inet address 10.1.0.15/24
    set interfaces vlan unit 1010 family inet address 10.10.0.15/24
    set interfaces vlan unit 1011 family inet address 10.11.0.15/24
    set interfaces vlan unit 1014 family inet address 10.14.0.15/24
    set firewall family ethernet-switching filter cisco term eigrp from protocol 88
    set firewall family ethernet-switching filter cisco term eigrp then accept
    set firewall family ethernet-switching filter cisco term eigrp then analyzer cisco
    set firewall family ethernet-switching filter cisco term others then accept
    set ethernet-switching-options analyzer cisco output vlan v-analyzer
    set ethernet-switching-options dot1q-tunneling ether-type 0x8100
    set vlans v-R10 vlan-id 1010
    set vlans v-R10 l3-interface vlan.1010
    set vlans v-R11 vlan-id 1011
    set vlans v-R11 l3-interface vlan.1011
    set vlans v-R14 vlan-id 1014
    set vlans v-R14 l3-interface vlan.1014
    set vlans v-S1 vlan-id 1001
    set vlans v-S1 l3-interface vlan.1001
    set vlans v-analyzer vlan-id 101
    set vlans v-analyzer dot1q-tunneling
    set vlans v-odroid-mgmt

    для перенаправления служебного трафика используется зеркалирование порта во ВЛАН с наложеным фильтром по IP протоколу (EIGRP).

    на отладочной плате установлен Dynamyps и Dynagen,
    собирал из исходников, эмулировалась 7200.
    Dynagen
    [localhost]
    [[7200]]
    image = /opt/dgen/c7200-adventerprisek9-mz.124-4.T4.image
    npe = npe-400
    npe2 = npe-400
    ram = 160
    [[ROUTER R1]]
    f0/0 = NIO_tap:tap0
    f0/1 = NIO_tap:tap1
    f1/1 = NIO_tap:tap2

    R15 (виртуальная cisco)
    cisco7200 - R15
    R15#sho running-config
    Building configuration…

    Current configuration: 1203 bytes
    !
    version 12.4
    service timestamps debug datetime msec
    service timestamps log datetime msec
    no service password-encryption
    !
    hostname R15
    !
    boot-start-marker
    boot-end-marker
    !
    !
    no aaa new-model
    !
    resource policy
    !
    ip subnet-zero
    ip cef
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    !
    interface FastEthernet0/0
    no ip address
    duplex auto
    speed auto
    no mop enabled
    !
    interface FastEthernet0/0.1010
    description R10
    encapsulation dot1Q 1010
    ip address 10.10.0.15 255.255.255.0
    no snmp trap link-status
    !
    interface FastEthernet0/0.1011
    description R11
    encapsulation dot1Q 1011
    ip address 10.11.0.15 255.255.255.0
    no snmp trap link-status
    !
    interface FastEthernet0/1
    description S1
    ip address 10.1.0.15 255.255.255.0
    duplex auto
    speed auto
    !
    interface FastEthernet1/0
    no ip address
    duplex auto
    speed auto
    !
    interface FastEthernet1/1
    description R14
    ip address 10.14.0.15 255.255.255.0
    duplex auto
    speed auto
    !
    router eigrp 1
    network 0.0.0.0
    auto-summary
    !
    ip classless
    no ip http server
    no ip http secure-server
    !
    !
    !
    logging alarm informational
    !
    !
    !
    !
    control-plane
    !
    !
    !
    !
    !
    !
    gatekeeper
    shutdown
    !
    !
    line con 0
    stopbits 1
    line aux 0
    stopbits 1
    line vty 0 4
    login
    !
    !
    end

    R15#en


    таким образом получается прямое соответствие интерфейсов между K15 и R15:

    vlan.1001 — fa0/1
    vlan.1010 — fa0/1.1010
    vlan.1011 — fa0/0.1011
    vlan.1014 — fa1/1

    Теперь служебный трафик попадает в odroid с двойным тегом,
    а ответы от нашего control plane должны уходить в К15 только с одним, «вторым» тегом.
    для этого стоим linux bridges:
    ip link add link eth0 v101 type vlan id 101
    ip link add link eth0 vl1001 type vlan id 1001
    ip link add link eth0 vl1014 type vlan id 1014
    brctl addbr br0
    brctl addif br0 v101
    brctl addif br0 eth0
    brctl addif br0 tap0
    brctl addif br0 tap1
    brctl addif br0 tap2
    brctl addif br0 vl1001
    brctl addif br0 vl1014
    

    теперь нам нужно, чтоб пакеты передавались по логике показаной на рисунке стрелочками, и больше никак.

    для этого переведём бридж в режим хаба (перестаёт изучать маки):
    brctl setageing br0 0 
    

    и фильтруем всё лишнее:
     ebtables -A FORWARD -i tap0 -o eth0 -j ACCEPT
     ebtables -A FORWARD -i tap1 -o vl1001 -j ACCEPT
     ebtables -A FORWARD -i tap2 -o vl1014 -j ACCEPT
     ebtables -A FORWARD -i v101 -o tap1 -p ipv4 --ip-source 10.1.0.0/24 -j ACCEPT
     ebtables -A FORWARD -i v101 -o tap2 -p ipv4 --ip-source 10.14.0.0/24 -j ACCEPT
     ebtables -A FORWARD -i v101 -o tap0 -p 802_1q -j ACCEPT
     ebtables -P FORWARD DROP
    

    в этом месте сталкиваемся с тем, что К15 и R15 имеют одинаковые IP адреса, но разные MAC адреса,
    что приводит к интересным проблемам, решаем это тоже с помощью ebtables, для начала узнаем мак с которым работает К15:
    root@K15> show ethernet-switching table | match router
      v-R10             78:fe:3d:11:22:33 Static         - Router
      v-R11             78:fe:3d:11:22:33 Static         - Router
      v-R14             78:fe:3d:11:22:33 Static         - Router
      v-S1              78:fe:3d:11:22:33 Static         - Router
    

    теперь нам надо, чтоб все пакеты уходили с этим маком:
    ebtables -t nat -A POSTROUTING -o eth0 -j snat --to-src 78:fe:3d:11:22:33 --snat-arp --snat-target ACCEPT
    ebtables -t nat -A POSTROUTING -o vl1001 -j snat --to-src 78:fe:3d:11:22:33 --snat-arp --snat-target ACCEPT
    ebtables -t nat -A POSTROUTING -o vl1014 -j snat --to-src 78:fe:3d:11:22:33 --snat-arp --snat-target ACCEPT
    

    Всё, наша «control plane» построила RIB:
    R15#show ip route 
    Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
           D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
           N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
           E1 - OSPF external type 1, E2 - OSPF external type 2
           i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
           ia - IS-IS inter area, * - candidate default, U - per-user static route
           o - ODR, P - periodic downloaded static route
    
    Gateway of last resort is not set
    
         10.0.0.0/24 is subnetted, 9 subnets
    C       10.10.0.0 is directly connected, FastEthernet0/0.1010
    C       10.11.0.0 is directly connected, FastEthernet0/0.1011
    C       10.14.0.0 is directly connected, FastEthernet1/1
    D       10.12.2.0 [90/28416] via 10.14.0.14, 00:53:32, FastEthernet1/1
    D       10.12.1.0 [90/28416] via 10.11.0.11, 00:53:32, FastEthernet0/0.1011
    D       10.2.0.0 [90/30720] via 10.10.0.10, 00:28:41, FastEthernet0/0.1010
    D       10.3.0.0 [90/28672] via 10.14.0.14, 00:08:31, FastEthernet1/1
                     [90/28672] via 10.11.0.11, 00:08:31, FastEthernet0/0.1011
    C       10.1.0.0 is directly connected, FastEthernet0/1
    D       10.4.0.0 [90/30720] via 10.14.0.14, 00:03:09, FastEthernet1/1
    R15#
     

    теперь нам надо передать эту маршрутную информацию на Juniper,
    для этого воспользуемся OSPF и особенностями его реализации у default вендора.
    Также добавляем линк и интерфейсы для обмена информацией между R15 и K15:
    К15
    set vlans v-cplane vlan-id 4000 l3-interface vlan.4000      
    set interfaces ge-0/0/1  unit 0 family ethernet-switching vlan members v-cplane    
    set interfaces vlan.4000 family inet address 100.65.127.129/30
    set protocols ospf area 0.0.0.0 interface vlan.4000 hello-interval 1 dead-interval 4
    set protocols ospf area 0.0.0.0 interface vlan.1001 passive
    set protocols ospf area 0.0.0.0 interface vlan.1010 passive
    set protocols ospf area 0.0.0.0 interface vlan.1011 passive
    set protocols ospf area 0.0.0.0 interface vlan.1014 passive
    

    R15
    R15>en
    R15#conf t
    R15(config)#interface fa0/0.4000
    R15(config-subif)#encapsulation dot1Q 4000
    R15(config-subif)#ip address 100.65.127.130 255.255.255.252
    R15(config-subif)#ip ospf hello-interval 1
    R15(config-subif)#ip ospf dead-interval 4
    R15(config-subif)#exit
    R15(config)#router eigrp 1
    R15(config-router)#no auto-summary 
    R15(config-router)#exit
    R15(config)#router ospf 1
    R15(config-router)#network 0.0.0.0 0.0.0.0 area 0
    R15(config-router)#redistribute eigrp 1 subnets 
    R15(config-router)#end
    R15#
    

    Добавляем правила в ebtables, чтоб трафик в 4000-ом ВЛАНе проходил без изменений.
    добавить надо в начало цепочки.
    ebtables -t nat -A POSTROUTING -p 802_1Q --vlan-id 4000 -j ACCEPT
    ebtables -A FORWARD -i eth0 -o tap0 -p 802_1q --vlan-id 4000 -j ACCEPT
    

    Проверяем наличие нужных маршрутов в RIB на K15:
    root@K15> show route          
    
    inet.0: 16 destinations, 16 routes (16 active, 0 holddown, 0 hidden)
    + = Active Route, - = Last Active, * = Both
    
    10.1.0.0/24        *[Direct/0] 02:59:01
                        > via vlan.1001
    10.1.0.15/32       *[Local/0] 1d 03:21:44
                          Local via vlan.1001
    10.2.0.0/24        *[OSPF/150] 00:13:16, metric 20, tag 0
                        > to 10.10.0.10 via vlan.1010
    10.3.0.0/24        *[OSPF/150] 00:13:16, metric 20, tag 0
                        > to 10.14.0.14 via vlan.1014
    10.4.0.0/24        *[OSPF/150] 00:13:16, metric 20, tag 0
                        > to 10.14.0.14 via vlan.1014
    10.10.0.0/24       *[Direct/0] 1d 03:21:26
                        > via vlan.1010
    10.10.0.15/32      *[Local/0] 1d 03:21:44
                          Local via vlan.1010
    10.11.0.0/24       *[Direct/0] 1d 03:21:26
                        > via vlan.1011
    10.11.0.15/32      *[Local/0] 1d 03:21:44
                          Local via vlan.1011
    10.12.1.0/24       *[OSPF/150] 00:13:16, metric 20, tag 0
                        > to 10.11.0.11 via vlan.1011
    10.12.2.0/24       *[OSPF/150] 00:13:16, metric 20, tag 0
                        > to 10.14.0.14 via vlan.1014
    10.14.0.0/24       *[Direct/0] 1d 03:21:27
                        > via vlan.1014
    10.14.0.15/32      *[Local/0] 1d 03:21:44
                          Local via vlan.1014
    100.65.127.128/30  *[Direct/0] 01:01:08
                        > via vlan.4000
    100.65.127.129/32  *[Local/0] 01:01:08
                          Local via vlan.4000
    224.0.0.5/32       *[OSPF/10] 01:01:09, metric 1
                          MultiRecv
    

    маршруты на месте, все сервера пингуются.

    запускаем iperf и прокачиваем трафик между S1-S3 и S2-S4:
    root@S3:~# iperf -c 10.1.0.1 -t 10 -d
    ------------------------------------------------------------
    Server listening on TCP port 5001
    TCP window size: 85.3 KByte (default)
    ------------------------------------------------------------
    ------------------------------------------------------------
    Client connecting to 10.1.0.1, TCP port 5001
    TCP window size:  413 KByte (default)
    ------------------------------------------------------------
    [  5] local 10.3.0.3 port 33375 connected with 10.1.0.1 port 5001
    [  4] local 10.3.0.3 port 5001 connected with 10.1.0.1 port 51122
    [ ID] Interval       Transfer     Bandwidth
    [  5]  0.0-10.0 sec  1.09 GBytes   939 Mbits/sec
    [  4]  0.0-10.0 sec  1.08 GBytes   928 Mbits/sec
    

    root@S4:~#  iperf -c 10.2.0.2 -t 10 -d
    ------------------------------------------------------------
    Server listening on TCP port 5001
    TCP window size: 85.3 KByte (default)
    ------------------------------------------------------------
    ------------------------------------------------------------
    Client connecting to 10.2.0.2, TCP port 5001
    TCP window size: 82.5 KByte (default)
    ------------------------------------------------------------
    [  5] local 10.4.0.4 port 59485 connected with 10.2.0.2 port 5001
    [  4] local 10.4.0.4 port 5001 connected with 10.2.0.2 port 41829
    [ ID] Interval       Transfer     Bandwidth
    [  5]  0.0-10.0 sec   111 MBytes  92.5 Mbits/sec
    [  4]  0.0-10.3 sec   102 MBytes  83.2 Mbits/sec
    


    убеждаемcя, что обычный трафик бегает wire speed.
    при этом в течении всего времени тестирования соседство по EIGRP не разрывается.
    вот и получилось, то чего хотели.

    недостатки:
    1. не рассмотрена агрегация линков.
    2. рассмотрен вариант только для RVI (Routed VLAN Interface).
    3. не работает балансировка трафика, в коммутатор отдаётся только один маршрут.
    4. медленная сходимость протокола маршрутизации, т.к. базируется только на hello пакетах (control plane не видит состояния порта и нет BFD)
    5. примерно в 6-7 раз усложнённая конфигурация, т.к. вместо одного протокола на одном устройстве, настраиваем целый набор протоколов и правил фактически на 3х сущностях.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 14

      0
      Да… чего только не сделаешь, чтобы не купить цыску :)

      Я вот, в свое время, тоже выбрал EIGRP в качестве протокола роутинга для достаточно большой корпоративной сети.
      В основном из-за его простоты (нет мороки с areas как в ospf и т.п.) в настройке.

      А потом, когда появилась необходимость добавить в сеть некоторые сегменты, работающие по OpenVPN, то пришлось городить параллельно OSPF и делать редистрибьютинг из\в EIGRP, что не особо красиво.

      Спеку EIGRP уже давно открыли, когда уже Quagga или ещё кто-то реализует её в Open Source? Всякие маргинальные IS-IS/RIP — пожалуйста, а этого нет…
        0
        Ну, если известно, что это можно сделать и вобщем-то понятно как, то зачем покупать цыску :)

        не, у меня везде «зоопарки», так что EIGRP не вариант.

        EIGRP тут скорее как широко известный представитель сетевых протоколов, аналогично можно скрестить почти любого ужа с с почти любым ежом.
        А в реальном использовании есть по аналогичной схеме CGMP.

        дык, 2 года только, и понимающие люди говорят, что как раз самое вкусное и не открыли.
        Основной массе разработчиков/вендоров EIGRP уже пофигу, на современном железе плюсов особо нет.
        А под BGP/OSPF/IS-IS/OSPF3 тоже новые фичи/баги появляются и их надо релизить/исправлять, так что им и без EIGRP не скучно.
          +1
          ну и зря вы так про isis. очень простой, масштабируемый и элегантный IGP.
            0
            Главная фича EIGRP в том, что это аппаратный протокол маршрутизации, в своей работе активно использующий ASIC микросхему, в отличии от чисто программных RIP и OSPF. Воспроизвести ASIC удалось пока только китайцам, а именно Huawei. Они в своих продуктах воспроизвели EIGRP, но убрали совместимость этого протокола с оборудованием Cisco по поличитеским, видимо, соображениям. Хотя я где-то читал что умельцы смогли подружить коммутаторы Huawei и Cisco по EIGRP :)
              0
              Какой asic, о чём вы? Во всех современных сетевых устройствах control plane и data plane разделены.
              EIGRP работает в control plane, он софтовый, никакие специализированные asic там не нужны.
            0
            удалён (промахнулся)
              0
              Ох большой вопрос. Зачем же нам в принципе EIGRP?
              Провайдеры используют протокол ISIS как более продвинутый протокол.Остальные OSPF со своими area (черт возьми как бы он не был хуже isis это мой любимый протокол). Я заметил ISIS не любят те кто не умеют с ним работать, хотя как может быть не сложным если его изучают в JNCIP,CCIE.
                0
                Причём его, вроде, выбрали в качестве основы для TRILL для «роутинга» на L2. Видать. не просто так.
                0
                вот все говорят: «Провайдеры используют протокол ISIS».
                а вы видели такого провайдера (не в северной америке)?
                  0
                  Видел. Два самых крупных провайдера на территории РФ. Не буду раскрывать коммерческую тайну как они называются, но это еще не обладаю информацией о сотовых операторах
                    0
                    OSPF используется в основном в Японии. Весь остальный провайдерский мир сидит на ISIS. И это вполне закономерно.
                    0
                    Немного отвлеченно, понимаю, что картинка на схеме символичная. На Raspberry Pi можно установить виртуальную Cisco?
                      0
                      картинка не символичная, на такой точно плате всё и крутилось.
                      На Raspberry Pi вроде тоже можно запустить, но лучше на RPi 2 (из-за процессора).
                        0
                        ARM, я тоже из-за этого больше склоняюсь к RPi 2, но по причине большего кол-ва Линукса для ARM

                    Only users with full accounts can post comments. Log in, please.