红联Linux门户
Linux帮助

Ubuntu下锐捷和L2TP双重认证模式上网

发布时间:2015-04-26 16:09:58来源:linux网站作者:kbitosy

操作系统:Ubuntu

所需软件:myxrgsu(锐捷客户端) 、xl2tpd、expect、tcl8.4

大部分的学校使用的是校园网,基本使用锐捷认证就可以连接互联网。现在越来越多的学校使用锐捷和L2TP双重认证模式。这里我先介绍下L2TP协议,便于对后文的配置有个大概的了解。

L2TP (Layer Two Tunneling Protocol,第二层通道协议)是VPDN(虚拟专用拨号网络)技术的一种,专门用来进行第二层数据的通道传送,即将第二层数据单元,如点到点协议(PPP)数据单元,封装在IP或UDP载荷内,以顺利通过包交换网络(如Internet),抵达目的地。

L2TP本质上是一种隧道传输协议,它使用两种类型的消息:控制消息和数据隧道消息。控制消息负责创建、维护及终止L2TP隧道,而数据隧道消息则负责用 户数据的真正传输。L2TP支持标准的安全特性CHAP和PAP,可以进行用户身份认证。在安全性考虑上,L2TP仅定义了控制消息的加密传输方式,对传 输中的数据并不加密。

值得注意的是,L2TP不对隧道传输中的数据进行加密,从而没法保证数据传输过程中的安全。因此L2TP常和IPsec结合使用,先使用L2TP封装第二层数据,再使用IPsec封装对数据进行加密和提供完整性保护,由此保证通信数据安全传送到目的地。

l2tp和pptp协议的异同:PPTP(电信的另一种协议)和L2TP都使用PPP协议对数据进行封装,然后添加附加包头用于数据在互联网络上的传输。尽管两个协议非常相似,但是仍存在以下几方面的不同:

1.PPTP要求互联网络为IP网络。L2TP只要求隧道媒介提供面向数据包的点对点的连接。L2TP可以在IP(使用UDP),桢中继永久虚拟电路(PVCs),X.25虚拟电路(VCs)或ATM VCs网络上使用。

2.PPTP只能在两端点间建立单一隧道。L2TP支持在两端点间使用多隧道。使用L2TP,用户可以针对不同的服务质量创建不同的隧道。

3.L2TP可以提供包头压缩。当压缩包头时,系统开销(overhead)占用4个字节,而PPTP协议下要占用6个字节。

4.L2TP可以提供隧道验证,而PPTP则不支持隧道验证。但是当L2TP或PPTP与IPSEC共同使用时,可以由IPSEC提供隧道验证,不需要在第2层协议上验证隧道。

介绍就到此,详细信息可以通过互联网了解,下面说说如何成功配置锐捷和l2tp双重认证模式。


1、设置IP

要上网,首先要设置IP。ubuntu较新的版本都使用network-manager来管理网络。network-manager使得IP配置极为简单。

依次点击 系统 -> 系统管理 -> 网络连接。默认会有一个Auto eth0 ,选中并点击编辑,输入管理员密码认证成功后打开编辑界面,勾选自动连接(上)和对所用用户可以(下)。然后点击IPv4设置面板,在方法一栏选择手动,然后在下面的地址栏点击右边的添加按钮,输入IP,子网掩码,网关。最后在DNS服务器一栏输入DNS。点击应用即可。这样IP就设置完成了。

设置后,可以通过终端执行 ifconfig 命令查看IP等信息,执行 cat /etc/resolv.conf 命令查看DNS信息。


2、配置锐捷网络

现在附件的myxrgsu.zip文件。

解压缩后,将libpcap.so.0.6.2和libstdc++.so.5两个文件复制到/usr/lib/目录下。将myxrgsu文件复制到/usr/bin/目录下并赋予可执行权限。具体步骤:

$ sudo cp libpcap.so.0.6.2 libstdc++.so.5 /usr/lib/

$ sudo cp myxrgsu gdqy /usr/bin/

$ sudo chmod 755 /usr/bin/myxrgsu

做完这一步后,打开终端,执行
$ sudo myxrgsu
按照提示输入相关信息就可以通过锐捷连接网络了。

$ sudo myxrgsu
[sudo] password for user:
XRGSupplicant 1.1.1
Ruijie Network CopyRight 2004-2005
Please input your user name:0000000000000                        #输入你的锐捷帐号
Please input your password:                                #输入你的锐捷密码
Use DHCP,1-Use,0-UnUse(Default: 0):                      #直接回车
Use default auth parameter,0-Use 1-UnUse(Default: 0):         #直接回车
Searching server...
Connecting server...
Authenticating...
Authenticate SUCCESSFULLY!
Please input 'unauth' to LogOff:

这样就表示连接成功,可以按下Ctrl+C退出。

