Setting Up Multilink PPP on el6

From AN!Wiki
Jump to: navigation, search

 AN!Wiki :: How To :: Setting Up Multilink PPP on el6

This guide is meant to walk you through setting up a multilink PPP connection under RHEL 6.0.



Multilink PPP, MP, but sometimes referred to as MPPP, provides three main benefits.

Load Balancing

When both links are up, MP will bond the two links and provide extra bandwidth. It is important to note that both links will run at the slower speed, times two.

For example; If one link runs at 5.0 Mbps down and 800 Kbps up while the second link runs at 6.0 Mbps down and 512 Kbps up, your bonded speed will be (5.0 + 5.0) 10 Mbps down and (512 + 512) 1.24 Mbps up.

High Availability

The bonded MP can work perfectly well when a given link fails, albeit with a reduced bandwidth.

This paper bonds two DSL accounts, but this is not a requirement. In fact, it's quite common to bond connections from DSL and cable ISPs to improve availability.


Let me say up front that MP is no replacement for proper encryption. Further, it does nothing to provide anonymity on the Internet itself.

Now, with that said, the way that MP works makes it much more difficult for people between you and your ISP to see the contents of your traffic. This is particularly useful if you are a customer of an ISP who resells a major carrier's service which uses deep packet inspection (DPI) to detect and throttle certain connection types, like bittorrent. As a side effect, other connection types like SSH are throttled as well. This can pose a serious headache for sysadmins trying to work on servers from throttled connections.

By setting up MP, a sysadmin should be able to protect their traffic's content from the prying eyes of the upstream ISP.


There are three sets of requirements in order to make the most of this tutorial; System Administration experience and Hardware.

ISP Support

Your ISP must support MP. Otherwise this simply won't work.

Sysadmin Experience

This assumes a certain level of familiarity with the command line in Linux, specifically bash or similar. It also is assumed that you have a familiarity with networking in general and PPPoE specifically.

Technical Requirements

A computer with three network interfaces (ideally wired) is required. I'm adding a wireless link so that the router can also act as a wireless access point. If you are not concerned with this step, feel free to skip it.

For this article, an Asus Eee PC 1000H netbook will be used. Two Apple USB Ethernet Adapters (part number MB442Z/A) are used to provide the connection to two bridged DSL modems.

Let's Begin

For reference, this paper will use the following interface names for the specified roles.

  • eth0: LAN interface
  • eth1: DSL interface 1
  • eth2: DSL interface 2
  • wlan0: Wireless AP Interface

Network Setup

If you added network devices after install, they may not have correlating /etc/sysconfig/network-scripts/ifcfg-eth# files. Before we begin, we'll want to record what ifconfig reports by piping it's output to a text file for later reference.

ifconfig > ~/if.txt

Identifying Your Interfaces

Depending on the hardware you use, the MAC address may be labelled on the device itself. Check to see if this is the case before you begin. If so, then you simply need to run ifconfig and match the HWaddr entries. This isn't useful though if your network interface is internal or, like the Apple USB to Ethernet adapters, not labelled. In these cases, you will need to follow the steps below.

Each network interface on your computer will have a unique MAC address. Before we continue, we need to know the MAC address of each interface. Given how most homes and offices have a router or server providing DHCP, I find that the easiest way to do this is to set all interfaces to DHCP and then plug a single network cable into a given interface. Then simply restart all interfaces and see which one gets an IP address.

/etc/init.d/NetworkManager restart
Stopping NetworkManager daemon:                            [  OK  ]
Setting network parameters...                              [  OK  ]
Starting NetworkManager daemon:                            [  OK  ]

So now we can run ifconfig and see which interface came up. We'll know which it was as it will be the only one with an IP address set.

