[置顶] Ubuntu下配置MPTCP

本周调研了一下多径TCP(MPTCP),几经周折终于从小白到将MPTCP协议配置到Linux系统中,并成功地通过MPTCP协议访问了支持MPTCP协议的检测网站。

本文主要介绍

  • 实验环境
  • 无线网卡驱动的安装
  • MPTCP的安装
  • 路由配置

实验环境

镜像下载地址,获取安装镜像选择Ubuntu14.04.4(amd64,LiveCD)

无线网卡驱动的安装

进行MPTCP协议的测试必然要用到双网卡,因此选择购买USB无线网卡作为第二网卡。最初的选择为“360随身wifi3”,经查询所用的芯片为MTK7603U,MTK官网没有给出该芯片Linux下的驱动,网上也没有相关的资源。因此从硬件屋将USB无线网卡替换成了“TP-LINK TL-WN823N”,WN823N的芯片型号为RTL8192EU,下面提供一个较为简单的驱动安装方法

sudo add-apt-repository ppa:hanipouspilot/rtlwif
sudo apt-get update
sudo apt-get install rtl8192eu-dkms

重启系统,即可在网络连接中看到第二张网卡,可以使用ifconfig命令可以查看两张网卡的详细信息。

MPTCP的安装

本部分主要参考以下三个链接

http://www.multipath-tcp.org/
http://blog.csdn.net/xiaodoubao124/article/details/50150677
http://blog.sina.com.cn/s/blog_758723000101ealy.html

MPTCP的安装方式有两种:获得源码并自行编译内核,使用apt-get命令自动安装。愿意熟悉一下内核编译,DIY一下内核的可以选择前者,而后者可以自动安装,操作十分简单。

获得MPTCP源码并自行编译内核

首先提前安装好依赖环境

sudo apt-get update 
sudo apt-get install libncurses5-dev
apt-get install build-essential 

获取MPTCP源码

cd /usr/src
git clone --depth=1 git://github.com/multipath-tcp/mptcp.git
cd mptcp

配置编译内核

sudo make menuconfig

配置内核时需要注意一下几点:

  • 选择编译时:按y直接编译到内核中,条目前会显示为<*>或[*];按n不编译到内核中,条目前显示为<>或[ ];按m以模块的方式编译,之后使用需要加载该模块才可以,条目前显示为或[M].
  • 由于我们是64位系统,选中第一个64-bit kernel,32位的话就不要选中。
  • 进入networking support->networking options,检查一下IPv6模块,选择编译进内核或者不编译,不要选择以模块方式编译,否则看不到后面的MPTCP选项
  • 找到networking support->networking options->TCP/IP networking->MPTCP protocol(MPTCP),按y选择编译。
  • 找到Networking support->Networking options->IP: advanced router->IP: policy routing,选择编译。
  • 找到Networking support->Networking options->MPTCP protocol,编译。这样一些拥塞控制算法才会出现在TCP:advanced congestion control里。
  • 找到MPTCP: advanced path-manager control,编译。进到里面,编译MPTCP Full-Mesh Path-Manager和MPTCP ndiff-ports。下面的Default MPTCP Path-Manager 选择Full mesh。
  • 找到Networking support->Networking options->TCP: advanced congestion control,进入。这里是拥塞控制算法,需要哪些就选择哪些,*编译到内核,M是编译成模块。这里选择CUBIC ,Vegas,Veno,LIA(MPTCP Link Increase),Olia (MPTCP Opportunistic Linked Increase),wVegas,Balia。选择默认的算法。
  • 保存配置,退出。

编译MPTCP内核

cd /usr/src/mptcp
sudo make

编译并安装模块

sudo make modules_install

安装

sudo make install

重启系统,这里官网包括引用的两篇博客都没有说清楚,重启以后要进入新编译好的内核中,在开机的时候选择ubuntu高级选项,找到刚刚编译好的内核,选择进入,如果没有ubuntu高级选项的界面,在重启进入系统的时候按住shift键,界面就会出现。

使用apt-get命令自动安装

MPTCP官网维护了一个公开的apt库来对MPTCP内核进行自动安装和升级。