通过上述步骤,你会发现,每次执行myxrgsu都要输入很多信息,颇为麻烦,为了操作方便,这里介绍如何编写简化操作的脚本,也为下文配置l2tp连接做准备。

首先安装expect,安装过程会提示以来tcl8.4(tcl8.5),也一定安装。

$ sudo apt-get install expect

安装好后,就可以开始写脚本了

$ sudo gedit /usr/bin/ruijie

写入如下内容:

#! /usr/bin/expect
set timeout 3
spawn myxrgsu -a
expect "Please input your user name:"
send "xxxxxxxx\r"
expect "Please input your password:"
send "000000\r"
expect "Use DHCP,1-Use,0-UnUse(Default: 0):"
send "0\r"                   
#expect "You hava 3 Nic:"                               
#expect "   0.    eth0 Desc: (null)"                  
#expect "   1.    vmnet1 Desc: (null)"              
#expect "   2.    vmnet8 Desc: (null)"
#expect "Please select which NIC will be used(0-2,Default:0)"
#send "0\r"
expect "Use default auth parameter,0-Use 1-UnUse(Default: 0):"
send "0\r"
sleep .2
set timeout 10
expect "Please input 'unauth' to LogOff:"

xxxxxx改成你的校园网帐号,000000改成你的校园网密码。

说明:一般用户的电脑只有一块网卡,黄色注释内容为多块网卡时的提示信息,笔者因为安装了vmware,所以映射成三块网卡( eth0,vmnet1,vmnet8)。如果你有多块网卡,取消橙色部分几行开头的注释并做相应修改(执行sudo myxrgsu时有相应提示)。

赋予可执行权限:

$ sudo chmod 755 /usr/bin/ruijie

对于只用校园网用户,到这一步就可以了。开机后执行sudo ruijie 就可以连接网络了。


3、配置L2TP

linux下支持l2tp协议的软件有几个,笔者这里选择使用xl2tpd。

1)、安装:

$ sudo apt-get install xl2tpd


2)、修改 /etc/xl2tpd/xl2tpd.conf 配置文件,添加一个lac段

$ sudo gedit /etc/xl2tpd/xl2tpd.conf

[lac gdqy]
lns = 000.000.000.000
redial = yes
redial timeout = 15
max redials = 5
require pap = yes
require chap = yes
require authentication = yes
name = xxxxxxxx
ppp debug = no
pppoptfile = /etc/ppp/options.l2tpd

000.000.000.000替换成学校给的VPN拨号服务器的lns,

xxxxxxxx改成学校给你的宽带帐号。lac后面的gdqy(改成你喜欢的名字)也可以改,但是你后面的拨号脚本也要改相应的地方,总之你把所有的gdqy改成你喜欢的名字就行了(名字保持一致)。


3)、修改(创建) /etc/ppp/chap-secrets

$ sudo gedit /etc/ppp/chap-secrets

在文件的最后面添加如下内容:

---------------------------------------
xxxxxxxx * 000000 *
---------------------------------------

将xxxxxxxx换成学校给你的宽带帐号,000000换成学校给你的宽带密码

注意,这里每个字段之间的分隔符是<Tab>,即键盘上字幕Q左边的那个键( 同下面的/etc/ppp/pap-secrets)。


4)、修改(创建) /etc/ppp/pap-secrets

$ sudo gedit /etc/ppp/pap-secrets

在文件的最后面添加如下内容:

---------------------------------------
xxxxxxxx * 000000 *
---------------------------------------

将xxxxxxxx换成学校给你的宽带帐号,000000换成学校给你的宽带密码


5)、修改(创建) /etc/ppp/options.l2tpd

$ sudo gedit /etc/ppp/options.l2tpd

添加如下内容:
noauth
proxyarp
defaultroute


6)、创建启动脚本

$ sudo gedit /usr/bin/gdqy

添加如下内容:

#!/bin/bash

TIMEOUT=10
N_RETRY=3
INTERFACE=eth0
L2TPD_TIMEOUT=10
L2TPD_SCRIPT=/etc/init.d/xl2tpd
L2TPD_PIPE=/var/run/xl2tpd/l2tp-control

function usage
{
echo "$1 L2TP宽带连接."
echo "$1 [-h] [-r]"
echo " 默认连接宽带."
echo " -r 重新连接."
echo " -h 帮助信息."
}
function connect
{
if ppp0_alive ; then
echo "已经连接宽带."
else
/usr/bin/ruijie && /usr/bin/clear && bring_up_ppp0 && setup_route
fi
}
function reconnect
{
restart_l2tpd && bring_up_ppp0 && setup_route
}