eth0      Link encap:Ethernet  HWaddr 00:22:15:88:82:C5  
          inet addr:  Bcast:  Mask:
          inet6 addr: fe80::222:15ff:fe88:82c5/64 Scope:Link
          RX packets:43884 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26835 errors:0 dropped:0 overruns:0 carrier:8
          collisions:0 txqueuelen:1000 
          RX bytes:59667887 (56.9 MiB)  TX bytes:2044272 (1.9 MiB)
eth1      Link encap:Ethernet  HWaddr D8:30:62:A5:CA:14  
          inet6 addr: fe80::da30:62ff:fea5:ca14/64 Scope:Link
          RX packets:210 errors:0 dropped:0 overruns:0 frame:0
          TX packets:90 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:18792 (18.3 KiB)  TX bytes:17554 (17.1 KiB)
eth2      Link encap:Ethernet  HWaddr D8:30:62:A5:C9:F0  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:45 errors:0 dropped:0 overruns:0 frame:0
          TX packets:78 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:19032 (18.5 KiB)  TX bytes:13080 (12.7 KiB)
lo        Link encap:Local Loopback  
          inet addr:  Mask:
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:16 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:960 (960.0 b)  TX bytes:960 (960.0 b)

You can see in the eth0 entry that it has the entry inet addr: This tells us that eth0 is the interface currently connected to the network cable. So now we look at the line HWaddr 00:22:15:88:82:C5 to see what the MAC address is (00:22:15:88:82:C5 in this case).

So now I know that the MAC address for the interface eth0 is 00:22:15:88:82:C5 and that this corresponds to the netbook's built-in network interface. Now I can repeat this step by plugging the network cable into either Apple USB Ethernet adapter. For future reference, I like to label each device with it's corresponding MAC address and eth# identity. if you have access to a label maker, I advice you to do the same. Failing that, a china pencil or appropriate tape will do.

Switching From NetworkManager to network

Assuming that you've done a pretty standard install, we'll have to start by stopping and disabling NetworkManager and starting and enabling network. On normal workstation, NetworkManager is great as it makes the movement between networks very smooth. However, as my boss likes to say; "The more technology does for you, the more it does to you". We want to use network because it doesn't try to sort anything out for you. It does just what it is told and nothing more. Perfect for what will be our server.

These commands will disable NetworkManager and prevent it from starting with the system. Likewise it will start the network daemon and ensure that it starts again on system boot.

chkconfig NetworkManager off
chkconfig network on
/etc/init.d/NetworkManager stop
/etc/init.d/network start

Static Network Configuration

For now, we will put aside the wireless access point configuration as it is secondary.

With network set and the interface name to MAC address mapping known, we now need to create or edit ifcfg-eth# files in the /etc/sysconfig/network-scripts/ directory. Each file will control the configuration of a given physical interface

If eth0, eth1 or eth2 doesn't exist, create empty files before proceeding. In my case, the second two need to be created.

cd /etc/sysconfig/network-scripts/
touch ifcfg-eth1 ifcfg-eth2

For each of the three interface files, set the following values. Obviously edit as needed to match you values.

The eth0 interface will connect to the internal LAN, which I will set to use the network. Specifically, I like to use the top IP in the range for the firewall, so I will tell this interface to statically set to

vim ifcfg-eth0
# Atheros Communications AR8121/AR8113/AR8114 Gigabit or Fast Ethernet

The next two interfaces will have a pretty minimal setup.

vim ifcfg-eth1
# Apple USB to Ethernet adapter 1
vim ifcfg-eth2
# Apple USB to Ethernet adapter 2

Raw Notes

cd /etc/sysconfig/network-scripts/
touch ifcfg-bond0
touch ifcfg-bond1



Any questions, feedback, advice, complaints or meanderings are welcome.
Us: Alteeve's Niche! Support: Mailing List IRC: #clusterlabs on Freenode   © Alteeve's Niche! Inc. 1997-2019
legal stuff: All info is provided "As-Is". Do not use anything here unless you are willing and able to take responsibility for your own actions.
Personal tools