VXLAN Ethernet Virtual Private Network集中式和分布式网关实验(华为设备)

实验场景1:VXLAN-EVPN集中式网关

在这里插入图片描述
环境说明:

  1. Underlay通过OSPF互联,Overlay通过BGP EVPN建立隧道;Leaf1和Leaf2分别与Spine建立IBGP邻居关系,Spine作为路由反射器。
  2. Leaf1,Leaf2和Spine分别使用L0接口地址作为VTEP地址和BGP EVPN源地址。Leaf1的VTEP地址为1.1.1.1/32,Leaf2的VTEP地址为2.2.2.2/32,Spine的VTEP地址为3.3.3.3/32。
  3. Vlan10的子网范围为10.1.10.0/24,网关地址为10.1.10.254;Vlan20的子网范围为10.1.20.0/24,网关地址为10.1.20.254。且网关部署在spine上。
  4. Vlan10子网对应的VNI为10,Vlan20子网对应的VNI为20。
  5. 双方Vlan20子网设备(PC2和PC3)能够直接通过Leaf1和Leaf2建立的VXLAN隧道通信;双方VLAN10和VLAN20(PC1和PC3)的通信则需要通过Spine集中式网关进行转发。
  6. RD值和RT值规划请参考实验图。

ENSP CE12800使用镜像下载链接:
链接:https://pan.baidu.com/s/1VIfaTwWJfNzIG6XuATGRdA
提取码:ahek

此镜像需要在输入完成命令后commit命令使之生效。

实验步骤:

1.完成underlay配置
首先配置两台接入交换机,创建Vlan和接口划分
SW1:

vlan 10
vlan 20

interface GigabitEthernet0/0/1
 port link-type trunk
 port trunk allow-pass vlan 2 to 4094
 
interface GigabitEthernet0/0/2
 port link-type access
 port default vlan 10
 
interface GigabitEthernet0/0/3
 port link-type access
 port default vlan 20

SW2:

vlan20
interface GigabitEthernet0/0/1
 port link-type trunk
 port trunk allow-pass vlan 2 to 4094

interface GigabitEthernet0/0/2
 port link-type access
 port default vlan 20

接着初始化三台PC(略)。

完成后配置Leaf1、Spine、Leaf2的接口IP地址:
Leaf1:

interface GE1/0/0
 undo portswitch
 undo shutdown
 ip address 13.13.13.1 255.255.255.0
 
interface LoopBack0
 ip address 1.1.1.1 255.255.255.255

Spine:

interface GE1/0/0
 undo portswitch
 undo shutdown
 ip address 13.13.13.3 255.255.255.0

interface GE1/0/1
 undo portswitch
 undo shutdown
 ip address 23.23.23.3 255.255.255.0

interface LoopBack0
 ip address 3.3.3.3 255.255.255.255

Leaf2:

interface GE1/0/0
 undo portswitch
 undo shutdown
 ip address 23.23.23.2 255.255.255.0
 
interface LoopBack0
 ip address 2.2.2.2 255.255.255.255

在三台设备上企业OSPF,并配置接口类型为P2P加快收敛
Leaf1:

ospf 1 router-id 1.1.1.1
 area 0.0.0.0
  network 1.1.1.1 0.0.0.0
  network 13.13.13.1 0.0.0.0

interface GE1/0/0
 ospf network-type p2p

Spine:

ospf 1 router-id 3.3.3.3
 area 0.0.0.0
  network 3.3.3.3 0.0.0.0
  network 13.13.13.3 0.0.0.0
  network 23.23.23.3 0.0.0.0

interface GE1/0/0
 ospf network-type p2p
 interface GE1/0/1
 ospf network-type p2p

Leaf2:

ospf 1 router-id 2.2.2.2
 area 0.0.0.0
  network 2.2.2.2 0.0.0.0
  network 23.23.23.2 0.0.0.0
  
interface GE1/0/0
 ospf network-type p2p

配置完成后在Spine上检查OSPF邻居是否正常建立:成功
在这里插入图片描述
2.完成BGP EVPN邻居关系建立
首先在三台设备上开启EVPN功能:

evpn-overlay enable

