Building a IPV6 Router with Linux(CentOS)

Version 1.0.0
Date 2010-11-20
Author ipcpu
Website http://www.ipcpu.com

早就想写这个教程了,主要是没有电脑来测试,电脑坏了修,修了坏,哎~

IPv6早就已经在各大高校和运营商中普及,如果您是ADSL用户,并且安装了IPv6协议,您会发现你的电脑已经接入IPV6了,但是因为宽带路由的大面积普及(宽带路由一般都不支持IPv6)很多的用户还是无法使用IPV6。

本文不再探讨IPV6的详细使用,这方面各大高校做的还不错,PT下载已经将学校的cernet2出口塞满了。

这里还要说一点,有人会问,IPV6何时能普及?这个问题其实很复杂,IPV6普及的最大阻力就是宽带路由器,宽带路由器一般不支持IPv6,这就把最终用户和IPv6网络隔离开来。而IPV6设计之初就将NAT这样类似技术拒之门外,这也造成IPV6发展缓慢。

我们的实验环境是这样的,如下图所示:

一个典型的局域网环境,路由器(Linux)使用光纤接入运营商IPv4网络,并且使用(Hurricane Electric Free IPv6 Tunnel Broker)IPv6-over-IPv4的隧道接入IPV6网络。
我们需要做的就是让后面的PC用户接入IPV6网络。

*Warning!注意:本次的实验使用HE.NET的隧道,需要路由器(Linux)拥有公网IP。

1.    将网络线路连接好,配置好Linux的iptables让PC可以接入IPV4网络,具体的不用说了,可以查看本站其他文章。

echo “1″ > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -j MASQUERADE


*Warning!注意:CentOS5.5默认的iptables防火墙默认有很多规则,可以使用iptables –F清空后,自行添加需要的选项,最后不要忘了使用service iptables save保存。

这里使用了最简单的语句,实际环境应该加强安全设置。

2.    使用Hurricane Electric Free IPv6 Tunnel Broker接入IPV6网络。

去http://tunnelbroker.net/注册帐号,登陆后点击User Functions中的Create Regular Tunnel填写你的公网IP地址即可。生成的隧道如下图所示:

3.    在隧道信息的下方有Example IPv6 Tunnel Configurations by OS (Windows, Linux, etc.):在这里可以找到各个操作系统隧道生成方法,我们这里选择了linux-route2,

modprobe ipv6
ip tunnel add he-ipv6 mode sit remote 72.52.104.74 local 【你的IP】 ttl 255
ip link set he-ipv6 up
ip addr add 2001:470:1f01:f52b::2/64 dev he-ipv6
ip route add ::/0 dev he-ipv6
ip -f inet6 addr

4.    在Linux上运行此脚本即可,然后使用ifconfig命令可以看到生成了sit0和sit1两个借口。

5.    测试IPv6连通性。

Ping6 隧道的另一端的IPv6地址
ping6 www.kame.net

*Warning!注意如果出现
#ping6 www.kame.net
connect: Network is unreachable
这种情况是因为添加的默认路由没有生效,还需要自行添加
route -A inet6 add 2000::/3 dev sit1

如果出现
# ping6 www.kame.net
PING www.kame.net(2001:200:dff:fff1:216:3eff:feb1:44d7) 56 data bytes
64 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7: icmp_seq=0 ttl=56 time=393 ms
64 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7: icmp_seq=0 ttl=56 time=393 ms

则表明IPV6网络联通成功!

6.    接下来我们需要给内网的PC分配IPv6地址,该给他们分配什么样的地址呢,这个是不能乱分配的,由于IPV6没有了NAT的功能,所以IPV6的地址应该是全球唯一的,HE.net的隧道里给我们提供了两个IPV6段,一个48位(Routed /48:)一个64位(Routed /64:)如果只有一个网段的话,用64的就可以。网络大的可以把48位划分成子网。

这里我们用到了一个软件radvd,大家知道IPV6地址分配有有状态和无状态区分,radvd就是无状态的。我们可以从网上下载radvd或者用yum install radvd安装。

Radvd的配置文件是/etc/radvd.conf和/etc/sysconfig/radvd,只需要更改第一个即可。我的配置文件如下:
#cat /etc/radvd.conf

interface eth0
{
AdvSendAdvert on;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
prefix 2001:470:4f05:152b::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};

};

7.    接着我们要开启IPV6的转发功能,这个和IPv4的转发类似,另外还要清空ip6tables规则。

echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
ip6tables –F && service ip6tables save

8.    然后再开启radvd服务,service radvd start
如果没有打开IPv6转发,则会报错radvd: IPv6 forwarding seems to be disabled, exiting

9.    在PC客户端中安装IPv6(Windows Vista和7是默认安装的)

10.    PC客户端会得到IPv6地址2001:470:4f05:152b开头的地址,可以使用ipconfig查看。

使用ping 2001:470:4f05:152b::1来查看到网关的连通性。

11.    在PC端ping6 www.kame.net 如果有返回值就OK了。

如果没有返回值也不要着急,可以自行添加默认网关

ipv6 -p rtu ::/0 7/2001:470:1f05:152b::1  这个网段要和radvd.conf中的对应起来。
或者是ip route add 2001::/3 via 2001:470:23:314::1/64 metric 1

Tips.小提示:
1.如何删除默认网关呢,呵呵,加一个life 0就可以了
ipv6 rtu ::/0 7/2001:470:19:13c::1 life 0
2.这里面的7表示什么意思呢?
7表示网卡索引相当于ID,可以使用netsh int ipv6 show int查看。

12.    如果ping成功表示你已经大功告成了,哈哈!

今天就写到这里把,后面没有截图是因为现在在家,没法测试。
更多精彩文章,请访问我的博客http://www.ipcpu.com

后记:
我以前也写过tunnel broker的文章,电脑是可以轻松接入IPv6的,但是如果要做路由,你必须有全球唯一的IPV6地址(而且应该是一段地址),这个是需要申请的,至于其他的tunnel broker服务商提供不提供,就不太清楚了,台湾的大部分不提供的,至于其他的不清楚,有兴趣的同学可以试一下。

这样Linux就成了ipv6的路由器,那么可不可以通过***(PPTPd或者open***来接入ipv6呢,理论上说是可以滴!但是我发现ppp0接口没有ipv6的link local地址,也就是说PPP还不支持ipv6?还是我没装支持ipv6的版本?)


转自:http://www.ipcpu.com/2010/11/linux-ipv6-router/