function super_user
{
if [ "$UID" = "0" ]; then
return 0
else
return 1
fi
}
function ppp0_alive
{
if /sbin/ifconfig | grep -s 'ppp0' > /dev/null ; then
return 0
else
return 1
fi
}
function bring_up_ppp0
{
for i in $(seq $N_RETRY)
do
echo -n "等待连接"
echo "c gdqy" > $L2TPD_PIPE
for j in $(seq $TIMEOUT)
do
if ppp0_alive; then
echo " 完成!"
return 0
fi
echo -n "."
sleep 1
done
echo
done
echo "连接失败"
return 1
}
function setup_route
{
echo "设置路由..."
STATIC=$(/sbin/ip route | grep '^default' | cut -d" " -f3)

if [ ! -z $STATIC ]; then
/sbin/ip route add 211.66.184.0/21 via $STATIC dev $INTERFACE
/sbin/ip route add 172.16.0.0/14 via $STATIC dev $INTERFACE
/sbin/ip route add 210.38.32.0/24 via $STATIC dev $INTERFACE
/sbin/ip route add 202.116.41.0/24 via $STATIC dev $INTERFACE
/sbin/ip route add 168.160.184.0/24 via $STATIC dev $INTERFACE
/sbin/ip route add 210.21.59.0/24 via $STATIC dev $INTERFACE
/sbin/ip route add 192.168.129.1/32 via $STATIC dev $INTERFACE
/sbin/ip route del default
fi
PPP=$(/sbin/ifconfig | sed -n '/点对点/s/^.*点对点:\([0-9.]*\).*$/\1/p')
/sbin/ip route add default via $PPP dev ppp0
/sbin/ifconfig ppp0 mtu 1462
echo "完成!"
}
function restart_l2tpd
{
echo "启动连接..."
$L2TPD_SCRIPT restart
for i in $(seq $L2TPD_TIMEOUT)
do
if [ -e $L2TPD_PIPE ]; then
echo "完成!"
return 0
fi
sleep 1
done
echo "重新连接失败!"
return 1
}

if ! super_user ; then
echo "需要管理员权限!"
exit 1
fi
if [ $# -lt 1 ]; then
connect
elif [ "$1" = "-h" ]; then
usage
else
reconnect
fi

学校内部资源地址(我已修改过,原作者的数字的位置和我的稍有区别,格式就是这样的,172.16.0.0/14 或者210.21.59.0/24什么意思你去问原作者或者看我最后的学习发给我们的L2TP配置文件),根据学校的具体情况修改。如果你使用的是英文地址,将显示的2个点对点改成P-t-P。

其中/sbin/ip route add 192.168.129.1/32 via $STATIC dev $INTERFACE这里的192.168.129.1是lns,32应该是指

sudo route add -net 192.168.129.1 netmask 255.255.255.255 gw 172.17.92.254   #将172.17.1.254 改成你的静态IP的默认网关赋予权限:

中的某个值,具体是哪个?自己猜。

编辑完脚本之后,终端输入

$ sudo chmod 755 /usr/bin/gdqy

至此,配置过程结束。重新启动计算机,打开终端,执行
$ sudo gdqy
就可以连接宽带了。

补充:本配置存在一个缺点,就是由于网络不稳定,系统运行一段时间后,网络会自动刷新,然后发现只可以打开部分网页,但qq等其他需要联网的软件正常使用。此时,解决方法:打开终端,执行 sudo ifconfig ppp0 mtu 1462 或者 sudo gdqy -r 。

本配置依据广东轻院提供的信息编写,其他学校的同学依据自己学校的具体情况做相应修改。


认证成功的图片:
Ubuntu下锐捷和L2TP双重认证模式上网

Ubuntu下锐捷和L2TP双重认证模式上网

注:以上图片上传到红联Linux系统教程频道中。

注意:尽量不要在文本里添加带有#的注释,以避免意想不到的错误,文件本来就有的注释就不用去管它。例如:

[lac gdqy]
lns = 192.168.129.1 #192.168.129.1是VPN拨号服务器
redial = yes
redial timeout = 15
max redials = 5
require pap = yes
require chap = yes
require authentication = yes
name = 0000000000@qgxy.v.gd       #将name = 0000000000@qgxy.v.gd 改成你的宽带帐号
ppp debug = no
pppoptfile = /etc/ppp/options.l2tpd

把上面的#192.168.129.1是VPN拨号服务器,#将name = 0000000000@qgxy.v.gd 改成你的宽带帐号都去掉,还有就是注意空格符

另附学校给我们的L2TP配置文件:

LNSIP=192.168.129.1

6
211.66.184.0 mask 255.255.248.0;
172.16.0.0 mask 255.252.0.0;
210.38.32.0 mask 255.255.255.0
202.116.41.0 mask 255.255.255.0
168.160.184.0 mask 255.255.255.0
210.21.59.0 mask 255.255.255.0