Leaf1上配置EVPN对等体,使用自己的L0接口建立连接,并且关闭ipv4 unicast地址族的对等体关系建立:

bgp 100
 peer 3.3.3.3 as-number 100
 peer 3.3.3.3 connect-interface LoopBack0
 
 ipv4-family unicast
  undo peer 3.3.3.3 enable
 
 l2vpn-family evpn
  policy vpn-target
  peer 3.3.3.3 enable

Spine使用L0接口与Leaf1和Leaf2建立IBGP对等体关系,并启动路由反射器:

bgp 100
 peer 1.1.1.1 as-number 100
 peer 1.1.1.1 connect-interface LoopBack0
 peer 2.2.2.2 as-number 100
 peer 2.2.2.2 connect-interface LoopBack0
 
 ipv4-family unicast
  undo peer 1.1.1.1 enable
  undo peer 2.2.2.2 enable
 
 l2vpn-family evpn
  undo policy vpn-target
  peer 1.1.1.1 enable
  peer 1.1.1.1 reflect-client
  peer 2.2.2.2 enable
  peer 2.2.2.2 reflect-client

Leaf2与Leaf1同理:

bgp 100
 peer 3.3.3.3 as-number 100
 peer 3.3.3.3 connect-interface LoopBack0
 
 ipv4-family unicast
  undo peer 3.3.3.3 enable
 
 l2vpn-family evpn
  policy vpn-target
  peer 3.3.3.3 enable

配置完成后Spine上查看BGP EVPN邻居关系建立情况:成功
在这里插入图片描述
3. 配置同子网通信Vxlan隧道:

首先在Leaf1上配置bridge-domain,这里为了方便记忆,brige-domain和vni的值设置为和Vlan20相同的20。此外,再配置RD和RT值。

bridge-domain 20
 vxlan vni 20
 evpn
  route-distinguisher 20:1
  vpn-target 20:1 export-extcommunity
  vpn-target 20:2 import-extcommunity

接着在配置子接口,接收vlan20 tag的报文,并且绑定到bridge-domain20中:

interface GE1/0/1.20 mode l2
 encapsulation dot1q vid 20
 bridge-domain 20

最后配置VXLAN隧道接口地址围殴L0接口和使用BGP-EVPN建立动态隧道:

interface Nve1
 source 1.1.1.1
 vni 20 head-end peer-list protocol bgp

完成后,我们可以在Leaf2上通过相同的步骤配置VXLAN隧道,注意RT值需要和Leaf1的相反:

bridge-domain 20
 vxlan vni 20
 evpn
  route-distinguisher 20:2
  vpn-target 20:2 export-extcommunity
  vpn-target 20:1 import-extcommunity

interface GE1/0/1
 undo shutdown 

interface GE1/0/1.20 mode l2
 encapsulation dot1q vid 20
 bridge-domain 20
 
interface Nve1
 source 2.2.2.2
 vni 20 head-end peer-list protocol bgp

双方VTEP在收到对端发来的BGP EVPN路由后,首先检查该路由携带的EVPN实例的出方向VPN-Target,如果与本端EVPN实例的入方向VPN-Target相等,则接收该路由,否则丢弃该路由。在接收该路由后,两个VTEP将获取其中携带的对端VTEP IP地址和VNI,如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道;同时,如果对端VNI与本端相同,则创建一个头端复制表,用于后续BUM报文转发。

配置完成后检查VXLAN隧道建立情况和学习到的路由,在Leaf1上:
在这里插入图片描述
在这里插入图片描述
可以看到Leaf1和Leaf2 VNI 20之前的隧道已经建立,并且能够通过BGP-EVPN学习到对方隧道口的type3(Inclusive Multicast)路由。

4.测试PC2和PC3之间的通信:成功
在这里插入图片描述
5.配置集中式网关跨网段通信
前面的步骤中,我们完成了PC2和PC3的直接通信,并不需要网关的介入。但是如果想要PC1和PC3能够互相跨子网通信,则需要配置网关,类似与Vlanif。首先,在Leaf1上建立与Spine的VNI 10的隧道:

