# Bonding Examples

### <span class="mw-headline">Bonding EoIP tunnels over two wireless links</span>

This is an example of aggregating multiple network interfaces into a single pipe. In particular, it is shown how to aggregate multiple virtual (EoIP) interfaces to get maximum throughput (MT) with emphasis on availability.

### <span class="mw-headline">Network Diagram</span>

Two routers R1 and R2 are interconnected via wireless links. Wireless interfaces on both sides have assigned IP addresses.

[![image.png](https://techblog.jcditservices.com/uploads/images/gallery/2024-10/scaled-1680-/Hk5image.png)](https://techblog.jcditservices.com/uploads/images/gallery/2024-10/Hk5image.png)

### <span class="mw-headline">Configuration</span>

Bonding could be used only on OSI layer 2 (Ethernet level) connections. Thus we need to create EoIP interfaces on each of the wireless links. This is done as follows:

on router R1:

<div class="wiki-content" id="bkmrk-%2Finterface-eoip-add-"><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div class="codeBlockContainer_yyk2gsoAwjaamghp6yoO-Q=="><span class="prismjs css-nc0a95" data-code-lang="text" data-ds--code--code-block="">`<span class="">/interface eoip add remote-address=10.0.1.1/24 tunnel-id=1 </span>/interface eoip add remote-address=10.2.2.1/24 tunnel-id=2`</span></div></div></div></div>and on router R2:

<div class="wiki-content" id="bkmrk-%2Finterface-eoip-add--1"><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div class="codeBlockContainer_yyk2gsoAwjaamghp6yoO-Q=="><span class="prismjs css-nc0a95" data-code-lang="text" data-ds--code--code-block="">`<span class="">/interface eoip add remote-address=10.0.1.2/24 tunnel-id=1 </span>/interface eoip add remote-address=10.2.2.2/24 tunnel-id=2`</span></div></div></div></div>The second step is to add a bonding interface and specify EoIP interfaces as slaves:

R1:

<div class="wiki-content" id="bkmrk-%2Finterface-bonding-a"><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div class="codeBlockContainer_yyk2gsoAwjaamghp6yoO-Q=="><span class="prismjs css-nc0a95" data-code-lang="text" data-ds--code--code-block="">`<span class="">/interface bonding add slaves=eoip-tunnel1,eoip-tunnel2 mode=balance-rr</span>`</span></div></div></div></div>R2:

<div class="wiki-content" id="bkmrk-%2Finterface-bonding-a-1"><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div class="codeBlockContainer_yyk2gsoAwjaamghp6yoO-Q=="><span class="prismjs css-nc0a95" data-code-lang="text" data-ds--code--code-block="">`<span class="">/interface bonding add slaves=eoip-tunnel1,eoip-tunnel2 mode=balance-rr</span>`</span></div></div></div></div>The last step is to add IP addresses to the bonding interfaces:

R1:

<div class="wiki-content" id="bkmrk-%2Fip-address-add-addr"><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div class="codeBlockContainer_yyk2gsoAwjaamghp6yoO-Q=="><span class="prismjs css-nc0a95" data-code-lang="text" data-ds--code--code-block="">`<span class="">/ip address add address 192.168.0.1/24 interface=bonding1</span>`</span></div></div></div></div>R2:

<div class="wiki-content" id="bkmrk-%2Fip-address-add-addr-1"><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div class="codeBlockContainer_yyk2gsoAwjaamghp6yoO-Q=="><span class="prismjs css-nc0a95" data-code-lang="text" data-ds--code--code-block="">`<span class="">/ip address add address 192.168.0.2/24 interface=bonding1</span>`</span></div></div></div></div>### <span class="mw-headline">Test the configuration</span>

Now two routers are able to reach each other using addresses from the 192.168.0.0/24 network. To verify bonding interface functionality, do the following:

R1:

<div class="wiki-content" id="bkmrk-%2Finterface-monitor-t"><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div class="codeBlockContainer_yyk2gsoAwjaamghp6yoO-Q=="><span class="prismjs css-nc0a95" data-code-lang="text" data-ds--code--code-block="">`<span class="">/interface monitor-traffic eoip-tunnel1,eoip-tunnel2</span>`</span></div></div></div></div>R2:

<div class="wiki-content" id="bkmrk-%2Ftool-bandwidth-test"><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div class="codeBlockContainer_yyk2gsoAwjaamghp6yoO-Q=="><span class="prismjs css-nc0a95" data-code-lang="text" data-ds--code--code-block="">`<span class="">/tool bandwidth-test 192.168.0.1 direction=transmit</span>`</span></div></div></div></div>You should see that traffic is distributed equally across both EoIP interfaces:

<div class="wiki-content" id="bkmrk-%2Fint-monitor-traffic"><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div class="codeBlockContainer_yyk2gsoAwjaamghp6yoO-Q=="><span class="prismjs css-3686h1" data-code-lang="text" data-ds--code--code-block="">`<span class="">/int monitor-traffic eoip-tunnel1,eoip-tunnel2              </span>    received-packets-per-second: 685      685                                         received-bits-per-second: 8.0Mbps  8.0Mbps                                      sent-packets-per-second: 21       20                                              sent-bits-per-second: 11.9kbps 11.0kbps                                 received-packets-per-second: 898      899                                         received-bits-per-second: 10.6Mbps 10.6Mbps                                     sent-packets-per-second: 20       21                                              sent-bits-per-second: 11.0kbps 11.9kbps                                 received-packets-per-second: 975      975                                         received-bits-per-second: 11.5Mbps 11.5Mbps                                     sent-packets-per-second: 22       22                                              sent-bits-per-second: 12.4kbps 12.3kbps                                 received-packets-per-second: 980      980                                         received-bits-per-second: 11.6Mbps 11.6Mbps                                     sent-packets-per-second: 21       21                                              sent-bits-per-second: 11.9kbps 11.8kbps                                 received-packets-per-second: 977      977                                         received-bits-per-second: 11.6Mbps 11.5Mbps                                     sent-packets-per-second: 21       21                                              sent-bits-per-second: 11.9kbps 11.8kbps                             -- [Q quit|D dump|C-z pause]`</span></div></div></div></div>### <span class="mw-headline">Link Monitoring</span>

It is easy to notice that with the configuration above as soon as any individual link fails, the bonding interface throughput collapses. That's because no link monitoring is performed, consequently, the bonding driver is unaware of problems with the underlying links. Enabling link monitoring is a must in most bonding configurations. To enable ARP link monitoring, do the following:

R1:

<div class="wiki-content" id="bkmrk-%2Finterface-bonding-s"><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div class="codeBlockContainer_yyk2gsoAwjaamghp6yoO-Q=="><span class="prismjs css-nc0a95" data-code-lang="text" data-ds--code--code-block="">`<span class="">/interface bonding set bonding1 link-monitoring=arp arp-ip-targets=192.168.0.2</span>`</span></div></div></div></div>R2:

<div class="wiki-content" id="bkmrk-%2Finterface-bonding-s-1"><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div class="codeBlockContainer_yyk2gsoAwjaamghp6yoO-Q=="><span class="prismjs css-nc0a95" data-code-lang="text" data-ds--code--code-block="">`<span class="">/interface bonding set bonding1 link-monitoring=arp arp-ip-targets=192.168.0.1</span>`</span></div></div></div></div>