本周调研了一下多径TCP(MPTCP),几经周折终于从小白到将MPTCP协议配置到Linux系统中,并成功地通过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命令可以查看两张网卡的详细信息。
本部分主要参考以下三个链接
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一下内核的可以选择前者,而后者可以自动安装,操作十分简单。
首先提前安装好依赖环境
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
配置内核时需要注意一下几点:
编译MPTCP内核
cd /usr/src/mptcp
sudo make
编译并安装模块
sudo make modules_install
安装
sudo make install
重启系统,这里官网包括引用的两篇博客都没有说清楚,重启以后要进入新编译好的内核中,在开机的时候选择ubuntu高级选项,找到刚刚编译好的内核,选择进入,如果没有ubuntu高级选项的界面,在重启进入系统的时候按住shift键,界面就会出现。
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:检测网站。