bridge-domain 10
 vxlan vni 10
 evpn
  route-distinguisher 10:1
  vpn-target 10:1 export-extcommunity
  vpn-target 10:3 import-extcommunity

interface Nve1
 source 1.1.1.1
 vni 10 head-end peer-list protocol bgp
 vni 20 head-end peer-list protocol bgp

interface GE1/0/1
 undo shutdown 
 
interface GE1/0/1.10 mode l2
 encapsulation dot1q vid 10
 bridge-domain 10

注意RT值export(ERT)方向为10:1,import方向(IRT)为10:3。接下来,在Spine上建立VNI 10和VNI 20的隧道:

bridge-domain 10
 vxlan vni 10
 evpn
  route-distinguisher 10:3
  vpn-target 10:3 export-extcommunity
  vpn-target 10:1 import-extcommunity

bridge-domain 20
 vxlan vni 20
 evpn
  route-distinguisher 20:3
  vpn-target 20:3 export-extcommunity
  vpn-target 20:2 import-extcommunity

interface Nve1
 source 3.3.3.3
 vni 10 head-end peer-list protocol bgp
 vni 20 head-end peer-list protocol bgp

interface Vbdif10
 ip address 10.1.10.254 255.255.255.0

interface Vbdif20
 ip address 10.1.20.254 255.255.255.0

其中,VNI 10隧道ERT为10:3,IRT为10:1,与Leaf1相反。同理,VNI 20隧道ERT为20:3,IRT为20:2,与Leaf2相反。此外,自己的VXLAN隧道源地址为为3.3.3.3,并通过bgp建立两个VXLAN隧道。最后Vbdif10与20分别作为2个bridge-domain的网关。

最后配置Leaf2能够与Spine建立隧道,仅仅需要在bridge-domain 20中添加一条IRT条目即可,接收Spine发送来的BGP EVPN路由信息:

bridge-domain 20
 evpn
  route-distinguisher 20:2
  vpn-target 20:3 import-extcommunity

完成后在Spine上查看隧道建立情况:成功与Leaf1和Leaf2建立隧道
在这里插入图片描述

6.测试PC1和PC3之间的通信:

这里需要注意的是,因为ENSP存在BUG,当一个bridge-domain下存在2个import方向的RT值时,无法正常工作,所以我们需要在Leaf2上删除掉同子网通信的IRT值:

bridge-domain 20
 evpn
 undo vpn-target 20:1 import-extcommunity

修改完成后,首先测试PC1,PC3与网关的通信:通信成功
在这里插入图片描述
在这里插入图片描述
接着测试PC1和PC3之间的通信:集中式网关跨子网通信成功。
在这里插入图片描述
跨子网通信具体流程分析(PC1->PC3):

  1. 后续当PC1访问PC3时,报文到达了本端VTEP,根据报文中接入的端口和VLAN信息获取对应的二层广播域,在对应的二层广播域内查找出接口和封装信息。
  2. 本端VTEP根据查找到的出接口和封装信息进行VXLAN封装,向Spine转发报文。
  3. Spine收到VXLAN报文后进行解封装,发现内层报文中的目的MAC是三层网关接VBDIF10的MAC地址,判断需要进行三层转发。
  4. 接着剥除内层报文的以太封装,解析目的IP。根据目的IP查找路由表,找到目的IP的下一跳地址,再根据下一跳地址查找ARP表项,获取目的MAC、VXLAN隧道出接口及VNI等信息。
  5. 然后Spine重新封装VXLAN报文,向Leaf2转发。其中内层报文以太头中的源MAC是三层网关接口VBDIF20的MAC地址。
  6. Leaf2收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。依据VNI获取对应的二层广播域,然后进行VXLAN解封装,获取内层二层报文,并在对应的二层广播域内查找出接口和封装信息。
  7. Leaf2根据查找到的出接口和封装信息,对报文进行VLAN Tag的相应处理,转发给对应的PC3。

实验场景2:VXLAN-EVPN分布式网关

在这里插入图片描述

