基于Linux的IPv6接入服务器配置过程
摘要:
本文主要描述基于基于Linux的IPv6接入服务器配置方法及过程。
关键字:
IPv6 PPPv6 DHCPv6 Linux
正文:
一、 软件选择
1、 PPPoEv6
使用系统自带的rp-pppoe即可。
2、 DHCPv6
目前DHCPV6实现主要包括如下几种: (1)DHCPv6 @ SourceForge
这个项目自2004年后就没有更新过,所以如prefix delegation没有实现。功能较少。 (2)ISC DHCPv6
虽然ISC DHCPv4已经用的很广泛了,但是DHCPV6却是2007年开始出现的。用起来比较费劲。 (3)Dibbler DHCPv6
实现功能(如prefix delegation)较多,有windows版本的,使用比较方便。 (4)WIDE DHCPv6 (5)Cisco IOS 目前在Linux比较常用的是DHCPv6 @ SourceForge,也就是系统自带的DHCP6S,但这个功能较少,所以我们采用功能较多的Dibbler DHCPv6做为服务器的DHCPv6软件。
二、 软件安装
1、 PPPoEv6
系统一般在安装的时候已经安装了PPP软件和RP-PPPoE软件,这里就不详述了。 2、 DHCPv6
下载dibbler-0.7.3-src.tar.gz后,进入存放安装文件的目录,执行以下命令。
# tar –zxvf dibbler-0.7.3-src.tar.gz # cd dibbler-0.7.3 # make # make install 三、 系统配置
1、 开启Linux的IPv6转发
第1页 共9页
打开/etc目录下的sysctl.conf文件,添加如下语句: net.ipv6.conf.all.forwarding = 1 2、 对服务的IP信息进行配置
新建一个IP配置文件,用于配置服务器的IP信息,比如 /root/conf/ip.sh 。 使用vi或其他编辑软件打开 /root/conf/ip.sh ,输入以下内容
ifconfig eth1 up
ifconfig eth1 172.125.106.252 netmask 255.255.255.0
route add -net 0.0.0.0 netmask 0.0.0.0 gateway 172.125.106.1
#IPv4地址和路由根据实际网络情况配置,主要是便于维护服务器。 ifconfig eth0 up
ifconfig eth0 192.168.9.3 netmask 255.255.255.0 #IPv4地址和路由根据实际网络情况配置。
# Bras Server and vlan is 100 vconfig add eth0 100
ifconfig eth0.100 188.188.100.1 netmask 255.255.255.0 ifconfig eth0.100 up sleep 1
#添加vlan接口(如果不采用vlan这步可以不用做,直接使用实际接口即可)
ip a a 2666::1/64 dev eth0.100 ip r a 2666::/64 dev eth0.100
ip a a 2005:106::3/64 dev eth1 ip r a 2005:106::/64 dev eth1
#给每个接口配置相应的IPv6地址(此服务器eth1作为上联接口,eth0.100作为接入接口) route -A inet6 add default gw 2005:106::1 #添加默认的IPv6路由 给ip.sh文件加可执行权限,执行如下命令: chmod +x /root/conf/ip.sh
四、 DHCPv6服务器配置
(1).配置/etc/dibbler/server.conf如下:
iface \ # (根据实际使用的网络接口设定) t1 1800 t2 2700 prefered-lifetime 3600 valid-lifetime 7200 class { pool 2666::2-2666::FF } 第2页 共9页
option dns-server 2005:123::15,2005:123::18 } (2).执行: dibbler-server start 此时DHCPv6服务即启动。 五、 PPPoEv6服务器配置
1. 配置PPPoE 服务器:
添加/etc/ppp/pppoe-server-options如下:
# PPP options for the PPPoE server # LIC: GPL require-pap #此处是采用pap认证的,如果采用chap认证,此处则修改为 require-chap #login +ipv6 ipv6 ::1,::10 lcp-echo-interval 30 lcp-echo-failure 2 2. 配置PPPoE用户名密码
使用vi或其他编辑软件打开/etc/ppp/pap-secrets (如果采用chap认证,则此处应该修改的文件是/etc/ppp/chap-secrets),在其后加上 \3. 启动PPPoE服务 # pppoe-server -I eth0.100 #(根据实际使用的网络接口设定) 到这步之后,客户端应该可以使用账号test/test拨号成功且会获得一个本地链路地址,但同时,客户端会向服务器发送DHCPv6 Solicit报文去请求Global地址,所以这个时候我们要在该PPP接口上启动DHCPv6服务。 由于DHCPv6服务必须在该接口上启动,但该PPP接口是动态生成的,而且如果我们事先在dibble-server的配置文件里面实现加上相应接口的信息,如果配置文件中有一个接口不存在,则dibble-server服务则启动不成功,所以我们需要在PPP接口生成的时候动态的在dibble-server配置文件里面添加相关信息从而在该PPP接口上启动DHCPv6服务。 由于每次PPPoEv6拨号成功后系统都会执行ipv6-up脚本,所以我们修改这个脚本实现动态的去修改dibble-server配置文件,相关添加的代码如下。 dhcpconf=/etc/dibbler/server.conf echo iface \\\echo ' t1 1800' >>$dhcpconf echo ' t2 2700' >>$dhcpconf 第3页 共9页
echo ' prefered-lifetime 3600' >>$dhcpconf echo ' valid-lifetime 7200' >>$dhcpconf echo ' class {' >>$dhcpconf echo ' pool 2555:'$v6addr'::2-2555:'$v6addr'::2' >>$dhcpconf echo ' }' >>$dhcpconf echo ' option dns-server 2005:123::15,2005:123::18' >>$dhcpconf echo '}' >>$dhcpconf echo '' >>$dhcpconf /usr/local/sbin/dibbler-server stop /usr/local/sbin/dibbler-server start 如果有两个进程同时对dibble-server的配置文件进行修改操作,会导致一些问题(如果两个客户端恰好同时拨号,同时启动ipv6-up脚本去修改dibble-server的配置文件,这个时候就会导致脚本出错而无法启动dibble-server),所以我们需要禁止多进程同时对dibble-server的配置文件进行修改,当脚本探测到有其他的进程对dibble-server的配置文件在进行修改时,等待一段时间再尝试去修改dibble-server的配置文件。
具体添加的代码如下: #定义一个标识脚本正在执行的文件名 TMPFILE=/tmp/u_ppp_v6.m.t.tmp
TimeNumber=1000000
while ((\do
if [ -e $TMPFILE ]; #判断临时文件是否存在 then
sleep 1 #临时文件存在则等待1s再尝试 else
touch $TMPFILE #监时文件若不存在,就用 touch 新建一个 chmod 600 $TMPFILE #把临时文件属性改为只建立者可读写 break fi
TimeNumber=$(($TimeNumber-1)) done
#用 trap 命令设置一个对信号的监听器,程序运行中当监听到信号 0,1,2,3,9,15就会删除临时文件,并退出脚本执行
#当脚本自行运行结束、被用户 Ctrl+C 掉、被 Kill 掉、终端被关闭,系统关机或重启的情况下,都需将临时文件删除
trap \
在启动的时候进行添加操作,那么在终止链路的时候需要删除启动的时候添加的内容,由于PPPv6在每次结束的时候都会执行ipv6-down脚本,那么我们对该脚本修改实现在链路终止的时候自动删除相关配置文件,相关代码如下:
第4页 共9页
Number=10
while ((\do
FirstLineNumber=$(sed -n '/'$REALDEVICE'/=' /etc/dibbler/server.conf)
if [ \then
break else
LastLineNumber=$(expr $FirstLineNumber + $Number ) sed -i \fi
Number=$(($Number-1)) done
/usr/local/sbin/dibbler-server stop /usr/local/sbin/dibbler-server start
同样,为避免对进行同时操作引发一些问题,我们再对配置文件进行操作的时候也要禁止其他进程对该配置进行操作,添加的代码如下:
#定义一个标识脚本正在执行的文件名 TMPFILE=/tmp/u_ppp_v6.m.t.tmp
TimeNumber=1000000
while ((\do
if [ -e $TMPFILE ]; #判断临时文件是否存在 then
sleep 1 #临时文件存在则等待1s再尝试 else
touch $TMPFILE #监时文件若不存在,就用 touch 新建一个 chmod 600 $TMPFILE #把临时文件属性改为只建立者可读写 break fi
TimeNumber=$(($TimeNumber-1)) done
#用 trap 命令设置一个对信号的监听器,程序运行中当监听到信号 0,1,2,3,9,15就会删除临时文件,并退出脚本执行
#当脚本自行运行结束、被用户 Ctrl+C 掉、被 Kill 掉、终端被关闭,系统关机或重启的情况下,都需将临时文件删除
第5页 共9页