首先安装他们的gpg-apt-key

wget -q -O - http://multipath-tcp.org/mptcp.gpg.key | sudo apt-key add -

修改apt库的配置文件

sudo gedit /etc/apt/sources.list.d/mptcp.list

在末尾添加

deb http://multipath-tcp.org/repos/apt/debian trusty main

不同版本的系统添加的内容不太一样,其他系统参考以下内容:

On a Debian for the newest release:
deb http://multipath-tcp.org/repos/apt/debian jessie main
On a Ubuntu Trusty (14.04) for the old v0.90-release:
deb http://multipath-tcp.org/repos/apt/debian trusty main
On a Ubuntu Saucy (13.10) for the old v0.88-release:
deb http://multipath-tcp.org/repos/apt/debian saucy main
On a Ubuntu Raring (13.04) for the old v0.87-release:
deb http://multipath-tcp.org/repos/apt/debian raring main
On a Ubuntu Quantal (12.10) for the old v0.86-release:
deb http://multipath-tcp.org/repos/apt/debian quantal main

安装MPTCP

sudo apt-get update
sudo apt-get install linux-mptcp

重启。

同上,这里官网包括引用的两篇博客都没有说清楚,重启以后要进入新编译好的内核中,在开机的时候选择ubuntu高级选项,找到刚刚编译好的内核,选择进入,如果没有ubuntu高级选项的界面,在重启进入系统的时候按住shift键,界面就会出现。

路由配置

路由配置可以手动配置也可以自动配置,这里介绍自动配置方法。

编辑mptcp_up

cd /etc/network/if-up.d
sudo gedit mptcp_up

粘贴以下内容,保存退出(下载地址)

#!/bin/sh
# A script for setting up routing tables for MPTCP in the N950.

# Copy this script into /etc/network/if-up.d/

set -e

env > /etc/network/if_up_env

if [ "$IFACE" = lo -o "$MODE" != start ]; then
        exit 0
fi

if [ -z $DEVICE_IFACE ]; then
    exit 0
fi

# FIRST, make a table-alias
if [ `grep $DEVICE_IFACE /etc/iproute2/rt_tables | wc -l` -eq 0 ]; then
    NUM=`cat /etc/iproute2/rt_tables | wc -l`
    echo "$NUM  $DEVICE_IFACE" >> /etc/iproute2/rt_tables
fi

if [ $DHCP4_IP_ADDRESS ]; then
    SUBNET=`echo $IP4_ADDRESS_0 | cut -d \   -f 1 | cut -d / -f 2`
    ip route add table $DEVICE_IFACE to $DHCP4_NETWORK_NUMBER/$SUBNET dev $DEVICE_IFACE scope link
    ip route add table $DEVICE_IFACE default via $DHCP4_ROUTERS dev $DEVICE_IFACE
    ip rule add from $DHCP4_IP_ADDRESS table $DEVICE_IFACE
else
    # PPP-interface
    IPADDR=`echo $IP4_ADDRESS_0 | cut -d \   -f 1 | cut -d / -f 1`
    ip route add table $DEVICE_IFACE default dev $DEVICE_IP_IFACE scope link
    ip rule add from $IPADDR table $DEVICE_IFACE
fi

设置文件可执行

sudo chmod a+x mptcp_up

编辑mptcp_down

cd /etc/network/if-post-down.d
sudo gedit mptcp_down

粘贴以下内容,保存退出(下载地址)

#!/bin/sh
# A script for setting up routing tables for MPTCP in the N950.

# Copy this script into /etc/network/if-post-down.d/

set -e

env > /etc/network/if_down_env

if [ "$IFACE" = lo -o "$MODE" != stop ]; then
        exit 0
fi

ip rule del table $DEVICE_IFACE
ip route flush table $DEVICE_IFACE

设置文件可执行

sudo chmod a+x mptcp_down

上述两个脚本根据环境变量配置路由表,绝大多数情况下可以正常工作。还可以参考手动配置方法。

至此,MPTCP已经在本机上配置完成,可以通过网站检测自己是否在使用MPTCP:检测网站。

你可能感兴趣的:(linux,ubuntu,网卡,MPTCP)