环境说明:

  1. Underlay通过OSPF互联,Overlay通过BGP EVPN建立隧道;Leaf1和Leaf2分别与Spine建立IBGP邻居关系,Spine作为路由反射器。
  2. Leaf1、Leaf2、Spine分别使用L0接口地址作为VTEP地址和BGP EVPN源地址。Leaf1的VTEP地址为1.1.1.1/32,Leaf2的VTEP地址为2.2.2.2/32,Spine的VTEP地址为3.3.3.3/32。
  3. Vlan10的子网范围为10.1.10.0/24,网关地址为10.1.10.254;Vlan20的子网范围为10.1.20.0/24,网关地址为10.1.20.254。且网关部署在spine上。
  4. Vlan10子网对应的VNI为10,Vlan20子网对应的VNI为20。
  5. 双方Vlan20子网设备(PC2和PC3)能够直接通过Leaf1和Leaf2建立的VXLAN隧道通信;双方VLAN10和VLAN20(PC1和PC3)的通信则需要通过Leaf1和Leaf2分布式网关进行转发。
  6. Server在VXLAN网络外部,其IP地址为10.1.30.1。该Server需要与三个PC通信。
  7. RD值和RT值规划请参考实验图。

实验步骤:
1.配置Underlay环境(略,请按照实验场景1配置)

2.建立Overlay的BGP EVPN邻居关系(略,请按照实验场景1配置)

3.配置分布式网关

首先在Leaf1上创建2个子网的bridge-domain,并将接口G1/0/1与之绑定:

bridge-domain 10
 vxlan vni 10
 evpn
  route-distinguisher 10:1

bridge-domain 20
 vxlan vni 20
 evpn
  route-distinguisher 20:1

interface GE1/0/1
 undo shutdown 
 
interface GE1/0/1.10 mode l2
 encapsulation dot1q vid 10
 bridge-domain 10

interface GE1/0/1.20 mode l2
 encapsulation dot1q vid 20
 bridge-domain 20

注意我们后续配置VXLAN隧道时再补充上bridge-domain的RT值。紧接着,创建VPN实例,同样目前不需要配置RT值,并将VPN实例绑定到指定二层广播域的VBDIF接口(网关)上:

ip vpn-instance VPN_A
 ipv4-family
  route-distinguisher 100:1

interface Vbdif10
 ip binding vpn-instance VPN_A
 ip address 10.1.10.254 255.255.255.0

interface Vbdif20
 ip binding vpn-instance VPN_A
 ip address 10.1.20.254 255.255.255.0

同理,在Leaf2上创建分布式网关:

bridge-domain 20
 vxlan vni 20
 evpn
  route-distinguisher 20:2

interface GE1/0/1
 undo shutdown 

interface GE1/0/1.20 mode l2
 encapsulation dot1q vid 20
 bridge-domain 20

ip vpn-instance VPN_A
 ipv4-family
  route-distinguisher 100:2

interface Vbdif20
 ip binding vpn-instance VPN_A
 ip address 10.1.20.254 255.255.255.0

其中,VPN实例用于区分和隔离不同租户的IP路由表。配置完成后测试PC1、PC2、PC3是否能够访问网关。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到,三个PC都能够访问分布式网关了,同时PC1和PC2目前可以通过Leaf1的分布式网关进行通信:
在这里插入图片描述
4.配置同子网通信VXLAN隧道

同子网(bridge-domain 20)通信的隧道隧道在Leaf1和Leaf2之间建立。首先配置Leaf1的bridge-domain下的RT值:

bridge-domain 20
 vxlan vni 20
 evpn
  route-distinguisher 20:1
  vpn-target 20:1 export-extcommunity
  vpn-target 20:2 import-extcommunity

接着配置VNI 20的隧道源地址和以BGP EVPN建立动态隧道:

interface Nve1
 source 1.1.1.1
 vni 20 head-end peer-list protocol bgp

Leaf2同理,注意RT值与Leaf1的相反:

bridge-domain 20
 vxlan vni 20
 evpn
  route-distinguisher 20:2
  vpn-target 20:2 export-extcommunity
  vpn-target 20:1 import-extcommunity

interface Nve1
 source 2.2.2.2
 vni 20 head-end peer-list protocol bgp

