基于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后,进入存放安装文件的目录,执行以下命令。
三、系统配置1、开启Linux的IPv6转发打开/etc目录下的sysctl.conf文件,添加如下语句:2、对服务的IP信息进行配置新建一个IP配置文件,用于配置服务器的IP信息,比如/root/conf/ip.sh 。
使用vi或其他编辑软件打开/root/conf/ip.sh ,输入以下内容ifconfig eth1 upifconfig eth1 172.125.106.252 netmask 255.255.255.0route add -net 0.0.0.0 netmask 0.0.0.0 gateway 172.125.106.1#IPv4地址和路由根据实际网络情况配置,主要是便于维护服务器。
ifconfig eth0 upifconfig eth0 192.168.9.3 netmask 255.255.255.0#IPv4地址和路由根据实际网络情况配置。
# Bras Server and vlan is 100vconfig add eth0 100ifconfig eth0.100 188.188.100.1 netmask 255.255.255.0ifconfig eth0.100 upsleep 1#添加vlan接口(如果不采用vlan这步可以不用做,直接使用实际接口即可)ip a a 2666::1/64 dev eth0.100ip r a 2666::/64 dev eth0.100ip a a 2005:106::3/64 dev eth1ip r a 2005:106::/64 dev eth1#给每个接口配置相应的IPv6地址(此服务器eth1作为上联接口,eth0.100作为接入接口)route -A inet6 add default gw 2005:106::1#添加默认的IPv6路由四、D HCPv6服务器配置(1).配置/etc/dibbler/server.conf如下:五、P PPoEv6服务器配置1.配置PPPoE 服务器:添加/etc/ppp/pppoe-server-options如下:2.配置PPPoE用户名密码使用vi或其他编辑软件打开/etc/ppp/pap-secrets (如果采用chap认证,则此处应该修改的文件是到这步之后,客户端应该可以使用账号test/test拨号成功且会获得一个本地链路地址,但同时,客户端会向服务器发送DHCPv6 Solicit报文去请求Global地址,所以这个时候我们要在该PPP接口上启动DHCPv6服务。
由于DHCPv6服务必须在该接口上启动,但该PPP接口是动态生成的,而且如果我们事先在dibble-server的配置文件里面实现加上相应接口的信息,如果配置文件中有一个接口不存在,则dibble-server 服务则启动不成功,所以我们需要在PPP接口生成的时候动态的在dibble-server配置文件里面添加相关信息从而在该PPP接口上启动DHCPv6服务。
由于每次PPPoEv6拨号成功后系统都会执行ipv6-up脚本,所以我们修改这个脚本实现动态的去修改如果有两个进程同时对dibble-server的配置文件进行修改操作,会导致一些问题(如果两个客户端恰好同时拨号,同时启动ipv6-up脚本去修改dibble-server的配置文件,这个时候就会导致脚本出错而无法启动dibble-server),所以我们需要禁止多进程同时对dibble-server的配置文件进行修改,当脚本探测到有其他的进程对dibble-server的配置文件在进行修改时,等待一段时间再尝试去修改dibble-server的配置文件。
具体添加的代码如下:#定义一个标识脚本正在执行的文件名TMPFILE=/tmp/u_ppp_v6.m.t.tmpTimeNumber=1000000while (("$TimeNumber">=0))doif [ -e $TMPFILE ]; #判断临时文件是否存在thensleep 1 #临时文件存在则等待1s再尝试elsetouch $TMPFILE #监时文件若不存在,就用 touch 新建一个chmod 600 $TMPFILE #把临时文件属性改为只建立者可读写breakfiTimeNumber=$(($TimeNumber-1))done#用 trap 命令设置一个对信号的监听器,程序运行中当监听到信号 0,1,2,3,9,15就会删除临时文件,并退出脚本执行#当脚本自行运行结束、被用户 Ctrl+C 掉、被 Kill 掉、终端被关闭,系统关机或重启的情况下,都需将临时文件删除trap "rm -f ${TMPFILE}; exit" 0 1 2 3 9 15在启动的时候进行添加操作,那么在终止链路的时候需要删除启动的时候添加的内容,由于PPPv6在每次结束的时候都会执行ipv6-down脚本,那么我们对该脚本修改实现在链路终止的时候自动删除相关配置文件,相关代码如下:Number=10while (("$Number">=0))doFirstLineNumber=$(sed -n '/'$REALDEVICE'/=' /etc/dibbler/server.conf)if [ "$FirstLineNumber"aa = ""aa ];thenbreakelseLastLineNumber=$(expr $FirstLineNumber + $Number )sed -i "${LastLineNumber}d" /etc/dibbler/server.conffiNumber=$(($Number-1))done/usr/local/sbin/dibbler-server stop/usr/local/sbin/dibbler-server start同样,为避免对进行同时操作引发一些问题,我们再对配置文件进行操作的时候也要禁止其他进程对该配置进行操作,添加的代码如下:#定义一个标识脚本正在执行的文件名TMPFILE=/tmp/u_ppp_v6.m.t.tmpTimeNumber=1000000while (("$TimeNumber">=0))doif [ -e $TMPFILE ]; #判断临时文件是否存在thensleep 1 #临时文件存在则等待1s再尝试elsetouch $TMPFILE #监时文件若不存在,就用 touch 新建一个chmod 600 $TMPFILE #把临时文件属性改为只建立者可读写breakfiTimeNumber=$(($TimeNumber-1))done#用 trap 命令设置一个对信号的监听器,程序运行中当监听到信号 0,1,2,3,9,15就会删除临时文件,并退出脚本执行#当脚本自行运行结束、被用户 Ctrl+C 掉、被 Kill 掉、终端被关闭,系统关机或重启的情况下,都需将临时文件删除六、自动添加相关路由信息由于在IPv6里面,CPE只是作为一个路由器存在,并不像IPv4那样需要开启NA T功能,所以需要在拨号成功或DHCP得到IPv6地址后,对CPE Lan侧的地址添加一个路由,这个路由可以手工去添加,但如果多人使用的话会比较麻烦,这里提供一种自动添加的思路。
1、DHCPv6的路由我们可以约定当CPE Wan侧地址为2666::X/64时,其Lan侧网段为2666:X::/64,这样我们可以事先添加该路由,只需在使用过程中按照这个约定配置CPE Lan网段即可使路由生效(DHCPv6服务器已经配置成指定地址池而不是仅仅只分配网络前缀)将系统需要事先添加的路由放在文件/root/conf/route.sh里面,开机的时候执行一次即可,/root/conf/route.sh文件内容如下所示(节选,具体请根据地址池的信息进行添加):route -A inet6 add 2666:2::/64 gw 2666::2route -A inet6 add 2666:3::/64 gw 2666::3route -A inet6 add 2666:4::/64 gw 2666::4route -A inet6 add 2666:5::/64 gw 2666::5route -A inet6 add 2666:6::/64 gw 2666::6route -A inet6 add 2666:7::/64 gw 2666::7route -A inet6 add 2666:8::/64 gw 2666::8route -A inet6 add 2666:9::/64 gw 2666::9route -A inet6 add 2666:a::/64 gw 2666::aroute -A inet6 add 2666:b::/64 gw 2666::broute -A inet6 add 2666:c::/64 gw 2666::croute -A inet6 add 2666:d::/64 gw 2666::droute -A inet6 add 2666:e::/64 gw 2666::eroute -A inet6 add 2666:f::/64 gw 2666::froute -A inet6 add 2666:11::/64 gw 2666::11route -A inet6 add 2666:12::/64 gw 2666::12route -A inet6 add 2666:13::/64 gw 2666::13route -A inet6 add 2666:14::/64 gw 2666::14route -A inet6 add 2666:15::/64 gw 2666::15route -A inet6 add 2666:16::/64 gw 2666::16route -A inet6 add 2666:17::/64 gw 2666::17route -A inet6 add 2666:18::/64 gw 2666::18route -A inet6 add 2666:19::/64 gw 2666::19route -A inet6 add 2666:1a::/64 gw 2666::1aroute -A inet6 add 2666:1b::/64 gw 2666::1broute -A inet6 add 2666:1c::/64 gw 2666::1croute -A inet6 add 2666:1d::/64 gw 2666::1droute -A inet6 add 2666:1e::/64 gw 2666::1eroute -A inet6 add 2666:1f::/64 gw 2666::1f2、PPPoEv6的路由对于PPPoEv6的路由自动添加要稍微麻烦点,我们没办法事先对路由进行添加(ppp接口没起来前路由没法添加成功),所以我们只能在ppp接口起来的同时对路由进行添加。