Single LAN edge deployment, dual peers

The following page explains how to set up an edge node deployment with simultaneous connections to two remote node or node groups.

With two active connections running simultaneously, you can dynamically distribute traffic across both links or apply granular routing policies. For example, you could route general traffic through the primary link while routing traffic for a specific public network through the secondary link.

Connecting to remote core nodes

graph {
    rankdir=TB;
    newrank=true;
    fontname="Arial";
    splines=ortho;
    bgcolor="transparent";
    nodesep=0.25;
    ranksep=0.5;

    node [
        shape=box,
        style="filled,rounded",
        fontname="Arial",
        fontsize=12
    ];

    edge [
        penwidth=1.5,
        fontname="Arial",
        fontsize=10
    ];

    lan [label=<LAN: <font color="#333333">198.51.100.0/24</font><br align="left"/>LAN: <font color="#333333">2001:db8::/64</font><br align="left"/>>, fillcolor="#FFFFFF", color="#666666"];

    subgraph cluster_dc0 {
        label="Node: dc0";
        labelloc="t";
        style="filled,rounded";
        fillcolor="#E9F7EF";
        color="#1E8449";

        dc0_eth0 [
            label=<<b>Interface: eth0</b><br align="left"/>    Aliases: <font color="#333333">public</font><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    IPv4 address: <font color="#333333">203.0.113.1/24</font><br align="left"/>    IPv6 address: <font color="#333333">2001:db8:1::1/64</font><br align="left"/>    Keep on shutdown: <font color="#333333">✔ (IPv4/IPv6)</font><br align="left"/>>,
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        dc0_peer1 [
            label=<<b>Peer: Link 1</b><br align="left"/>    Mode: <font color="#D4A90D">Listen</font><br align="left"/>>,
            fillcolor="#FEF9E7",
            color="#F1C40F"
        ];

        dc0_eth0 -- dc0_peer1;
    }

    subgraph cluster_dc1 {
        label="Node: dc1";
        labelloc="t";
        style="filled,rounded";
        fillcolor="#E9F7EF";
        color="#1E8449";

        dc1_eth0 [
            label=<<b>Interface: eth0</b><br align="left"/>    Aliases: <font color="#333333">public</font><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    IPv4 address: <font color="#333333">192.0.2.1/24</font><br align="left"/>    IPv6 address: <font color="#333333">2001:db8:2::1/64</font><br align="left"/>    Keep on shutdown: <font color="#333333">✔ (IPv4/IPv6)</font><br align="left"/>>,
            style="filled,rounded",
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        dc1_peer2 [
            label=<<b>Peer: Link 2</b><br align="left"/>    Mode: <font color="#D4A90D">Listen</font><br align="left"/>>,
            style="filled,rounded",
            fillcolor="#FEF9E7",
            color="#F1C40F"
        ];

        dc1_eth0 -- dc1_peer2;
    }

    subgraph cluster_cpe0 {
        label="Node: cpe0";
        labelloc="b";
        style="filled,rounded";
        fillcolor="#E9F7EF";
        color="#1E8449";

        cpe0_route1 [
            label=<<b>Route: 0.0.0.0/0</b><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    Nexthop: <font color="#333333">Link 1</font><br align="left"/>    Preference: <font color="#333333">500</font><br align="left"/>>,
            style="filled",
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_route2 [
            label=<<b>Route: ::/0</b><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    Nexthop: <font color="#333333">Link 1</font><br align="left"/>    Preference: <font color="#333333">500</font><br align="left"/>>,
            style="filled",
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_route3 [
            label=<<b>Route: 192.0.2.0/24</b><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    Nexthop: <font color="#333333">Link 2</font><br align="left"/>    Preference: <font color="#333333">500</font><br align="left"/>>,
            style="filled",
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_route4 [
            label=<<b>Route: 2001:db8:2::/64</b><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    Nexthop: <font color="#333333">Link 2</font><br align="left"/>    Preference: <font color="#333333">500</font><br align="left"/>>,
            style="filled",
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_nexthop1 [
            label=<<b>Nexthop: Peer</b><br align="left"/>    Peer: <font color="#333333">Link 1</font><br align="left"/>>
            style="filled",
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_nexthop2 [
            label=<<b>Nexthop: Peer</b><br align="left"/>    Peer: <font color="#333333">Link 2</font><br align="left"/>>
            style="filled",
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_peer1 [
            label=<<b>Peer: Link 1</b><br align="left"/>    Mode: <font color="#D4A90D">Connect</font><br align="left"/>    Interface: <font color="#D4A90D">eth1</font><br align="left"/>    Interface: <font color="#D4A90D">eth2</font><br align="left"/>    Remote (node): <font color="#D4A90D">dc0</font><br align="left"/>    Preference: <font color="#D4A90D">500</font><br align="left"/>>,
            fillcolor="#FEF9E7",
            color="#F1C40F"
        ];

        cpe0_peer2 [
            label=<<b>Peer: Link 2</b><br align="left"/>    Mode: <font color="#D4A90D">Connect</font><br align="left"/>    Interface: <font color="#D4A90D">eth1</font><br align="left"/>    Interface: <font color="#D4A90D">eth2</font><br align="left"/>    Remote (node): <font color="#D4A90D">dc1</font><br align="left"/>    Preference: <font color="#D4A90D">500</font><br align="left"/>>,
            style="filled,rounded",
            fillcolor="#FEF9E7",
            color="#F1C40F"
        ];

        cpe0_eth0 [
            label=<<b>Interface: eth0</b><br align="left"/>    Aliases: <font color="#333333">lan0</font><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    IPv4 address: <font color="#333333">198.51.100.1/24</font><br align="left"/>    IPv6 address: <font color="#333333">2001:db8::1/64</font><br align="left"/>    Keep on shutdown: <font color="#333333">✗</font><br align="left"/>>,
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_eth1 [
            label=<<b>Interface: eth1</b><br align="left"/>    Aliases: <font color="#484D4D">wan0</font><br align="left"/>    VRF: <font color="#484D4D">No VRF</font><br align="left"/>    IPv4 address: <font color="#484D4D">DHCP</font><br align="left"/>    Keep on shutdown: <font color="#333333">✔ (IPv4)</font><br align="left"/>>
        ];

        cpe0_eth2 [
            label=<<b>Interface: eth2</b><br align="left"/>    Aliases: <font color="#484D4D">wan1</font><br align="left"/>    VRF: <font color="#484D4D">No VRF</font><br align="left"/>    IPv4 address: <font color="#484D4D">DHCP</font><br align="left"/>    Keep on shutdown: <font color="#333333">✗</font><br align="left"/>>
        ];

        cpe0_peer1 -- cpe0_eth1 [weight=100];
        cpe0_peer1 -- cpe0_eth2 [weight=100];
        cpe0_peer2 -- cpe0_eth1 [weight=100];
        cpe0_peer2 -- cpe0_eth2 [weight=100];
        cpe0_route1 -- cpe0_route3 -- cpe0_eth0 [style=invis, weight=50];
        cpe0_route2 -- cpe0_route4 [style=invis, weight=100];
        cpe0_nexthop1 -- cpe0_nexthop2 [style=invis, weight=150];
        cpe0_route1 -- cpe0_eth0 [constraint=false];
        cpe0_route2 -- cpe0_eth0 [constraint=false];
        cpe0_route3 -- cpe0_eth0 [constraint=false];
        cpe0_route4 -- cpe0_eth0 [constraint=false];
        cpe0_route1 -- cpe0_nexthop1 [constraint=false];
        cpe0_route2 -- cpe0_nexthop1 [constraint=false];
        cpe0_route3 -- cpe0_nexthop2 [constraint=false];
        cpe0_route4 -- cpe0_nexthop2 [constraint=false];
        cpe0_nexthop1 -- cpe0_peer1 [constraint=false];
        cpe0_nexthop2 -- cpe0_peer2 [constraint=false];
    }

    dc0_peer1 -- cpe0_peer1 [color="#F1C40F"];
    dc1_peer2 -- cpe0_peer2 [color="#F1C40F"];

    cpe0_eth0 -- lan;

    { rank=same; cpe0_route1 -- cpe0_route2 -- cpe0_nexthop1 -- cpe0_peer1 -- cpe0_peer2 [style=invis] }
    { rank=same; cpe0_route3 -- cpe0_route4 -- cpe0_nexthop2 [style=invis] }
    { rank=same; cpe0_eth0 -- cpe0_eth1 -- cpe0_eth2 [style=invis] }
}

Instructions

  1. Follow the instructions to set up two core nodes dc0 and dc1, with the following interface configuration on dc1:

    • Name: eth0

      • Aliases: public

      • VRF: Global

      • IPv4: 192.0.2.1/24

      • IPv6: 2001:db8:2::1/64

      • Keep on shutdown enabled on both addresses

  2. Create a new node record on the management server with the name cpe0.

  3. Add the following interfaces to the newly created node:

    • Name: eth0

      • Aliases: lan0

      • VRF: Global

      • IPv4: 198.51.100.1/24

      • IPv6: 2001:db8::1/64

      • Keep on shutdown disabled

    • Name: eth1

      • Aliases: wan0

      • VRF: No VRF

      • IPv4: DHCP

      • Keep on shutdown enabled

    • Name: eth2

      • Aliases: wan1

      • VRF: No VRF

      • IPv4: DHCP

      • Keep on shutdown disabled

  4. Next, add two peers to the node, with each link targeting a different remote node:

    • Name: Link 1

      • Interface: eth1

      • Interface: eth2

      • Remote (node): dc0 (Preference: 500)

    • Name: Link 2

      • Interface: eth1

      • Interface: eth2

      • Remote (node): dc1 (Preference: 500)

  5. Then, add two nexthops to the node, one for each peer:

    • Type: Peer

      • Peer: Link 1

    • Type: Peer

      • Peer: Link 2

  6. Finally, add four routes to the node:

    • Destination: 0.0.0.0/0

      • VRF: Global

      • Nexthop: Link 1 (Preference: 500)

    • Destination: ::/0

      • VRF: Global

      • Nexthop: Link 1 (Preference: 500)

    • Destination: 192.0.2.0/24

      • VRF: Global

      • Nexthop: Link 2 (Preference: 500)

    • Destination: 2001:db8:2::/64

      • VRF: Global

      • Nexthop: Link 2 (Preference: 500)

  7. You now have a complete edge node configuration forming a peer connection with two remote nodes simultaneously. In this case, traffic directed to the 192.0.2.0/24 or 2001:db8:2::/64 networks will be routed through peer 2, while all other traffic will be routed through peer 1.

Connecting to remote core node groups

graph {
    rankdir=TB;
    newrank=true;
    fontname="Arial";
    splines=ortho;
    bgcolor="transparent";
    nodesep=0.25;
    ranksep=0.5;

    node [
        shape=box,
        style="filled,rounded",
        fontname="Arial",
        fontsize=12
    ];

    edge [
        penwidth=1.5,
        fontname="Arial",
        fontsize=10
    ];

    lan [label=<LAN: <font color="#333333">198.51.100.0/24</font><br align="left"/>LAN: <font color="#333333">2001:db8::/64</font><br align="left"/>>, fillcolor="#FFFFFF", color="#666666"];

    subgraph cluster_west {
        label="Group: West";
        labelloc="t";
        style="filled,rounded";
        fillcolor="#EAECEE";
        color="#666666";
        fontname="Arial";

        subgraph cluster_dc1 {
            label="Node: dc1";
            labelloc="t";
            style="filled,rounded";
            fillcolor="#E9F7EF";
            color="#1E8449";

            dc1_eth0 [
                label=<<b>Interface: eth0</b><br align="left"/>    Aliases: <font color="#333333">public</font><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    IPv4: <font color="#333333">203.0.113.2/24</font><br align="left"/>    IPv6: <font color="#333333">2001:db8:1::2/64</font><br align="left"/>    Keep on shutdown: <font color="#333333">✔ (IPv4/IPv6)</font><br align="left"/>>,
                fillcolor="#FFFFFF",
                color="#666666"
            ];
        }

        subgraph cluster_dc0 {
            label="Node: dc0";
            labelloc="t";
            style="filled,rounded";
            fillcolor="#E9F7EF";
            color="#1E8449";

            dc0_eth0 [
                label=<<b>Interface: eth0</b><br align="left"/>    Aliases: <font color="#333333">public</font><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    IPv4: <font color="#333333">203.0.113.1/24</font><br align="left"/>    IPv6: <font color="#333333">2001:db8:1::1/64</font><br align="left"/>    Keep on shutdown: <font color="#333333">✔ (IPv4/IPv6)</font><br align="left"/>>,
                fillcolor="#FFFFFF",
                color="#666666"
            ];
        }

        west_peer1 [
            label=<<b>Peer: Link 1</b><br align="left"/>    Mode: <font color="#D4A90D">Listen</font><br align="left"/>>,
            fillcolor="#FEF9E7",
            color="#F1C40F"
        ];

        dc1_eth0 -- west_peer1;
        dc0_eth0 -- west_peer1;
    }

    subgraph cluster_east {
        label="Group: East";
        labelloc="t";
        style="filled,rounded";
        fillcolor="#EAECEE";
        color="#666666";
        fontname="Arial";

        subgraph cluster_dc3 {
            label="Node: dc3";
            labelloc="t";
            style="filled,rounded";
            fillcolor="#E9F7EF";
            color="#1E8449";

            dc3_eth0 [
                label=<<b>Interface: eth0</b><br align="left"/>    Aliases: <font color="#333333">public</font><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    IPv4: <font color="#333333">192.0.2.2/24</font><br align="left"/>    IPv6: <font color="#333333">2001:db8:2::2/64</font><br align="left"/>    Keep on shutdown: <font color="#333333">✔ (IPv4/IPv6)</font><br align="left"/>>,
                style="filled,rounded",
                fillcolor="#FFFFFF",
                color="#666666"
            ];
        }

        subgraph cluster_dc2 {
            label="Node: dc2";
            labelloc="t";
            style="filled,rounded";
            fillcolor="#E9F7EF";
            color="#1E8449";

            dc2_eth0 [
                label=<<b>Interface: eth0</b><br align="left"/>    Aliases: <font color="#333333">public</font><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    IPv4: <font color="#333333">192.0.2.1/24</font><br align="left"/>    IPv6: <font color="#333333">2001:db8:2::1/64</font><br align="left"/>    Keep on shutdown: <font color="#333333">✔ (IPv4/IPv6)</font><br align="left"/>>,
                style="filled,rounded",
                fillcolor="#FFFFFF",
                color="#666666"
            ];
        }

        east_peer2 [
            label=<<b>Peer: Link 2</b><br align="left"/>    Mode: <font color="#D4A90D">Listen</font><br align="left"/>>,
            style="filled,rounded",
            fillcolor="#FEF9E7",
            color="#F1C40F"
        ];

        dc3_eth0 -- east_peer2;
        dc2_eth0 -- east_peer2;
    }

    subgraph cluster_cpe0 {
        label="Node: cpe0";
        labelloc="b";
        style="filled,rounded";
        fillcolor="#E9F7EF";
        color="#1E8449";

        cpe0_route1 [
            label=<<b>Route: 0.0.0.0/0</b><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    Nexthop: <font color="#333333">Link 1</font><br align="left"/>    Preference: <font color="#333333">500</font><br align="left"/>>,
            style="filled",
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_route2 [
            label=<<b>Route: ::/0</b><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    Nexthop: <font color="#333333">Link 1</font><br align="left"/>    Preference: <font color="#333333">500</font><br align="left"/>>,
            style="filled",
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_route3 [
            label=<<b>Route: 192.0.2.0/24</b><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    Nexthop: <font color="#333333">Link 2</font><br align="left"/>    Preference: <font color="#333333">500</font><br align="left"/>>,
            style="filled",
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_route4 [
            label=<<b>Route: 2001:db8:2::/64</b><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    Nexthop: <font color="#333333">Link 2</font><br align="left"/>    Preference: <font color="#333333">500</font><br align="left"/>>,
            style="filled",
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_nexthop1 [
            label=<<b>Nexthop: Peer</b><br align="left"/>    Peer: <font color="#333333">Link 1</font><br align="left"/>>
            style="filled",
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_nexthop2 [
            label=<<b>Nexthop: Peer</b><br align="left"/>    Peer: <font color="#333333">Link 2</font><br align="left"/>>
            style="filled",
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_nexthop2 [
            label=<<b>Nexthop: Peer</b><br align="left"/>    Peer: <font color="#333333">Link 2</font><br align="left"/>>
            style="filled",
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_peer1 [
            label=<<b>Peer: Link 1</b><br align="left"/>    Mode: <font color="#D4A90D">Connect</font><br align="left"/>    Interface: <font color="#D4A90D">eth1</font><br align="left"/>    Interface: <font color="#D4A90D">eth2</font><br align="left"/>    Remote (group): <font color="#D4A90D">West</font><br align="left"/>    Preference: <font color="#D4A90D">500</font><br align="left"/>>,
            fillcolor="#FEF9E7",
            color="#F1C40F"
        ];

        cpe0_peer2 [
            label=<<b>Peer: Link 2</b><br align="left"/>    Mode: <font color="#D4A90D">Connect</font><br align="left"/>    Interface: <font color="#D4A90D">eth1</font><br align="left"/>    Interface: <font color="#D4A90D">eth2</font><br align="left"/>    Remote (group): <font color="#D4A90D">East</font><br align="left"/>    Preference: <font color="#D4A90D">500</font><br align="left"/>>,
            style="filled,rounded",
            fillcolor="#FEF9E7",
            color="#F1C40F"
        ];

        cpe0_eth0 [
            label=<<b>Interface: eth0</b><br align="left"/>    Aliases: <font color="#333333">lan0</font><br align="left"/>    VRF: <font color="#333333">Global</font><br align="left"/>    IPv4: <font color="#333333">198.51.100.1/24</font><br align="left"/>    IPv6: <font color="#333333">2001:db8::1/64</font><br align="left"/>    Keep on shutdown: <font color="#333333">✗</font><br align="left"/>>,
            fillcolor="#FFFFFF",
            color="#666666"
        ];

        cpe0_eth1 [label=<<b>Interface: eth1</b><br align="left"/>    Aliases: <font color="#484D4D">wan0</font><br align="left"/>    VRF: <font color="#484D4D">No VRF</font><br align="left"/>    IPv4: <font color="#484D4D">DHCP</font><br align="left"/>    Keep on shutdown: <font color="#333333">✔ (IPv4)</font><br align="left"/>>];
        cpe0_eth2 [label=<<b>Interface: eth2</b><br align="left"/>    Aliases: <font color="#484D4D">wan1</font><br align="left"/>    VRF: <font color="#484D4D">No VRF</font><br align="left"/>    IPv4: <font color="#484D4D">DHCP</font><br align="left"/>    Keep on shutdown: <font color="#333333">✗</font><br align="left"/>>];

        cpe0_peer1 -- cpe0_eth1 [weight=100];
        cpe0_peer1 -- cpe0_eth2 [weight=100];
        cpe0_peer2 -- cpe0_eth1 [weight=100];
        cpe0_peer2 -- cpe0_eth2 [weight=100];
        cpe0_route1 -- cpe0_route3 -- cpe0_eth0 [style=invis, weight=50];
        cpe0_route2 -- cpe0_route4 [style=invis, weight=100];
        cpe0_nexthop1 -- cpe0_nexthop2 [style=invis, weight=150];
        cpe0_route1 -- cpe0_eth0 [constraint=false];
        cpe0_route2 -- cpe0_eth0 [constraint=false];
        cpe0_route3 -- cpe0_eth0 [constraint=false];
        cpe0_route4 -- cpe0_eth0 [constraint=false];
        cpe0_route1 -- cpe0_nexthop1 [constraint=false];
        cpe0_route2 -- cpe0_nexthop1 [constraint=false];
        cpe0_route3 -- cpe0_nexthop2 [constraint=false];
        cpe0_route4 -- cpe0_nexthop2 [constraint=false];
        cpe0_nexthop1 -- cpe0_peer1 [constraint=false];
        cpe0_nexthop2 -- cpe0_peer2 [constraint=false];
    }

    west_peer1 -- cpe0_peer1 [color="#F1C40F"];
    east_peer2 -- cpe0_peer2 [color="#F1C40F"];

    cpe0_eth0 -- lan;

    { rank=same; cpe0_route1 -- cpe0_route2 -- cpe0_nexthop1 -- cpe0_peer1 -- cpe0_peer2 [style=invis] }
    { rank=same; cpe0_route3 -- cpe0_route4 -- cpe0_nexthop2 [style=invis] }
    { rank=same; cpe0_eth0 -- cpe0_eth1 -- cpe0_eth2 [style=invis] }
}

Instructions

  1. Follow the instructions to set up two core node groups West and East. For the East node group, call the first node dc2 and give it the following interface configuration:

    • Name: eth0

      • Aliases: public

      • VRF: Global

      • IPv4: 192.0.2.1/24

      • IPv6: 2001:db8:2::1/64

      • Keep on shutdown enabled on both addresses

    In the same node group, call the second node dc3 and give it the following interface configuration:

    • Name: eth0

      • Aliases: public

      • VRF: Global

      • IPv4: 192.0.2.2/24

      • IPv6: 2001:db8:2::2/64

      • Keep on shutdown enabled on both addresses

  2. Next, follow the instructions for connecting to remote core nodes, but when configuring the peers, set the remote targets to the two node groups you created.