在Leaf1上查看隧道是否建立成功:成功建立
在这里插入图片描述
测试PC2和PC3的通信:成功
在这里插入图片描述
5.配置跨子网通信VXLAN隧道

首先为Leaf1和Leaf2上的VPN实例指定关联的三层VPN,双方的三层VNI需要相同。这一步的作用是用于VTEP节点在收到数据报文时判断使用哪个VPN实例的路由表指导转发:

ip vpn-instance VPN_A
 vxlan vni 100

接着配置L3VPN实例(本实验中的VPN_A)中的VPN-Tag (eERT或者eIRT)。这一步的目的是用于控制本端VPN实例与对端EVPN实例之间BGP EVPN路由的发布和接收。在本次实验中,在Leaf1上的VPN_A上配置eIRT,需要与Leaf2上EVPN的ERT(20:2)对应,以接收对方发送的路由信息:

ip vpn-instance VPN_A
 ipv4-family
  vpn-target 20:2 import-extcommunity evpn

接着,补充配置Leaf1上的bridge-domain 10 evpn实例中的ERT值,以向外发送该bridge-domain的路由信息:

bridge-domain 10
 evpn
  route-distinguisher 10:1

然后在Leaf2上的VPN_A实例中配置eIRT,需要与Leaf1上配置的2个ERT对应,分别是10:1和20:1:

ip vpn-instance VPN_A
 ipv4-family
  vpn-target 10:1 import-extcommunity evpn
  vpn-target 20:1 import-extcommunity evpn

这一步配置完成后,我们还需要在三台设备的BGP中使能传递

注意,以下是一些与RT值运用相关的信息:

  1. EVPN实例中的RT值根据方向称为ERT或者IRT,而L3VPN实例中的RT值根据方法称为eIRT或者eERT。
  2. 检查该路由的ERT与接收端EVPN实例的IRT是否相同。如果相同,则接收该路由,同时EVPN实例提取其中包含的主机IP+MAC信息,用于主机ARP通告。
  3. 检查该路由的ERT与接收端L3VPN实例的eIRT是否相同。如果相同,则接收该路由,同时L3VPN实例提取其中的主机IP地址+三层VNI信息,在其路由表中生成Host的路由。该路由的下一跳会被设置为对端Leaf的VXLAN隧道接口。
  4. 接收端EVPN实例或L3VPN实例接收该路由后会通过下一跳获取对端Leaf的VTEP IP地址,如果该地址三层路由可达,则建立一条到对端Leaf的VXLAN隧道。

接下来配置Leaf1和leaf2双方传递路由的类型,有IRB和IP前缀两种路由类型。这里选择以IRP方式进行传递,所以需要在三台设备的BGP中激活IRP路由传递的功能:

在Leaf1上:

bgp 100
 l2vpn-family evpn
  peer 3.3.3.3 advertise irb

在Spine上:

bgp 100
 l2vpn-family evpn
  peer 1.1.1.1 advertise irb
  peer 2.2.2.2 advertise irb

在Leaf2上:

bgp 100
 l2vpn-family evpn
  peer 3.3.3.3 advertise irb

然后在2个网关设备处收集arp信息,并通过BGP EVPN type 2路由进行传递,Leaf1上:

interface Vbdif10
 arp collect host enable

interface Vbdif20
 arp collect host enable

Leaf2上:

interface Vbdif20
 arp collect host enable

完成这一步后我们可以在leaf上查看是否学习到了对端的type2路由信息,以leaf2为例:
在这里插入图片描述
可以看到,Leaf2已经学习到了PC1和PC2的MAC和IP信息,并且也标明的下一跳的地址为Leaf1上VTEP的地址1.1.1.1。

