在四年前,咱在博客写了:
在以前从最开始的 ZeroTier组网变成GRE组网到现在已经很久没有更新,因为如下原因
咱的ASN变化了,所以咱需要更新网络的配置,正如此,不然给网络做一次大变更
设计计划
网络连接
咱目前的计划是同地区,例如都是东京的机器,则使用VXLAN组网,跨地区则使用Wireguard进行连接,同一云运营商的则直接使用VMBR或云服务商的内网
因为是Linux Only的VXLAN组网,所以组网,组起来和以前用GRE起Tunnel基本一样,没什么复杂的
配置前
机器环境
咱的机器环境基本都如下
Debian9 10 11 12 / Ubuntu 18.04 20.04 22.04 + FRRouting 7/8/9
国内机器预配置(禁用IPV6优先,默认IPV4优先)
国内机器要不就是没V6,要不就是云服务商高价提供,所以国内机器咱需要优先使用V4
sed -i "s/#\?precedence ::ffff:0:0\/96 100/precedence ::ffff:0:0\/96 100/" /etc/gai.conf
边缘节点FRRouting更新最新 9
在配置的时候发现,FRRouting9 发布了,看了下版本更新内容:(原文)
Memory footprint for BGP reduced drastically!
In FRR 8.4 release, we shipped Extended Message Support for BGP, which increased the memory usage significantly. In FRR 9.0 release, the memory footprint is back to normal again. We removed the unused structure fields that consumed a huge amount of memory unnecessarily.
Other significant changes
- Introduce
mgmtd
daemon link - Add BGP
neighbor path-attribute treat-as-withdraw
command link - Add BGP ASN dot notation support (RFC 5396) link
- Add BGP Software Version capability (draft-abraitis-bgp-version-capability) link
- Allow BGP peering via 127.0.0.0/8 link
- Deprecate BGP
internet
community – this is the Cisco-specific community, which is never been RFC-defined and confusing - Implement
match source-protocol
for BGP route maps link - Implement BGP Node Target extended communities (draft-ietf-idr-node-target-ext-comm) link
- Implement Flex-Algo for SR-MPLS (RFC 9350) link
- Add support for IS-IS
advertise-passive-only
link - Add IS-IS
affinity-map
support link - Add the
graceful-restart hello-delay
OSPFv2/OSPFv3 command link, link - Add the
ipv6 mld join
PIMv6 command link - Add
allow-ecmp x
RIP/RIPng command link, link - Add BFD support for RIP
主要内容看重的内容就是
BGP 的内存占用量大幅减少!
在 FRR 8.4 版本中,我们提供了对 BGP 的扩展消息支持,这显着增加了内存使用量。 在 FRR 9.0 版本中,内存占用再次恢复正常。 我们删除了未使用的结构字段,这些字段不必要地消耗了大量内存。
BGP 和其他协议的内存泄漏修复。
更新操作就非常简单了,直接apt更新就好了
apt update -y && apt upgrade -y
BGP 路由器实现配置-自动过滤器生成 (使用BGPQ4 根据AS-SET生成)
apt install libtool autoconf g++
wget https://github.com/bgp/bgpq4/archive/refs/tags/1.9.tar.gz
tar -xzvf 1.9.tar.gz
./bootstrap
./configure
make
make install
Linux机器启用MPLS
检测有没有加载内核模块。 lsmod | grep mpls
mpls_iptunnel 16384 0
mpls_gso 16384 0
mpls_router 28672 1 mpls_iptunnel
ip_tunnel 24576 1 mpls_router
如果没有的话则需要加载内核模块
将这 3 个内核模块附加到 /etc/modules-load.d/modules.conf 配置文件中。
mpls_router
mpls_gso
mpls_iptunnel
为 FRR 设备中接口激活 MPLS,并将最大可用平台 MPLS 标签设置为 1048575。
#临时使用
sysctl -w net.mpls.conf.接口名称.input=1
sysctl -w net.mpls.conf.eth0.input=1
sysctl -w net.mpls.conf.eth1.input=1
sysctl -w net.mpls.conf.lo.input=1
sysctl -w net.mpls.platform_labels=1048575
#写入配置文件
/etc/sysctl.d/91-mpls.conf
net.mpls.conf.lo.input=1
net.mpls.conf.eth0.input=1
net.mpls.conf.eth1.input=1
net.mpls.platform_labels=1048575
参考文章:https://www.uni-koeln.de/~pbogusze/posts/FRRouting_SR_Segment_Routing_tech_demo.html
Linux下启用VRF
咱对有IXP访问,和部分可以开VM但同时通过Tunnel获得BGP的放在了几个不同的VRF里面
#IXP VRF
#针对IXP的,机器里有IXP网卡的
ip link add IXP type vrf table 200
ip link set dev IXP up
ip route add table 200 unreachable default metric 4278198272
ip link set dev eth1 master IXP
#针对上游 或者 Tunnel接的上游
ip link add IPT type vrf table 300
ip link set dev IPT up
ip route add table 300 unreachable default metric 4278198272
ip link set dev vxlan-01 master IPT
#针对PVE里面的VM或以后的客户
ip link add Cust type vrf table 400
ip link set dev Cust up
ip route add table 400 unreachable default metric 4278198272
ip link set dev vmbr200 master Cust
IP分配
没钱为各个节点分配公网IPv4,所以咱计划给每个节点使用内网IPv4 + 公网IPv6。但是因为咱打算连通DN42,所以内网选择网段就避开了 172.20. 0.0/14 / fd00::/8
最终咱选中的分配网段规则如下(咱的规则)
在10.233.0.0/16 下分配Lo口地址 (全是/32)
在10.230.0.0/16 下分配互联地址(全是/31)
全部都会被分配IPV6,但IPV6将是公网地址。无论Lo还是互联地址都将以 /64 的形式分配。(不是/128和/127)
ISIS区域ID命名
咱的规则如下
39.[ISO3166].[NET].[NET].[ID].00
例如 39.0840.0102.3384.0XXX.00
代表的是 39 固定前缀 , 0840 代表美国地区(ISO3166) ,0102.3384.0 代表 10.233.84.0/24(同Lo口地址) ,XXX代表编号
路由配置
因为设备不少,这就选基本的配置出来展示,整个网络基本都是在这复制出来的
接口配置
#案例
interface dummy0
ip router isis ISIF:DE:L2
ipv6 router isis ISIF:DE:L2
isis circuit-type level-2-only
exit
interface vxlan-fr-root-2
ip router isis ISIF:DE:L2
ipv6 router isis ISIF:DE:L2
isis bfd
isis circuit-type level-2-only
isis network point-to-point
mpls enable
exit
#模板
interface dummy0
ip router isis [ISISNAME]
ipv6 router isis [ISISNAME]
isis circuit-type level-2-only
exit
interface [Interface]
ip router isis [ISISNAME]
ipv6 router isis [ISISNAME]
isis bfd
isis circuit-type level-2-only
isis network point-to-point
mpls enable
exit
ISIS配置
#案例
router isis ISIF:DE
is-type level-2-only
net 39.0276.0102.3349.0002.00
exit
#模板
router isis [NAME]
is-type level-2-only
net ID
exit
MPLS LDP配置
确保需要使用的每个接口都 mpls enable了
然后
mpls ldp
router-id 10.233.49.2
!
address-family ipv4
discovery transport-address 10.233.49.2
!
interface vxlan-fr-root-2
exit
!
exit-address-family
!
address-family ipv6
discovery transport-address XXX:XXXXX849:2::1
!
interface vxlan-fr-root-2
exit
!
exit-address-family
!
exit
BFD配置
BFD在网内没有特别的配置,也没更改参数,都是直接在接口下启用 isis bfd 即可自动完成配置