主路由上了ros后,一直只用的ipv4,配置比较简单,但是一直想用ipv6双栈上网。平常逛v2ex等论坛,经常反馈运营商政策突然给变了,回收ipv4公网ip。一旦公网ip被回收的话,PT站的上传就没得玩了,PT种子基本不容易被人连接上,也就几乎没有了上传。但现在主流的PT站都支持了ipv6做种,而运营商对ipv6的公网ip还是很慷慨的,直接无条件的给。
但是ros虽然是稳定,但是配置起来一直很有难度,需要较强的网络知识才能玩得转。恰好这天碰到馒头的tracker服务器被墙了,就不得不研究下ipv6的配置方法,仔细研究下来,发现也不是很难,本篇文章记录一下routeros配置的过程和一些ipv6的基础知识。
1. IPv6基础知识
IPv6相对于ipv4看起来复杂了不少,但是仔细学习进去发现也不是那么难。
1.1 IPv6地址写法
IPv6整体的地址扩充到了128位,也就是一共可以有2的128次方个ip,这个数量基本可以为每一台设备提供一个不重复的IPv6地址。
IPv6的地址由8组4位的16进制的数值组成,中间用:
冒号进行间隔,每一位的16进制数值由4位2进制数值组成,每一组数字就由16位二进制数字组成,每一个IPv6的地址也就由16*8共128位组成。
IPv6在简写的时候,前面的0可以省略成一个零,例如:
fd00:00a8:0000:0000:0000:0000:0000:3456
可以对0 进行省略,
简写后:fd00:a8:0:0:0:0:0:3456
,同时连续多个16位的0可以使用::
进行简写,但是整个地址中只允许出现一个::
,
再次简写后:fd00:a8::3456
。
IPv6的URL写法,需要使用[]
对URL的地址进行包裹,如:
http://[240e:399:123:4480:20c:29ff:fe2b:3456]:8080
1.2 IPv6地址分类
IPv6的地址分为单播、组播和任意播,没有了IPv4中的广播概念,改成用组播来进行替代。
1.2.1 单播
可聚合全局单播地址 (公网IP)
这类地址也就是分给具体设备可以在公网上使用的普通IPv6地址。全球单播的前3bit是固定的001,换算成16进制第一位也就是2,地址范围是2000::/3FFF::FFFF。
本地唯一地址
本地唯一地址也称为私网地址,是用于局域网的地址,可以将内网与公网进行隔离,实现IPv4的NAT功能,保证内网设备的安全性。
这类地址又被称为ULA地址,这类地址在公网上不被路由,只能在内部局域网使用。
地址范围FC00/8 -> FD00/8
本地链路地址
这一类地址一般用作本地通信,只在一个路由器下有效,可以理解为IPv4的169.254
这种地址,是随机分配的地址。
地址范围FE80::/10
为开头,11-64为0,后64位的接口地址,一般是通过EUI-64规则,根据mac地址生成的接口地址。
特殊单播地址
- 未指定地址或者全0:
::
或者::/128
- 回环地址:
::1
或者::1/128
其余的组播和任意播对本文没有特别的帮助,可以参考网上的其他文章进行学习。
1.2.2 接口ID
除了前面的网络地址,剩下的就是接口ID,用于标识具体的主机地址,每条链路上的接口ID必须唯一。
接口ID配置方法有如下几种方式:
- 根据EUI-64自动生成,这个算法是根据mac地址自动算出接口的ID
- 手工配置
- 自动生成随机的接口ID
1.2.3 IPv6地址配置
- 手动配置:手工根据网络地址配置接口ID,主要用于静态的地址配置,可以配置一个简单的私网IP用于管理,如
FD00::1
- 自动配置
- 有状态地址自动配置(DHCPv6)
- 无状态地址自动配置(RS/RS)SLAAC
- 没有DHCP服务器也能自动完成IP地址的配置,但是不方便统一管理
2. IPv6的ND协议
IPv6的ND协议全称Neighbor Discovery Protocal,中文叫邻居发现协议。
可以帮我们实现如下功能:
- 地址解析:代替IPv4的arp协议,根据ip地址转义成mac地址
- 邻居的状态跟踪
- 无状态自动配置:从路由器的RA消息中获取网络前缀,并拼接接口ID组成单播地址
- 重复地址检测
- 前缀重编址
- 路由器重定向
总结一句话,在IPv6中ND协议替代了arp协议,同时也可以通过该协议对局域网内的所有主机分配ip地址
以上差不多是关于本次配置IPv6用到的全部基础知识了,其他更为深入的IPv6知识可以查阅网上文章进行更为深入的学习,下面开始介绍ros的详细配置。
3. ros配置公网IP
配置公网IP的前提是运营商分配了IPv6的地址,同时光猫需要桥接到路由器进行拨号。目前运营商采用的是IPv4使用PPPoe拨号上网,IPv6通过DHCPv6分配到用户手上。
本文ROS的版本是7.7的版本。
配置步骤
- 点击IPv6 -> DHCP Client,选择对应的PPPoe的接口,选择prefix,命名一个pool的名字,就可以获取运营商分配的网络前缀了
- 添加接口地址:运营商目前分过来的是网络前缀,根据前面的基础知识,接口ID还需要自己生成,可以手工配置,也可以根据EUI自动生成。在ROS中点击
IPv6->Addresses
可以打开接口列表,添加刚才的PPPoe接口的地址,地址输入::/64可自动生成,也可以手工配置::1/64
手工指定。
- Advertise:如果点击Advertise,该接口(Interface)会将地址池转发到该接口下,所有主机都会获取到对应公网地址,如下所示,LAN下所有主机都会得到对应的公网IPv6地址,配置公网IPv6的方法到这里就可以结束了。
4. ros配置ipv6的NAT模式
根据上面配置的方法,可以看到运营商给的直接将一个网络前缀分配到用户身上,给的IPv6公网IP实在是太多了,家里的所有设备分配一个公网的IPv6毫无疑问没有任何问题,但是由此带来的风险非常大,比如家里用的PC机就没有了路由器防火墙的保护,所有端口直接暴露在公网,这样看来实在是太危险了。
根据IPv6单播地址中本地唯一地址的划分,可以为家里划分出一个私有网段,然后通过NAT上网,保护内网设备。
配置步骤如下:
- 配置地址池:配置地址池,添加前缀
fd00::/64
作为私有地址的网络前缀
- 配置接口地址:在接口上配置一个固定的地址充当网关的作用,并开启Advertise,将地址池的网络前缀下发到当前网段
- 配置ND协议:配置ND协议指定DNS服务器为ROS,这样就可以使用ros的dns缓存提速网页的速度,DNS的地址指向网关的地址。
- 配置防火墙:IPv6的防火墙配置与IPv4的基本一致,选择masquerade进行伪装上网即可
- 最后一步在dns中添加IPv6的dns地址,常用的dns地址
- 腾讯:
2402:4e00::
、2402:4e00:1::
- 阿里:
2400:3200::1
、2400:3200:baba::1
- 腾讯:
根据以上配置后,内网的地址均是私有地址,通过pppoe分配的公网IP进行上网,有效的避免了安全风险。