在自家使用ROS宣告ipv6
之前介绍过通过tunnelbroker提供的bgp tunnel不借助isp宣告ipv6,本篇则介绍如何通过ros实现自己这一套方案,本套方案的优点为不再使用第三方提供的bgp tunnel可以自由选择服务器位置(只要其支持bgp),自家和服务器之间的连接可以自己决定,部分方法不再需要自家有公网ip
准备
- 一个可以进行bgp的kvm或xen服务器(本篇使用vserver提供的vps)
- 至少一个提供transit的上游
- 一个ipv6子网
整个流程
宣告有2种方案分别为:
- vps通过public asn和上游建立peer,再通过private asn和自家建立peer,vps像上游发送前缀时删除private asn
- vps通过public asn和上游建立peer,再通过public asn和自家建立peer(igp)
本次将介绍第一种方法,private asn可以随意挑一个,本文将使用64554.
ros支持的链接方式就那么几个,无法自行扩展,自家有公网ip可以尝试使用eoip gre sit等隧道,自家没有公网ip或ip为动态其不想频繁去vps更改endpoint的话可以用vpn方式,支持的有openvpn pptp l2tp sstp等,本次则采用sstp和vps建立连接
vps配置1
routeros安装方法本篇叙述,可自行查找方法.
通过winbox链接到vps后点击system->package->安装或启用ipv6模块,然后重启
重启后再次链接到vps,然后点击ppp->interface,点击加号选择sstp server binding
,然后设置一个用户名(接下来要用到),然后点击ok
然后再ppp的窗口中选择secrets
添加一个账户,用户名为刚才设置的用户名,密码自行定义,然后确定
然后到左边菜单的ipv6->address,点击加号添加一个ipv6的子网,这个子网随意,可以是互联网上任意一块保留的或未分配的子网,也可以是自己的其它子网,此子网并不需要宣告,只要不是回环子网即可,这里用2019::1/64
,interface
选择刚刚设置的sstp server bindng
,设置好后点击ok
然后开始配置bgp
左边菜单选择routing->bgp,点击加号创建一个instance
,名称自定,as号码填写自己的public asn
,router id
填写自己的公网ipv4,然后点击ok
然后创建过滤规则,如果只和自家还有一个上游peer,那么此步骤可忽略,如果和多个as建立对等的话这一步是不可忽略的.
本次将创建一个只允许自己前缀的规则
点击左边菜单routering->filters,点击加号创建规则,chain
自己定义但要记住,本次使用self-prefix
,然后下面的prefix
输入自己的ipv6前缀
,前面的方块切记不要点击,然后下面的protocol
选择bgp,然后上面选项卡切换到actions
,将里面的action
改为accept
,然后保存
然后回到filters
选项卡再创建一个规则,chain
要和上一个保持一致,然后直接切换到actions
将里面的action
改为reject
此时self-prefix
实现了只允许特定前缀.
然后回到routeing->bgp,点击peers
设置和上游的对等信息,点击加号创建新对等,名称随意,instance
选择刚刚自己建立的,remote address
和remote as
分别设置为上游提供的对等ipv6和asn,multihop
根据上游要求自行选择或不选,tcp md5 key
为bgp密码,根据上游要求自行输入或不使用,在下面的out filter
中选择刚刚设置的self-prefix
,然后勾选下面的remove private as
,然后切换到advanced选项卡将ipv6勾选,然后点击ok,之后确认是否和上游建立peer,确认无问题后我们开始设置自家的路由
自家路由配置1
自家路由同样适用的ros,先和vps建立连接,选择左边菜单的interfaces
点击加号创建一个sstp client
,名字随便,切换到dial out
其中connect to
输入vps的ip,下面user
和password
输入刚刚vps里设置的帐户名和密码,然后下面的verfy server address form certificate
取消勾选,然后点击apply,然后点击status确认是否连接,并记下local address
,然后点击左边菜单ipv6->address,点击加号添加子网,address
则为刚刚vps设置的那一段内的任意地址,这里使用2019::2/64
,instance
选择刚刚的sstp client
,此时在这个sstp链接中,2019::1
为vps的地址,2019::2
为自家路由的地址
然后点击左边才的routeing->bgp,点击加号创建一个instance
,名称随意,as则为要使用的private as
,这里使用64554
,然后router id
设置为刚刚sstp client
中status
显示的local address
,然后点击ok,然后切换到peer
选项卡,点击加号创建一个peer
,名称随意,instance
选择刚刚自己创建的那个,remote address
设置为2019::1,remote as
设置为自己的public asn
,然后切换到advanced
勾选ipv6
,然后点击ok,回到routeing->networks,点击加号添加自己要宣告的那段ipv6前缀,然后点击ok
然后回到vps继续配置
vps配置2
点击左边菜单routeing->bgp,切换到peer
选项卡,点击加号添加peer,name
随意,instance
选择自己刚才创建的instance,remote address
设置为2019::2,remote as
设置为自己刚刚的private asn
也就是64554
,然后切换到advanced
选项卡勾选ipv6
然后点击ok,然后检查自己vps和自家路由的peer无问题后,则宣告完成
此时通过外界进行路由追踪则可以看到宣告的ipv6将出现路由信息.
问题排查
首先隧道或vpn正常连接为宣告的前提,首先要排查vps和自家路由间的ipv4以及自定义ipv6的ping是否正常,若不正常则应当检查vpn或隧道连接的问题
若外界可以看到路由信息,但在vps上游那里中断则检查vps的ipv6 forward
是否已经启用,未启用则需要启用
若外界没有路由,则首先检查vps中和自家路由的peer,打开和自家路由建立的peer详情,切换到status
,查看updates received
是否为0,为0则自家路由没有宣告前缀,如果不为零再查看和上游建立的peer详情,切换到status
,查看updates sent
是否为0,若为0则检查vps的filter是否设置正确,若不为0,先检查peer的general
里的remove private as
是否已经勾选,如果勾选则表示vps配置正确,已经将宣告的子网发送给了上游,此时应当联系上游排查问题.
其它备注
- 所有的和
private as
建立的peer都不应当勾选remove private as
- 所有和
public as
建立的peer都应当勾选remove private as