
一,简介
本篇文章主要涉及到BGP广播、GRE隧道、OpenVPN配置、6To4隧道信息。
首先是拓扑图,设备主要是由以下部分组成的。

设备 | IP |
核心交换机 | 10.10.0.10/24 |
Mikrotik路由器 | 10.10.0.1/24 10.8.0.2/24 (OpenVPN) 2a0a:xxxx:xxxx:xxxx::2/64 (6To4 Tunnel Over OpenVPN) |
专线主机 A | 10.8.0.1/24 (OpenVPN) 2a0a:xxxx:xxxx:xxxx::1/64 (6To4 Tunnel Over OpenVPN) 2a0f:xxxx:xxxx:1::2 (GRE TUNNEL) |
BGP广播主机 B | 2a0f:xxxx:xxxx:1::1 (GRE TUNNEL) |
二,核心交换机配置
核心交换机是一款华三核心交换机,主要涉及的是对Vlan内启动IPv6广播并分配IP前缀。
以其中一个vlan为例:
interface Vlan-interface75
ipv6 nd ra prefix 2A0A:xxxx:xxxx:xxx5::/64 3600 3600
ipv6 address 2A0A:xxxx:xxxx:xxx5::1/64
undo ipv6 nd ra halt
ipv6 nd ra dns search-list csiu 3600 sequence 1
同时添加静态路由,数据走三层路由至Mikrotik的地址:
ipv6 route-static :: 0 2A0A:xxxx:xxxx:xxa5::1
在客户端可以查看是否成功分配到IPv6地址,并尝试ping 网关的IPv6地址,如果可以ping通则证明此段为通的。
三,Mikrotik路由器配置
此乃重中之重,首先我需要说明由于本次实验模拟了一个比较复杂的场景,所以这里面用到了OpenVPN和6To4隧道两种嵌套模式。
首先通过在专线主机A上进行OpenVPN Server的搭建,我们可以自己编写一个OVPN的配置文件,具体搭建过程和OVPN的格式在网上都有很多,自己编写搭建即可。

打开Mikrotik的PPP配置部分可以在这里导入OVPN配置,不再作过多赘述。在导入连接并成功连接后,可以点开对应的连接查看到本端被分配到的IP,由此可以看到我们被分配到的IP是10.8.0.2。

然后由于OpenVPN对IPv6的支持不是我们所需要的那种,所以我们需要在OpenVPN隧道的基础上再嵌套一层6To4的隧道。
在专线主机A启动一个sit隧道,并输入好OpenVPN的两端IP作为Local和Neighbour,然后在两端添加一段/64的地址,比如2a0a:xxxx:xxxx:xxxx::1/64和2a0a:xxxx:xxxx:xxxx::2/64,然后互相ping尝试是否可以ping通,如果可以通,则证明已经成功了一半了。
然后,我们需要给我们客户端被分配到的IP地址设定一个回程路由,具体就是指目的地址是客户端所在网段,下一跳是核心交换机上的IPv6地址。

到这里Mikrotik就算配置完毕了。
四,专线主机A配置
在这台主机上的配置浪费了我大量的时间,最后发现是iptables的转发问题。
先贴上这两台命令
ip6tables -A FORWARD -i KR-xxxxxGRE -j ACCEPT
ip6tables -A FORWARD -o KR-xxxxxGRE -j ACCEPT
由于GRE隧道本身是DROP掉所有转发流量的,所以如果我们不手动ACCEPT,那么流量是不会转发进GRE隧道的。
通过拓扑图可知,流量应该是这样的走向。
[客户端]
⇅
2a0a:xxxx:xxxx:xxa5::/64
⇅
[核心交换机]
⇅
MikroTik: 2a0a:xxxx:xxxx:xxa5::1
⇅
SIT 隧道(6to4)
⇅
MikroTik: 2a0a:xxxx:xxxx:xxx0::2
Ubuntu-2: 2a0a:xxxx:xxxx:xxx0::1
⇅
GRE 隧道(IPv6)
⇅
Ubuntu-2: 2a0f:xxxx:xxxx:x::2
Ubuntu-1: 2a0f:xxxx:xxxx:x::1
⇅
广播 IPv6:2a0a:xxxx:xxxx::/48
出口互联网(IPv6)
也就是说,如果我们不设定允许GRE转发,我们的流量就会卡在Ubuntu-2上而不会转发到Ubuntu-1上去。