最后,可以检查PC1和PC3能否跨子网通信:成功
在这里插入图片描述
跨子网通信具体流程分析(PC1->PC3):

  1. Leaf1收到来自PC1的报文,检测到报文的目的MAC是网关接口MAC,判断该报文需要进行三层转发。
  2. Leaf1根据报文的入接口找到对应的二层广播域,然后找到绑定该广播域VBDIF接口的VPN实例。根据报文的目的IP地址,查找该VPN实例下的路由表,获取该路由对应的三层VNI,以及下一跳地址。再根据出接口是VXLAN隧道,判断需要进行VXLAN封装:
 1.根据VXLAN隧道的目的IP和源IP地址,获取对应的MAC地址,并将内层目的MAC和源MAC替换。

 2.将三层VNI封装到报文中。

 3.外层封装VXLAN隧道的目的IP和源IP地址,源MAC地址为Leaf1的VBDIF接口MAC地址,目的MAC地址为网络下一跳的MAC地址。
  1. 封装后的报文根据外层MAC和IP信息在IP网络中传输,送达Leaf2。
  2. Leaf2收到VXLAN报文后进行解封装,检测到报文的目的MAC是自己的MAC地址,判断该报文需要进行三层转发。
  3. Leaf2根据报文携带的三层VNI找到对应的VPN实例,通过查找该VPN实例下的路由表,获取报文的下一跳是网关接口地址,然后将目的MAC地址替换为PC3的MAC地址,源MAC地址替换为Leaf2的MAC地址,转发给PC3。

补充:(可选)对分布式网关的优化配置:

  1. 在网关设备的bridge-domain下将ARP报文广播修改为单播:
bridge-domain x
 arp broadcast-suppress enable
  1. 在网关设备的网关接口下使能anycast,并修改同一网关的MAC地址为相同:
interface Vbdif x
 mac-address xxxx-xxxx-xxxx
 vxlan anycast-gateway enable

6.配置与与外部网络进行访问

为了保证3个PC能够与外部的Server互访,我们需要将Server所在的网络使用BGP EVPN type 5的形式通告进入VXLAN网络。首先,需要在spine上配置VPN-instance,并设置三层VPN为100,与Leaf1,Leaf2保持一致。此外,还需要设置合适的RT值:

ip vpn-instance VPN_A
 ipv4-family
  route-distinguisher 100:3
  vpn-target 100:3 export-extcommunity evpn
  vpn-target 10:1 import-extcommunity evpn
  vpn-target 20:1 import-extcommunity evpn
  vpn-target 20:2 import-extcommunity evpn
 vxlan vni 100

这里将RD值设置为了100:3,eERT为100:3,eIRT分别为10:1,20:1,20:2。eIRT分别对应Leaf1和Leaf2上设置的ERT值,目的是接收这些EVPN实例发送的路由信息。

同样的,为了接收Spine发送的type 5路由,Leaf1和Leaf2的L3VPN实例上也要设置eIRT为100:3:

ip vpn-instance VPN_A
 ipv4-family
  vpn-target 100:3 import-extcommunity evpn

完成后,需要将spine连接服务器的端口绑定VPN_A实例:

interface GE1/0/2
 undo portswitch
 undo shutdown
 ip binding vpn-instance VPN_A
 ip address 10.1.30.254 255.255.255.0

绑定后,进入BGP的vpn-instance中,通告服务器网段,并发布到VXLAN环境中:

bgp 100
 ipv4-family vpn-instance VPN_A
  network 10.1.30.0 255.255.255.0
  advertise l2vpn evpn

最后,配置Spine上VXLAN隧道的源地址为L0:3.3.3.3/32:

interface Nve1
 source 3.3.3.3

完成所有配置后,可以进行最后的测试。首先在Spine上查看VXLAN隧道建立情况:
在这里插入图片描述
可以看到与Leaf1和Leaf2上的VTEP地址已经成功建立了动态隧道。接着,在Spine上可以查查看VPN_A的路由条目:
在这里插入图片描述
可以看到其已经学习到了去往3台PC的路由条目。我们可以继续检查Leaf1和Leaf2上是否已经通过BGP EVPN学习到了服务器网点的type 5路由:
在这里插入图片描述
最后测试PC能否和服务器通信,这里以PC1为例:成功。
在这里插入图片描述

参考资料:
华为文档:
https://support.huawei.com/enterprise/zh/doc/EDOC1100065715/84b90d20
https://support.huawei.com/enterprise/zh/doc/EDOC1100164807
案例视频:
https://www.bilibili.com/video/BV1Ai4y1C7mn?

  • 8
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格洛米爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值