frrouting mpls sr

 各个节点的mpls初始化

root@mpls4:~# cat mpls_init.sh 
modprobe mpls_router
modprobe mpls_iptunnel
modprobe mpls_gso
modprobe dummy
cat >/etc/modules-load.d/mpls.conf <<EOF
mpls_router
mpls_iptunnel
mpls_gso
dummy
EOF
cat >/etc/sysctl.d/90-mpls-router.conf <<EOF
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.all.rp_filter=0
net.mpls.platform_labels=1048575
net.ipv4.tcp_l3mdev_accept=1
net.ipv4.udp_l3mdev_accept=1
net.mpls.conf.lo.input=1
EOF
sysctl -p /etc/sysctl.d/90-mpls-router.conf

 mpls1 配置 

root@mpls1:~# cat /etc/frr/frr.conf
frr version 7.3.1
frr defaults traditional
hostname mpls1
log syslog informational
service integrated-vtysh-config
!
interface enp7s0
 ip address 172.16.0.1/30
 ip ospf area 0.0.0.0
!
interface enp8s0
 ip address 172.16.0.9/30
 ip ospf area 0.0.0.0
!
interface lo
 ip address 192.168.0.1/32
 ip ospf area 0.0.0.0
!
router ospf
 ospf router-id 192.168.0.1
 router-info area 0.0.0.0
 passive-interface lo
 capability opaque
 mpls-te on
 mpls-te router-address 192.168.0.1
 segment-routing on
 segment-routing global-block 16000 19999
 segment-routing node-msd 8
 segment-routing prefix 192.168.0.1/32 index 1001
!
line vty
!
log file /var/log/frr/frr.log
!
root@mpls1:~# 
root@mpls1:~# cat mpls_sr.sh 
 sysctl -w net.ipv4.ip_forward=1
 sysctl -w net.ipv4.conf.all.rp_filter=0
 sysctl -w net.ipv4.conf.lo.rp_filter=0
 sysctl -w net.mpls.conf.enp7s0.input=1
 sysctl -w net.mpls.conf.enp8s0.input=1
 sysctl -w net.mpls.conf.lo.input=1
 sysctl -w net.mpls.platform_labels=1048575
root@mpls1:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.1/32 brd 192.168.0.1 scope global lo
       valid_lft forever preferred_lft forever
    inet6 3000::11/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:e5:30:19 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.2/24 scope global enp1s0
       valid_lft forever preferred_lft forever
3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:d9:52:82 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.1/30 brd 172.16.0.3 scope global enp7s0
       valid_lft forever preferred_lft forever
4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:ff:18:f4 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.9/30 brd 172.16.0.11 scope global enp8s0
       valid_lft forever preferred_lft forever
root@mpls1:~#

 mpls2 配置 

root@mpls2:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.2/32 brd 192.168.0.2 scope global lo
       valid_lft forever preferred_lft forever
    inet6 3000::22/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:73:55:cd brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.2/30 brd 172.16.0.3 scope global enp1s0
       valid_lft forever preferred_lft forever
    inet 192.168.123.2/24 scope global enp1s0
       valid_lft forever preferred_lft forever
3: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:ea:64:6e brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.5/30 brd 172.16.0.7 scope global enp5s0
       valid_lft forever preferred_lft forever
4: enp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:d7:a1:de brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.13/30 brd 172.16.0.15 scope global enp6s0
       valid_lft forever preferred_lft forever
root@mpls2:~# cat /etc/frr/frr.conf
frr version 7.3.1
frr defaults traditional
hostname mpls2
log file /var/log/frr/ospfd.log
log syslog informational
service integrated-vtysh-config
!
interface enp1s0
 ip address 172.16.0.2/30
 ip ospf area 0.0.0.0
!
interface enp5s0
 ip address 172.16.0.5/30
 ip ospf area 0.0.0.0
!
interface enp6s0
 ip address 172.16.0.13/30
 ip ospf area 0.0.0.0
!
interface lo
 ip address 192.168.0.2/32
 ip ospf area 0.0.0.0
!
router ospf
 ospf router-id 192.168.0.2
 router-info area 0.0.0.0
 passive-interface lo
 capability opaque
 mpls-te on
 mpls-te router-address 192.168.0.2
 segment-routing on
 segment-routing global-block 16000 19999
 segment-routing node-msd 9 -----------可以不改
 segment-routing prefix 192.168.0.2/32 index 1002
!
line vty
!
log file /var/log/frr/frr.log
!
root@mpls2:~# 
sysctl -w  net.ipv4.ip_forward=1
sysctl -w  net.ipv4.conf.all.rp_filter=0
sysctl -w  net.ipv4.conf.lo.rp_filter=0
sysctl -w  net.mpls.conf.enp1s0.input=1
sysctl -w  net.mpls.conf.enp5s0.input=1
sysctl -w  net.mpls.conf.enp6s0.input=1
sysctl -w  net.mpls.conf.lo.input=1
sysctl -w  net.mpls.platform_labels=1048575

 mpls3 配置 

root@mpls3:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.3/32 brd 192.168.0.3 scope global lo
       valid_lft forever preferred_lft forever
    inet6 3000::33/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:5a:42:f2 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.6/30 brd 172.16.0.7 scope global enp1s0
       valid_lft forever preferred_lft forever
    inet 192.168.124.2/24 scope global enp1s0
       valid_lft forever preferred_lft forever
    inet 192.168.122.35/24 brd 192.168.122.255 scope global dynamic enp1s0
       valid_lft 3073sec preferred_lft 3073sec
3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:98:81:e8 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.17/30 brd 172.16.0.19 scope global enp7s0
       valid_lft forever preferred_lft forever
root@mpls3:~# cat mpls_sr.sh 
sysctl -w  net.ipv4.ip_forward=1
sysctl -w  net.ipv4.conf.all.rp_filter=0
sysctl -w  net.ipv4.conf.lo.rp_filter=0
sysctl -w  net.mpls.conf.enp1s0.input=1
sysctl -w  net.mpls.conf.enp7s0.input=1
sysctl -w  net.mpls.conf.lo.input=1
sysctl -w  net.mpls.platform_labels=1048575
root@mpls3:~# 
root@mpls3:~# cat /etc/frr/frr.conf
frr version 7.3.1
frr defaults traditional
hostname mpls3
log file /var/log/frr/ospfd.log
log syslog informational
service integrated-vtysh-config
!
interface enp1s0
 ip address 172.16.0.6/30
 ip ospf area 0.0.0.0
!
interface enp7s0
 ip address 172.16.0.17/30
 ip ospf area 0.0.0.0
!
interface lo
 ip address 192.168.0.3/32
 ip ospf area 0.0.0.0
!
router ospf
 ospf router-id 192.168.0.3
 passive-interface lo
 capability opaque
 mpls-te on
 mpls-te router-address 192.168.0.3
 segment-routing on
 segment-routing global-block 16000 19999
 segment-routing node-msd 10
 segment-routing prefix 192.168.0.3/32 index 1003
 router-info area
!
line vty
!
root@mpls3:~# 

 mpls4 配置 

root@mpls4:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.4/32 brd 192.168.0.4 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:07:5e:47 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.10/30 brd 172.16.0.11 scope global enp1s0
       valid_lft forever preferred_lft forever
    inet 192.168.125.2/24 scope global enp1s0
       valid_lft forever preferred_lft forever
3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:2e:96:79 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.14/30 brd 172.16.0.15 scope global enp7s0
       valid_lft forever preferred_lft forever
4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:a1:92:7d brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.18/30 brd 172.16.0.19 scope global enp8s0
       valid_lft forever preferred_lft forever
root@mpls4:~# cat /etc/frr/frr.conf 
# default to using syslog. /etc/rsyslog.d/45-frr.conf places the log
# in /var/log/frr/frr.log

frr version 7.3.1
frr defaults traditional
hostname mpls3
log file /var/log/frr/ospfd.log
log syslog informational
service integrated-vtysh-config
!
interface enp1s0
 ip address 172.16.0.10/30
 ip ospf area 0.0.0.0
!
interface enp7s0
 ip address 172.16.0.14/30
 ip ospf area 0.0.0.0
!
interface enp8s0
 ip address 172.16.0.18/30
 ip ospf area 0.0.0.0
!
interface lo
 ip address 192.168.0.4/32
 ip ospf area 0.0.0.0
!
router ospf
 ospf router-id 192.168.0.4
 passive-interface lo
 capability opaque
 mpls-te on
 mpls-te router-address 192.168.0.4
 segment-routing on
 segment-routing global-block 16000 19999
 segment-routing node-msd 11
 segment-routing prefix 192.168.0.4/32 index 1004
 router-info area
!
line vty
!
root@mpls4:~# 
root@mpls4:~# cat mpls_sr.sh 
sysctl -w  net.ipv4.ip_forward=1
sysctl -w  net.ipv4.conf.all.rp_filter=0
sysctl -w  net.ipv4.conf.lo.rp_filter=0
sysctl -w  net.mpls.conf.enp1s0.input=1
sysctl -w  net.mpls.conf.enp7s0.input=1
sysctl -w  net.mpls.conf.enp8s0.input=1
sysctl -w  net.mpls.conf.lo.input=1
sysctl -w  net.mpls.platform_labels=1048575
root@mpls4:~# 

 

mpls1# sh ip ospf database  segment-routing 

                OSPF Segment Routing database for ID 192.168.0.1

SR-Node: 192.168.0.4    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 11

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.4/32     17004        pop      SR Pfx (idx 1004)     enp8s0      172.16.0.10

SR-Node: 192.168.0.2    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 9

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.2/32     17002        pop      SR Pfx (idx 1002)     enp7s0       172.16.0.2

SR-Node: 192.168.0.1    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 8

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.1/32         0          0      SR Pfx (idx 1001)         lo      192.168.0.1
     172.16.0.1/32     50001        pop    SR Adj. (lbl 50001)     enp7s0       172.16.0.2
     172.16.0.1/32     50000        pop    SR Adj. (lbl 50000)     enp7s0       172.16.0.2
     172.16.0.9/32     50003        pop    SR Adj. (lbl 50003)     enp8s0      172.16.0.10
     172.16.0.9/32     50002        pop    SR Adj. (lbl 50002)     enp8s0      172.16.0.10

SR-Node: 192.168.0.3    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 10

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.3/32     17003      17003      SR Pfx (idx 1003)     enp7s0       172.16.0.2 --------------mpls

mpls1# sh mpls table
 Inbound Label  Type       Nexthop          Outbound Label  
 -----------------------------------------------------------
 16             LDP        2000:2001::1002  implicit-null   
 17             LDP        172.16.0.2       implicit-null   
 18             LDP        172.16.0.2       implicit-null   
 18             LDP        172.16.0.10      implicit-null   
 19             LDP        172.16.0.10      implicit-null   
 20             LDP        172.16.0.2       implicit-null   
 21             LDP        172.16.0.2       implicit-null   
 22             LDP        172.16.0.10      implicit-null   
 23             LDP        172.16.0.2       implicit-null   
 24             LDP        172.16.0.2       implicit-null   
 24             LDP        172.16.0.10      implicit-null   
 25             LDP        172.16.0.10      implicit-null   
 17002          SR (OSPF)  172.16.0.2       implicit-null   
 17003          SR (OSPF)  172.16.0.2       17003           
 17004          SR (OSPF)  172.16.0.10      implicit-null   
 50000          SR (OSPF)  172.16.0.2       implicit-null   
 50001          SR (OSPF)  172.16.0.2       implicit-null   
 50002          SR (OSPF)  172.16.0.10      implicit-null   
 50003          SR (OSPF)  172.16.0.10      implicit-null   

mpls1# 

mpls1

 ip route add 192.168.0.3/32 encap mpls 17004/17003 via 172.16.0.2 ------------------没有17002
mpls1# sh mpls table
 Inbound Label  Type       Nexthop          Outbound Label  
 -----------------------------------------------------------
 16             LDP        2000:2001::1002  implicit-null   
 17             LDP        172.16.0.2       implicit-null   
 18             LDP        172.16.0.2       implicit-null   
 18             LDP        172.16.0.10      implicit-null   
 19             LDP        172.16.0.10      implicit-null   
 20             LDP        172.16.0.2       implicit-null   
 21             LDP        172.16.0.2       implicit-null   
 22             LDP        172.16.0.10      implicit-null   
 23             LDP        172.16.0.2       implicit-null   
 24             LDP        172.16.0.2       implicit-null   
 24             LDP        172.16.0.10      implicit-null   
 25             LDP        172.16.0.10      implicit-null   
 17002          SR (OSPF)  172.16.0.2       implicit-null   
 17003          SR (OSPF)  172.16.0.2       17003           
 17004          SR (OSPF)  172.16.0.10      implicit-null   --------------- encap 17004/17003  via 172.16.0.2 不会走172.16.0.10直接走172.16.0.10
 50000          SR (OSPF)  172.16.0.2       implicit-null   
 50001          SR (OSPF)  172.16.0.2       implicit-null   
 50002          SR (OSPF)  172.16.0.10      implicit-null   
 50003          SR (OSPF)  172.16.0.10      implicit-null   

mpls1# sh ip ospf route
============ OSPF network routing table ============
N    172.16.0.0/30         [1] area: 0.0.0.0
                           directly attached to enp7s0
N    172.16.0.4/30         [2] area: 0.0.0.0
                           via 172.16.0.2, enp7s0
N    172.16.0.8/30         [1] area: 0.0.0.0
                           directly attached to enp8s0
N    172.16.0.12/30        [2] area: 0.0.0.0
                           via 172.16.0.2, enp7s0
                           via 172.16.0.10, enp8s0
N    172.16.0.16/30        [2] area: 0.0.0.0
                           via 172.16.0.10, enp8s0
N    192.168.0.1/32        [0] area: 0.0.0.0
                           directly attached to lo
N    192.168.0.2/32        [1] area: 0.0.0.0
                           via 172.16.0.2, enp7s0
N    192.168.0.3/32        [2] area: 0.0.0.0
                           via 172.16.0.2, enp7s0   -------------mpls2
                           via 172.16.0.10, enp8s0  ------------mpls4              
N    192.168.0.4/32        [1] area: 0.0.0.0
                           via 172.16.0.10, enp8s0
N    192.168.122.0/24      [3] area: 0.0.0.0
                           via 172.16.0.2, enp7s0
                           via 172.16.0.10, enp8s0
N    192.168.123.0/24      [2] area: 0.0.0.0
                           via 172.16.0.2, enp7s0
N    192.168.124.0/24      [3] area: 0.0.0.0
                           via 172.16.0.2, enp7s0
                           via 172.16.0.10, enp8s0
N    192.168.125.0/24      [2] area: 0.0.0.0
                           via 172.16.0.10, enp8s0

============ OSPF router routing table =============

============ OSPF external routing table ===========


mpls1# 
root@mpls1:~# ip r
172.16.0.0/30 dev enp7s0 proto kernel scope link src 172.16.0.1 
172.16.0.4/30 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
172.16.0.8/30 dev enp8s0 proto kernel scope link src 172.16.0.9 
172.16.0.12/30 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
172.16.0.16/30 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
192.168.0.2 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
192.168.0.3 proto ospf metric 20 
        nexthop  encap mpls  17003 via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
192.168.0.4 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
192.168.122.0/24 dev enp1s0 proto kernel scope link src 192.168.122.2 
192.168.123.0/24 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
192.168.124.0/24 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
192.168.125.0/24 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
root@mpls1:~# ip -M  r
17 via inet 172.16.0.2 dev enp7s0 proto ldp 
18 proto ldp 
        nexthop via inet 172.16.0.10 dev enp8s0 
        nexthop via inet 172.16.0.2 dev enp7s0 
19 via inet 172.16.0.10 dev enp8s0 proto ldp 
20 via inet 172.16.0.2 dev enp7s0 proto ldp 
21 proto ldp 
        nexthop via inet 172.16.0.2 dev enp7s0 
        nexthop via inet 172.16.0.10 dev enp8s0 
22 via inet 172.16.0.10 dev enp8s0 proto ldp 
23 via inet 172.16.0.2 dev enp7s0 proto ldp 
24 proto ldp 
        nexthop via inet 172.16.0.10 dev enp8s0 
        nexthop via inet 172.16.0.2 dev enp7s0 
25 via inet 172.16.0.10 dev enp8s0 proto ldp 
17002 via inet 172.16.0.2 dev enp7s0 proto ospf 
17003 as to 17003 via inet 172.16.0.2 dev enp7s0 proto ospf 
17004 via inet 172.16.0.10 dev enp8s0 proto ospf 
50000 via inet 172.16.0.10 dev enp8s0 proto ospf 
50001 via inet 172.16.0.10 dev enp8s0 proto ospf 
50002 via inet 172.16.0.2 dev enp7s0 proto ospf 
50003 via inet 172.16.0.2 dev enp7s0 proto ospf 
50008 via inet 172.16.0.10 dev enp8s0 proto ospf 
50009 via inet 172.16.0.10 dev enp8s0 proto ospf 
root@mpls1:~# 

mpls3

ip route add 192.168.0.1/32 encap mpls 17002/17001 via 172.16.0.18
root@mpls3:~# ip r
default via 192.168.122.1 dev enp1s0 proto dhcp src 192.168.122.35 metric 100 
172.16.0.0/30 via 172.16.0.5 dev enp1s0 proto ospf metric 20 
172.16.0.4/30 dev enp1s0 proto kernel scope link src 172.16.0.6 
172.16.0.8/30 via 172.16.0.18 dev enp7s0 proto ospf metric 20 
172.16.0.12/30 proto ospf metric 20 
        nexthop via 172.16.0.5 dev enp1s0 weight 1 
        nexthop via 172.16.0.18 dev enp7s0 weight 1 
172.16.0.16/30 dev enp7s0 proto kernel scope link src 172.16.0.17 
192.168.0.1  encap mpls  17002/17001 via 172.16.0.18 dev enp7s0  ----------------------
192.168.0.2 via 172.16.0.5 dev enp1s0 proto ospf metric 20 
192.168.0.4 via 172.16.0.18 dev enp7s0 proto ospf metric 20 
192.168.122.0/24 dev enp1s0 proto kernel scope link src 192.168.122.35 
192.168.122.1 dev enp1s0 proto dhcp scope link src 192.168.122.35 metric 100 
192.168.123.0/24 via 172.16.0.5 dev enp1s0 proto ospf metric 20 
192.168.124.0/24 dev enp1s0 proto kernel scope link src 192.168.124.2 
192.168.125.0/24 via 172.16.0.18 dev enp7s0 proto ospf metric 20 
root@mpls3:~# ip -M  r
17 via inet 172.16.0.5 dev enp1s0 proto ldp 
18 via inet 172.16.0.18 dev enp7s0 proto ldp 
19 proto ldp 
        nexthop via inet 172.16.0.18 dev enp7s0 
        nexthop via inet 172.16.0.5 dev enp1s0 
20 via inet 172.16.0.18 dev enp7s0 proto ldp 
21 via inet 172.16.0.5 dev enp1s0 proto ldp 
22 via inet 172.16.0.18 dev enp7s0 proto ldp 
23 via inet 172.16.0.5 dev enp1s0 proto ldp 
24 via inet 172.16.0.18 dev enp7s0 proto ldp 
17001 as to 17001 via inet 172.16.0.5 dev enp1s0 proto ospf 
17002 via inet 172.16.0.5 dev enp1s0 proto ospf 
17004 via inet 172.16.0.18 dev enp7s0 proto ospf 
50000 via inet 172.16.0.18 dev enp7s0 proto ospf 
50001 via inet 172.16.0.18 dev enp7s0 proto ospf 
50002 via inet 172.16.0.5 dev enp1s0 proto ospf 
50003 via inet 172.16.0.5 dev enp1s0 proto ospf 
50004 via inet 192.168.122.164 dev enp1s0 proto ospf 
50005 via inet 192.168.122.164 dev enp1s0 proto ospf 
50006 via inet 172.16.0.18 dev enp7s0 proto ospf 
50007 via inet 172.16.0.18 dev enp7s0 proto ospf 
root@mpls3:~# 

mpls1 ping

root@mpls1:~# ping 192.168.0.3 -I 192.168.0.1
PING 192.168.0.3 (192.168.0.3) from 192.168.0.1 : 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=63 time=0.328 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=63 time=0.287 ms
64 bytes from 192.168.0.3: icmp_seq=3 ttl=63 time=0.239 ms
64 bytes from 192.168.0.3: icmp_seq=4 ttl=63 time=0.282 ms
^C
--- 192.168.0.3 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3057ms
rtt min/avg/max/mdev = 0.239/0.284/0.328/0.031 ms
root@mpls1:~# 

root@mpls1:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.0.1/32 brd 192.168.0.1 scope global lo
valid_lft forever preferred_lft forever
inet6 3000::11/128 scope global
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:e5:30:19 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.2/24 scope global enp1s0
valid_lft forever preferred_lft forever
3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:d9:52:82 brd ff:ff:ff:ff:ff:ff
inet 172.16.0.1/30 brd 172.16.0.3 scope global enp7s0
valid_lft forever preferred_lft forever
4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:ff:18:f4 brd ff:ff:ff:ff:ff:ff
inet 172.16.0.9/30 brd 172.16.0.11 scope global enp8s0
valid_lft forever preferred_lft forever


root@mpls1:~# tcpdump -i enp7s0 "mpls 17004 && mpls 17003" -env -------------------------mpls封装
tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:17:30.004653 52:54:00:d9:52:82 > 52:54:00:73:55:cd, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17004, exp 0, ttl 64)
(label 17003, exp 0, [S], ttl 64)
(tos 0x0, ttl 64, id 23238, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.1 > 192.168.0.3: ICMP echo request, id 16251, seq 29, length 64
14:17:31.024645 52:54:00:d9:52:82 > 52:54:00:73:55:cd, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17004, exp 0, ttl 64)
(label 17003, exp 0, [S], ttl 64)
(tos 0x0, ttl 64, id 23300, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.1 > 192.168.0.3: ICMP echo request, id 16251, seq 30, length 64
14:17:32.048636 52:54:00:d9:52:82 > 52:54:00:73:55:cd, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17004, exp 0, ttl 64)
(label 17003, exp 0, [S], ttl 64)
(tos 0x0, ttl 64, id 23378, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.1 > 192.168.0.3: ICMP echo request, id 16251, seq 31, length 64
14:17:33.072636 52:54:00:d9:52:82 > 52:54:00:73:55:cd, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17004, exp 0, ttl 64)
(label 17003, exp 0, [S], ttl 64)
(tos 0x0, ttl 64, id 23396, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.1 > 192.168.0.3: ICMP echo request, id 16251, seq 32, length 64
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel
root@mpls1:~#





root@mpls2:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.0.2/32 brd 192.168.0.2 scope global lo
valid_lft forever preferred_lft forever
inet6 3000::22/128 scope global
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:73:55:cd brd ff:ff:ff:ff:ff:ff
inet 172.16.0.2/30 brd 172.16.0.3 scope global enp1s0
valid_lft forever preferred_lft forever
inet 192.168.123.2/24 scope global enp1s0
valid_lft forever preferred_lft forever
3: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:ea:64:6e brd ff:ff:ff:ff:ff:ff
inet 172.16.0.5/30 brd 172.16.0.7 scope global enp5s0
valid_lft forever preferred_lft forever
4: enp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:d7:a1:de brd ff:ff:ff:ff:ff:ff
inet 172.16.0.13/30 brd 172.16.0.15 scope global enp6s0
valid_lft forever preferred_lft forever

root@mpls2:~# tcpdump -i enp1s0  "mpls 17004 && mpls 17003" -env
tcpdump: listening on enp1s0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:15:10.690940 52:54:00:d9:52:82 > 52:54:00:73:55:cd, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17004, exp 0, ttl 64)
        (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 16498, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16110, seq 1, length 64
14:15:11.700321 52:54:00:d9:52:82 > 52:54:00:73:55:cd, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17004, exp 0, ttl 64)
        (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 16712, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16110, seq 2, length 64
14:15:12.724323 52:54:00:d9:52:82 > 52:54:00:73:55:cd, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17004, exp 0, ttl 64)
        (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 16837, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16110, seq 3, length 64
14:15:13.748338 52:54:00:d9:52:82 > 52:54:00:73:55:cd, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17004, exp 0, ttl 64)
        (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 16988, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16110, seq 4, length 64
root@mpls2:~# tcpdump -i enp1s0  "mpls 17004 && mpls 17003" -env                     
tcpdump: listening on enp1s0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:35:07.860349 52:54:00:d9:52:82 > 52:54:00:73:55:cd, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17004, exp 0, ttl 64)
        (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 30618, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16265, seq 297, length 64
14:35:09.876353 52:54:00:d9:52:82 > 52:54:00:73:55:cd, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17004, exp 0, ttl 64)
        (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 30955, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16265, seq 298, length 64
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel
root@mpls2:~# tcpdump -i enp6s0  "mpls 17004 && mpls 17003" -env
tcpdump: listening on enp6s0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
root@mpls2:~# tcpdump -i enp6s0  "17003" -env
tcpdump: syntax error in filter expression: syntax error
root@mpls2:~# tcpdump -i enp6s0  "mpls 17003" -env ---------------剥掉了17004
tcpdump: listening on enp6s0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:35:50.196369 52:54:00:d7:a1:de > 52:54:00:2e:96:79, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 35694, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16265, seq 318, length 64
14:35:52.212345 52:54:00:d7:a1:de > 52:54:00:2e:96:79, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 35904, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16265, seq 319, length 64
14:35:54.228351 52:54:00:d7:a1:de > 52:54:00:2e:96:79, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 35931, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16265, seq 320, length 64
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
root@mpls2:~# 
root@mpls4:~# tcpdump -i enp7s0  "mpls 17004 && mpls 17003" -env
tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel

 从enp6s0进入然后从enp7s0 输出

root@mpls4:~# tcpdump -i enp7s0  "mpls 17004" -env
tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
root@mpls4:~# tcpdump -i enp7s0  "mpls 17003" -env
tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:26:08.009678 52:54:00:d7:a1:de > 52:54:00:2e:96:79, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64) --------剥掉了一层mpls17004
        (tos 0x0, ttl 64, id 24550, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16265, seq 25, length 64
14:26:10.025675 52:54:00:d7:a1:de > 52:54:00:2e:96:79, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 24710, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16265, seq 26, length 64
14:26:12.041695 52:54:00:d7:a1:de > 52:54:00:2e:96:79, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 25132, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16265, seq 27, length 64
14:26:14.057734 52:54:00:d7:a1:de > 52:54:00:2e:96:79, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 25350, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16265, seq 28, length 64
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel
root@mpls4:~#
mpls2# sh mpls table
 Inbound Label  Type       Nexthop          Outbound Label  
 -----------------------------------------------------------
 16             LDP        2000:2002::1004  implicit-null   
 17             LDP        172.16.0.1       implicit-null   
 17             LDP        172.16.0.14      implicit-null   
 18             LDP        172.16.0.14      implicit-null   
 18             LDP        172.16.0.6       implicit-null   
 19             LDP        172.16.0.1       implicit-null   
 20             LDP        172.16.0.6       implicit-null   
 21             LDP        172.16.0.14      implicit-null   
 22             LDP        172.16.0.6       implicit-null   
 23             LDP        172.16.0.6       implicit-null   
 24             LDP        172.16.0.14      implicit-null   
 17001          SR (OSPF)  172.16.0.1       implicit-null   
 17003          SR (OSPF)  172.16.0.6       implicit-null   
 17004          SR (OSPF)  172.16.0.14      implicit-null    ---------------剥掉mpls 17004然后转发给172.0.14
 50000          SR (OSPF)  172.16.0.6       implicit-null   
 50001          SR (OSPF)  172.16.0.6       implicit-null   
 50002          SR (OSPF)  172.16.0.14      implicit-null   
 50003          SR (OSPF)  172.16.0.14      implicit-null   
 50004          SR (OSPF)  172.16.0.1       implicit-null   
 50005          SR (OSPF)  172.16.0.1       implicit-null   

mpls2# 
root@mpls4:~# tcpdump -i enp8s0  icmp -env
tcpdump: listening on enp8s0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:27:44.778279 52:54:00:a1:92:7d > 52:54:00:98:81:e8, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 63, id 37628, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16265, seq 73, length 64
14:27:46.794238 52:54:00:a1:92:7d > 52:54:00:98:81:e8, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 63, id 37914, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16265, seq 74, length 64
14:27:48.810252 52:54:00:a1:92:7d > 52:54:00:98:81:e8, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 63, id 38184, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 16265, seq 75, length 64
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
root@mpls4:~# tcpdump -i enp8s0  "mpls 17003" -env --------------报文从mpl4 的 enp7s0进入,剥掉mpls17003然后从enp8s0输出
 tcpdump: listening on enp8s0, link-type EN10MB (Ethernet), capture size 262144 bytes ^C 0 packets captured 0 packets received by filter 0 packets dropped by kernel root@mpls4:~#
root@mpls4:~# ip -M r
16 proto ldp 
        nexthop via inet 172.16.0.9 dev enp1s0 
        nexthop via inet 172.16.0.13 dev enp7s0 
17 proto ldp 
        nexthop via inet 172.16.0.17 dev enp8s0 
        nexthop via inet 172.16.0.13 dev enp7s0 
18 via inet 172.16.0.9 dev enp1s0 proto ldp 
19 via inet 172.16.0.13 dev enp7s0 proto ldp 
20 via inet 172.16.0.17 dev enp8s0 proto ldp 
21 via inet 172.16.0.13 dev enp7s0 proto ldp 
22 via inet 172.16.0.17 dev enp8s0 proto ldp 
23 via inet 172.16.0.17 dev enp8s0 proto ldp 
17001 via inet 172.16.0.9 dev enp1s0 proto ospf 
17002 via inet 172.16.0.13 dev enp7s0 proto ospf 
17003 via inet 172.16.0.17 dev enp8s0 proto ospf 
50000 via inet 172.16.0.13 dev enp7s0 proto ospf 
50001 via inet 172.16.0.13 dev enp7s0 proto ospf 
50002 via inet 172.16.0.9 dev enp1s0 proto ospf 
50003 via inet 172.16.0.9 dev enp1s0 proto ospf 
50004 via inet 172.16.0.17 dev enp8s0 proto ospf 
50005 via inet 172.16.0.17 dev enp8s0 proto ospf 
50006 via inet 172.16.0.17 dev enp8s0 proto ospf 
50007 via inet 172.16.0.17 dev enp8s0 proto ospf
mpls4# show ip ospf database segment-routing

                OSPF Segment Routing database for ID 192.168.0.4

SR-Node: 192.168.0.4    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 11

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.4/32         0          0      SR Pfx (idx 1004)         lo      192.168.0.4
    172.16.0.14/32     50001        pop    SR Adj. (lbl 50001)     enp7s0      172.16.0.13
    172.16.0.14/32     50000        pop    SR Adj. (lbl 50000)     enp7s0      172.16.0.13
    172.16.0.10/32     50003        pop    SR Adj. (lbl 50003)     enp1s0       172.16.0.9
    172.16.0.10/32     50002        pop    SR Adj. (lbl 50002)     enp1s0       172.16.0.9
    172.16.0.18/32     50005        pop    SR Adj. (lbl 50005)     enp8s0      172.16.0.17
    172.16.0.18/32     50004        pop    SR Adj. (lbl 50004)     enp8s0      172.16.0.17

SR-Node: 192.168.0.2    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 9

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.2/32     17002        pop      SR Pfx (idx 1002)     enp7s0      172.16.0.13

SR-Node: 192.168.0.1    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 8

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.1/32     17001        pop      SR Pfx (idx 1001)     enp1s0       172.16.0.9

SR-Node: 192.168.0.3    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 10

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.3/32     17003        pop      SR Pfx (idx 1003)     enp8s0      172.16.0.17

mpls4# show mpls table
 Inbound Label  Type       Nexthop      Outbound Label  
 -------------------------------------------------------
 16             LDP        172.16.0.13  implicit-null   
 16             LDP        172.16.0.9   implicit-null   
 17             LDP        172.16.0.13  implicit-null   
 17             LDP        172.16.0.17  implicit-null   
 18             LDP        172.16.0.9   implicit-null   
 19             LDP        172.16.0.13  implicit-null   
 20             LDP        172.16.0.17  implicit-null   
 21             LDP        172.16.0.13  implicit-null   
 22             LDP        172.16.0.17  implicit-null   
 23             LDP        172.16.0.17  implicit-null   
 17001          SR (OSPF)  172.16.0.9   implicit-null   
 17002          SR (OSPF)  172.16.0.13  implicit-null   
 17003          SR (OSPF)  172.16.0.17  implicit-null  ---------------------- 剥掉mpls 17003  
 50000          SR (OSPF)  172.16.0.13  implicit-null   
 50001          SR (OSPF)  172.16.0.13  implicit-null   
 50002          SR (OSPF)  172.16.0.9   implicit-null   
 50003          SR (OSPF)  172.16.0.9   implicit-null   
 50004          SR (OSPF)  172.16.0.17  implicit-null   
 50005          SR (OSPF)  172.16.0.17  implicit-null   

mpls4# 

mpls3的reply报文

root@mpls3:~# tcpdump -i enp7s0 'mpls 17002&&mpls 17001' -env   -------------封装两层mpls
tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:16:58.384963 52:54:00:98:81:e8 > 52:54:00:a1:92:7d, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17002, exp 0, ttl 64)
        (label 17001, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 2766, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.0.3 > 192.168.0.1: ICMP echo reply, id 16633, seq 38, length 64
15:17:00.400964 52:54:00:98:81:e8 > 52:54:00:a1:92:7d, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17002, exp 0, ttl 64)
        (label 17001, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 3044, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.0.3 > 192.168.0.1: ICMP echo reply, id 16633, seq 39, length 64
15:17:02.416999 52:54:00:98:81:e8 > 52:54:00:a1:92:7d, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17002, exp 0, ttl 64)
        (label 17001, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 3261, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.0.3 > 192.168.0.1: ICMP echo reply, id 16633, seq 40, length 64
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
root@mpls3:~# 
3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:2e:96:79 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.14/30 brd 172.16.0.15 scope global enp7s0
       valid_lft forever preferred_lft forever
4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:a1:92:7d brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.18/30 brd 172.16.0.19 scope global enp8s0
       valid_lft forever preferred_lft forever
root@mpls4:~# tcpdump -i enp8s0 'mpls 17002&&mpls 17001' -env             --------------输入
tcpdump: listening on enp8s0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:18:23.803797 52:54:00:98:81:e8 > 52:54:00:a1:92:7d, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17002, exp 0, ttl 64)
        (label 17001, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 13186, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.0.3 > 192.168.0.1: ICMP echo reply, id 16633, seq 76, length 64
15:18:25.819798 52:54:00:98:81:e8 > 52:54:00:a1:92:7d, ethertype MPLS unicast (0x8847), length 106: MPLS (label 17002, exp 0, ttl 64)
        (label 17001, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 13612, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.0.3 > 192.168.0.1: ICMP echo reply, id 16633, seq 77, length 64
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel
root@mpls4:~# ip -M r
16 proto ldp 
        nexthop via inet 172.16.0.13 dev enp7s0 
        nexthop via inet 172.16.0.9 dev enp1s0 
17 proto ldp 
        nexthop via inet 172.16.0.13 dev enp7s0 
        nexthop via inet 172.16.0.17 dev enp8s0 
18 via inet 172.16.0.9 dev enp1s0 proto ldp 
19 via inet 172.16.0.13 dev enp7s0 proto ldp 
20 via inet 172.16.0.17 dev enp8s0 proto ldp 
21 via inet 172.16.0.13 dev enp7s0 proto ldp 
22 via inet 172.16.0.17 dev enp8s0 proto ldp 
23 via inet 172.16.0.17 dev enp8s0 proto ldp 
17001 via inet 172.16.0.9 dev enp1s0 proto ospf 
17002 via inet 172.16.0.13 dev enp7s0 proto ospf 
17003 via inet 172.16.0.17 dev enp8s0 proto ospf 
50000 via inet 172.16.0.13 dev enp7s0 proto ospf 
50001 via inet 172.16.0.13 dev enp7s0 proto ospf 
50002 via inet 172.16.0.9 dev enp1s0 proto ospf 
50003 via inet 172.16.0.9 dev enp1s0 proto ospf 
50004 via inet 172.16.0.17 dev enp8s0 proto ospf 
50005 via inet 172.16.0.17 dev enp8s0 proto ospf 
50006 via inet 172.16.0.17 dev enp8s0 proto ospf 
50007 via inet 172.16.0.17 dev enp8s0 proto ospf 
root@mpls4:~# tcpdump -i enp7s0 'mpls 17001' -env ----------------剥掉170002,输出
tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:18:52.027962 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17001, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 16320, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.0.3 > 192.168.0.1: ICMP echo reply, id 16633, seq 90, length 64
15:18:54.043898 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17001, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 16620, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.0.3 > 192.168.0.1: ICMP echo reply, id 16633, seq 91, length 64
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel
root@mpls4:~# 
mpls4# show mpls table
 Inbound Label  Type       Nexthop      Outbound Label  
 -------------------------------------------------------
 16             LDP        172.16.0.9   implicit-null   
 16             LDP        172.16.0.13  implicit-null   
 17             LDP        172.16.0.17  implicit-null   
 17             LDP        172.16.0.13  implicit-null   
 18             LDP        172.16.0.9   implicit-null   
 19             LDP        172.16.0.13  implicit-null   
 20             LDP        172.16.0.17  implicit-null   
 21             LDP        172.16.0.13  implicit-null   
 22             LDP        172.16.0.17  implicit-null   
 23             LDP        172.16.0.17  implicit-null   
 17001          SR (OSPF)  172.16.0.9   implicit-null   
 17002          SR (OSPF)  172.16.0.13  implicit-null   
 17003          SR (OSPF)  172.16.0.17  implicit-null   
 50000          SR (OSPF)  172.16.0.13  implicit-null   
 50001          SR (OSPF)  172.16.0.13  implicit-null   
 50002          SR (OSPF)  172.16.0.9   implicit-null   
 50003          SR (OSPF)  172.16.0.9   implicit-null   
 50004          SR (OSPF)  172.16.0.17  implicit-null   
 50005          SR (OSPF)  172.16.0.17  implicit-null   

mpls4# 
4: enp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:d7:a1:de brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.13/30 brd 172.16.0.15 scope global enp6s0
       valid_lft forever preferred_lft forever
root@mpls2:~# tcpdump -i enp6s0  "mpls 17002" -env
tcpdump: listening on enp6s0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
root@mpls2:~# tcpdump -i enp6s0  "mpls 17001" -env           
tcpdump: listening on enp6s0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:21:30.836497 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17001, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 38056, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.0.3 > 192.168.0.1: ICMP echo reply, id 16633, seq 173, length 64
15:21:32.852499 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17001, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 38109, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.0.3 > 192.168.0.1: ICMP echo reply, id 16633, seq 174, length 64
15:21:34.868527 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17001, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 38491, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.0.3 > 192.168.0.1: ICMP echo reply, id 16633, seq 175, length 64
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
root@mpls2:~# 
root@mpls2:~# ip -M r
17 proto ldp 
        nexthop via inet 172.16.0.14 dev enp6s0 
        nexthop via inet 172.16.0.1 dev enp1s0 
18 proto ldp 
        nexthop via inet 172.16.0.6 dev enp5s0 
        nexthop via inet 172.16.0.14 dev enp6s0 
19 via inet 172.16.0.1 dev enp1s0 proto ldp 
20 via inet 172.16.0.6 dev enp5s0 proto ldp 
21 via inet 172.16.0.14 dev enp6s0 proto ldp 
22 via inet 172.16.0.6 dev enp5s0 proto ldp 
23 via inet 172.16.0.6 dev enp5s0 proto ldp 
24 via inet 172.16.0.14 dev enp6s0 proto ldp 
17001 via inet 172.16.0.1 dev enp1s0 proto ospf -------------剥掉从enp1s0发出
17003 via inet 172.16.0.6 dev enp5s0 proto ospf 
17004 via inet 172.16.0.14 dev enp6s0 proto ospf 
50000 via inet 172.16.0.6 dev enp5s0 proto ospf 
50001 via inet 172.16.0.6 dev enp5s0 proto ospf 
50002 via inet 172.16.0.14 dev enp6s0 proto ospf 
50003 via inet 172.16.0.14 dev enp6s0 proto ospf 
50004 via inet 172.16.0.1 dev enp1s0 proto ospf 
50005 via inet 172.16.0.1 dev enp1s0 proto ospf 
50008 via inet 172.16.0.6 dev enp5s0 proto ospf 
50009 via inet 172.16.0.6 dev enp5s0 proto ospf
root@mpls2:~# tcpdump -i enp1s0 icmp   -env
tcpdump: listening on enp1s0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:22:41.396545 52:54:00:73:55:cd > 52:54:00:d9:52:82, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 63, id 46239, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.0.3 > 192.168.0.1: ICMP echo reply, id 16633, seq 208, length 64
15:22:43.412512 52:54:00:73:55:cd > 52:54:00:d9:52:82, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 63, id 46705, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.0.3 > 192.168.0.1: ICMP echo reply, id 16633, seq 209, length 64
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel
root@mpls2:~# 
root@mpls2:~# ip r
172.16.0.0/30 dev enp1s0 proto kernel scope link src 172.16.0.2 
172.16.0.4/30 dev enp5s0 proto kernel scope link src 172.16.0.5 
172.16.0.8/30 proto ospf metric 20 
        nexthop via 172.16.0.1 dev enp1s0 weight 1 
        nexthop via 172.16.0.14 dev enp6s0 weight 1 
172.16.0.12/30 dev enp6s0 proto kernel scope link src 172.16.0.13 
172.16.0.16/30 proto ospf metric 20 
        nexthop via 172.16.0.6 dev enp5s0 weight 1 
        nexthop via 172.16.0.14 dev enp6s0 weight 1 
192.168.0.1 via 172.16.0.1 dev enp1s0 proto ospf metric 20 
192.168.0.3 via 172.16.0.6 dev enp5s0 proto ospf metric 20  ----------172.16.0.6是mpls3的ip
192.168.0.4 via 172.16.0.14 dev enp6s0 proto ospf metric 20 
192.168.122.0/24 via 172.16.0.6 dev enp5s0 proto ospf metric 20 
192.168.123.0/24 dev enp1s0 proto kernel scope link src 192.168.123.2 
192.168.124.0/24 via 172.16.0.6 dev enp5s0 proto ospf metric 20 
192.168.125.0/24 via 172.16.0.14 dev enp6s0 proto ospf metric 20 
root@mpls2:~# 

mpls1 删掉ip route del 192.168.0.3/32 encap mpls 17004/17003 via 172.16.0.2

 

root@mpls2:~# tcpdump -i enp1s0  mpls  -env
tcpdump: listening on enp1s0, link-type EN10MB (Ethernet), capture size 262144 bytes
17:27:31.439423 52:54:00:d9:52:82 > 52:54:00:73:55:cd, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 21595, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2011, seq 1, length 64
17:27:33.453747 52:54:00:d9:52:82 > 52:54:00:73:55:cd, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 21693, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2011, seq 2, length 64
17:27:35.469756 52:54:00:d9:52:82 > 52:54:00:73:55:cd, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 22023, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2011, seq 3, length 64
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
root@mpls2:~# ip -M r
17 proto ldp 
        nexthop via inet 172.16.0.14 dev enp6s0 
        nexthop via inet 172.16.0.1 dev enp1s0 
18 proto ldp 
        nexthop via inet 172.16.0.14 dev enp6s0 
        nexthop via inet 172.16.0.6 dev enp5s0 
19 via inet 172.16.0.1 dev enp1s0 proto ldp 
20 via inet 172.16.0.6 dev enp5s0 proto ldp 
21 via inet 172.16.0.14 dev enp6s0 proto ldp 
23 via inet 172.16.0.6 dev enp5s0 proto ldp 
24 via inet 172.16.0.14 dev enp6s0 proto ldp 
17001 via inet 172.16.0.1 dev enp1s0 proto ospf 
17003 via inet 172.16.0.6 dev enp5s0 proto ospf  ------------------直接在mpls3,不经过mpls4
17004 via inet 172.16.0.14 dev enp6s0 proto ospf 
50000 via inet 172.16.0.1 dev enp1s0 proto ospf 
50001 via inet 172.16.0.1 dev enp1s0 proto ospf 
50002 via inet 172.16.0.6 dev enp5s0 proto ospf 
50003 via inet 172.16.0.6 dev enp5s0 proto ospf 
50004 via inet 172.16.0.14 dev enp6s0 proto ospf 
50005 via inet 172.16.0.14 dev enp6s0 proto ospf 
50008 via inet 172.16.0.6 dev enp5s0 proto ospf 
50009 via inet 172.16.0.6 dev enp5s0 proto ospf 
root@mpls2:~# 
mpls2# sh mpls table
 Inbound Label  Type       Nexthop          Outbound Label  
 -----------------------------------------------------------
 16             LDP        2000:2002::1004  implicit-null   
 17             LDP        172.16.0.1       implicit-null   
 17             LDP        172.16.0.14      implicit-null   
 18             LDP        172.16.0.6       implicit-null   
 18             LDP        172.16.0.14      implicit-null   
 19             LDP        172.16.0.1       implicit-null   
 20             LDP        172.16.0.6       implicit-null   
 21             LDP        172.16.0.14      implicit-null   
 23             LDP        172.16.0.6       implicit-null   
 24             LDP        172.16.0.14      implicit-null   
 17001          SR (OSPF)  172.16.0.1       implicit-null   
 17003          SR (OSPF)  172.16.0.6       implicit-null  ----------------剥掉 
 17004          SR (OSPF)  172.16.0.14      implicit-null   
 50000          SR (OSPF)  172.16.0.1       implicit-null   
 50001          SR (OSPF)  172.16.0.1       implicit-null   
 50002          SR (OSPF)  172.16.0.6       implicit-null   
 50003          SR (OSPF)  172.16.0.6       implicit-null   
 50004          SR (OSPF)  172.16.0.14      implicit-null   
 50005          SR (OSPF)  172.16.0.14      implicit-null   

mpls2# 
root@mpls2:~# tcpdump -i enp5s0  icmp  -env ----------剥掉mpls
tcpdump: listening on enp5s0, link-type EN10MB (Ethernet), capture size 262144 bytes
17:30:45.039583 52:54:00:ea:64:6e > 52:54:00:5a:42:f2, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 63, id 41462, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2013, seq 1, length 64
17:30:47.053744 52:54:00:ea:64:6e > 52:54:00:5a:42:f2, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 63, id 41902, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2013, seq 2, length 64
17:30:49.069761 52:54:00:ea:64:6e > 52:54:00:5a:42:f2, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 63, id 42079, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2013, seq 3, length 64
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
root@mpls2:~# 

测试adjacent id

root@mpls1:~# vtysh

Hello, this is FRRouting (version 7.3.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

mpls1# sh ip ospf  database segment-routing 

                OSPF Segment Routing database for ID 192.168.0.1

SR-Node: 192.168.0.4    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 11

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.4/32     17004        pop      SR Pfx (idx 1004)     enp8s0      172.16.0.10

SR-Node: 192.168.0.2    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 9

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.2/32     17002      17002      SR Pfx (idx 1002)     enp8s0      172.16.0.10

SR-Node: 192.168.0.1    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 8

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.1/32         0          0      SR Pfx (idx 1001)         lo      192.168.0.1
     172.16.0.9/32     50001        pop    SR Adj. (lbl 50001)     enp8s0      172.16.0.10
     172.16.0.9/32     50000        pop    SR Adj. (lbl 50000)     enp8s0      172.16.0.10
     172.16.0.1/32     50003        pop    SR Adj. (lbl 50003)     enp7s0       172.16.0.2
     172.16.0.1/32     50002        pop    SR Adj. (lbl 50002)     enp7s0       172.16.0.2

SR-Node: 192.168.0.3    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 10

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.3/32     17003      17003      SR Pfx (idx 1003)     enp8s0      172.16.0.10

mpls1# quit
root@mpls1:~# ip route del 192.168.0.3/32 encap mpls 50003/17004/17003 
Error: unexpected end of line after "encap"
root@mpls1:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.1/32 brd 192.168.0.1 scope global lo
       valid_lft forever preferred_lft forever
    inet6 3000::11/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:e5:30:19 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.199/24 brd 192.168.122.255 scope global enp1s0
       valid_lft forever preferred_lft forever
3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:d9:52:82 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.1/30 brd 172.16.0.3 scope global enp7s0
       valid_lft forever preferred_lft forever
4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:ff:18:f4 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.9/30 brd 172.16.0.11 scope global enp8s0
       valid_lft forever preferred_lft forever
root@mpls1:~# ip route add 192.168.0.3/32 encap mpls 50003/17004/17003 dev enp7s0
root@mpls1:~# ping 192.168.0.3 -I 192.168.0.1
PING 192.168.0.3 (192.168.0.3) from 192.168.0.1 : 56(84) bytes of data.
^C
--- 192.168.0.3 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4098ms

root@mpls1:~# ip route del 192.168.0.3/32 encap mpls 50003/17004/17003 dev enp7s0
root@mpls1:~# ip route add 192.168.0.3/32 encap mpls 50002/17004/17003 dev enp7s0
root@mpls1:~# ping 192.168.0.3 -I 192.168.0.1
PING 192.168.0.3 (192.168.0.3) from 192.168.0.1 : 56(84) bytes of data.
^C
--- 192.168.0.3 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3065ms

root@mpls1:~# 
root@mpls1:~# ip r flush dev enp7s0
root@mpls1:~# ip r flush dev enp8s0
root@mpls1:~# ping 192.168.0.3 -I 192.168.0.1
PING 192.168.0.3 (192.168.0.3) from 192.168.0.1 : 56(84) bytes of data.
ping: sendmsg: Network is unreachable
ping: sendmsg: Network is unreachable
ping: sendmsg: Network is unreachable
^C
--- 192.168.0.3 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2046ms

root@mpls1:~# ip r
172.16.0.12/30 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1  -------------
192.168.122.0/24 dev enp1s0 proto kernel scope link src 192.168.122.2 
192.168.124.0/24 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1  -------------------两跳
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
root@mpls1:~# ping 192.168.124.2
PING 192.168.124.2 (192.168.124.2) 56(84) bytes of data.
64 bytes from 192.168.124.2: icmp_seq=1 ttl=63 time=0.281 ms
64 bytes from 192.168.124.2: icmp_seq=2 ttl=63 time=0.197 ms
^C
--- 192.168.124.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1019ms
rtt min/avg/max/mdev = 0.197/0.239/0.281/0.042 ms
root@mpls1:~# ping 192.168.124.2
root@mpls1:~# ip r
172.16.0.0/30 dev enp7s0 proto kernel scope link src 172.16.0.1 
172.16.0.4/30 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
172.16.0.8/30 dev enp8s0 proto kernel scope link src 172.16.0.9 
172.16.0.12/30 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
172.16.0.16/30 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
192.168.0.2 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
192.168.0.3 proto ospf metric 20 
        nexthop  encap mpls  17003 via 172.16.0.2 dev enp7s0 weight 1 ------------下一跳是mpls2
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
192.168.0.4 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
192.168.122.0/24 dev enp1s0 proto kernel scope link src 192.168.122.2 
192.168.123.0/24 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
192.168.124.0/24 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
192.168.125.0/24 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
root@mpls1:~# ip -M  r
16 via inet 172.16.0.2 dev enp7s0 proto ldp 
17 proto ldp 
        nexthop via inet 172.16.0.10 dev enp8s0 
        nexthop via inet 172.16.0.2 dev enp7s0 
18 via inet 172.16.0.10 dev enp8s0 proto ldp 
19 via inet 172.16.0.2 dev enp7s0 proto ldp 
20 proto ldp 
        nexthop via inet 172.16.0.10 dev enp8s0 
        nexthop via inet 172.16.0.2 dev enp7s0 
21 via inet 172.16.0.10 dev enp8s0 proto ldp 
22 via inet 172.16.0.2 dev enp7s0 proto ldp 
23 proto ldp 
        nexthop via inet 172.16.0.10 dev enp8s0 
        nexthop via inet 172.16.0.2 dev enp7s0 
24 via inet 172.16.0.10 dev enp8s0 proto ldp 
17002 via inet 172.16.0.2 dev enp7s0 proto ospf 
17003 as to 17003 via inet 172.16.0.2 dev enp7s0 proto ospf 
17004 via inet 172.16.0.10 dev enp8s0 proto ospf 
50000 via inet 172.16.0.2 dev enp7s0 proto ospf 
50001 via inet 172.16.0.2 dev enp7s0 proto ospf 
50002 via inet 172.16.0.10 dev enp8s0 proto ospf 
50003 via inet 172.16.0.10 dev enp8s0 proto ospf 
root@mpls1:~# 
root@mpls1:~# ip route add 192.168.0.3/32 encap mpls 50002/17003  dev enp8s0
root@mpls1:~# ping 192.168.0.3 -I 192.168.0.1 -i 2
PING 192.168.0.3 (192.168.0.3) from 192.168.0.1 : 56(84) bytes of data.
^C
--- 192.168.0.3 ping statistics ---
20 packets transmitted, 0 received, 100% packet loss, time 38291ms

root@mpls1:~# ip r
172.16.0.0/30 dev enp7s0 proto kernel scope link src 172.16.0.1 
172.16.0.4/30 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
172.16.0.8/30 dev enp8s0 proto kernel scope link src 172.16.0.9 
172.16.0.12/30 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
172.16.0.16/30 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
192.168.0.2 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
192.168.0.3  encap mpls  50002/17003 dev enp8s0 scope link 
192.168.0.4 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
192.168.122.0/24 dev enp1s0 proto kernel scope link src 192.168.122.2 
192.168.123.0/24 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
192.168.124.0/24 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
192.168.125.0/24 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
root@mpls1:~# 
root@mpls1:~# 
root@mpls1:~# ip route del  192.168.0.3/32 encap mpls 50003/17003  dev enp8s0
root@mpls1:~# ip route add 192.168.0.3/32 encap mpls 50003/17003  via 172.16.0.10
root@mpls1:~# ping 192.168.0.3 -I 192.168.0.1 -i 2     --------------可以了
PING 192.168.0.3 (192.168.0.3) from 192.168.0.1 : 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=63 time=0.286 ms
^C
--- 192.168.0.3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.286/0.286/0.286/0.000 ms
root@mpls1:~# 
root@mpls1:~# ip -M r
16 via inet 172.16.0.2 dev enp7s0 proto ldp 
17 proto ldp 
        nexthop via inet 172.16.0.2 dev enp7s0 
        nexthop via inet 172.16.0.10 dev enp8s0 
18 via inet 172.16.0.10 dev enp8s0 proto ldp 
19 via inet 172.16.0.2 dev enp7s0 proto ldp 
20 via inet 172.16.0.10 dev enp8s0 proto ldp 
21 via inet 172.16.0.10 dev enp8s0 proto ldp 
22 via inet 172.16.0.2 dev enp7s0 proto ldp 
23 proto ldp 
        nexthop via inet 172.16.0.2 dev enp7s0 
        nexthop via inet 172.16.0.10 dev enp8s0 
24 via inet 172.16.0.10 dev enp8s0 proto ldp 
17002 via inet 172.16.0.2 dev enp7s0 proto ospf 
17003 as to 17003 via inet 172.16.0.2 dev enp7s0 proto ospf 
17004 via inet 172.16.0.10 dev enp8s0 proto ospf 
50000 via inet 172.16.0.2 dev enp7s0 proto ospf 
50001 via inet 172.16.0.2 dev enp7s0 proto ospf 
50002 via inet 172.16.0.10 dev enp8s0 proto ospf 
50003 via inet 172.16.0.10 dev enp8s0 proto ospf 
root@mpls1:~# ip  r
172.16.0.0/30 dev enp7s0 proto kernel scope link src 172.16.0.1 
172.16.0.4/30 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
172.16.0.8/30 dev enp8s0 proto kernel scope link src 172.16.0.9 
172.16.0.12/30 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
172.16.0.16/30 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
192.168.0.2 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
192.168.0.3  encap mpls  50003/17003 via 172.16.0.10 dev enp8s0 
192.168.0.4 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
192.168.122.0/24 dev enp1s0 proto kernel scope link src 192.168.122.2 
192.168.123.0/24 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
192.168.124.0/24 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
192.168.125.0/24 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
root@mpls1:~# 

改成50002

root@mpls1:~# ip route del 192.168.0.3/32 encap mpls 50003/17003  via 172.16.0.10
root@mpls1:~# ip route del 192.168.0.3/32 encap mpls 50002/17003  via 172.16.0.10
RTNETLINK answers: No such process
root@mpls1:~# ip route add 192.168.0.3/32 encap mpls 50002/17003  via 172.16.0.10
root@mpls1:~# ping 192.168.0.3 -I 192.168.0.1 -i 2
PING 192.168.0.3 (192.168.0.3) from 192.168.0.1 : 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=63 time=0.337 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=63 time=0.283 ms
^C
--- 192.168.0.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 0.283/0.310/0.337/0.027 ms
root@mpls1:~# 
root@mpls1:~# ip r
172.16.0.0/30 dev enp7s0 proto kernel scope link src 172.16.0.1 
172.16.0.4/30 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
172.16.0.8/30 dev enp8s0 proto kernel scope link src 172.16.0.9 
172.16.0.12/30 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
172.16.0.16/30 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
192.168.0.2 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
192.168.0.3  encap mpls  50002/17003 via 172.16.0.10 dev enp8s0 
192.168.0.4 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
192.168.122.0/24 dev enp1s0 proto kernel scope link src 192.168.122.2 
192.168.123.0/24 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
192.168.124.0/24 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
192.168.125.0/24 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
root@mpls1:~# 
mpls1# sh ip ospf  database segment-routing 

                OSPF Segment Routing database for ID 192.168.0.1

SR-Node: 192.168.0.4    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 11

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.4/32     17004        pop      SR Pfx (idx 1004)     enp8s0      172.16.0.10

SR-Node: 192.168.0.2    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 9

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.2/32     17002        pop      SR Pfx (idx 1002)     enp7s0       172.16.0.2

SR-Node: 192.168.0.1    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 8

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.1/32         0          0      SR Pfx (idx 1001)         lo      192.168.0.1
     172.16.0.1/32     50001        pop    SR Adj. (lbl 50001)     enp7s0       172.16.0.2
     172.16.0.1/32     50000        pop    SR Adj. (lbl 50000)     enp7s0       172.16.0.2
     172.16.0.9/32     50003        pop    SR Adj. (lbl 50003)     enp8s0      172.16.0.10
     172.16.0.9/32     50002        pop    SR Adj. (lbl 50002)     enp8s0      172.16.0.10

SR-Node: 192.168.0.3    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 10

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.3/32     17003      17003      SR Pfx (idx 1003)     enp7s0       172.16.0.2

mpls1# 

mpl4抓包

2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:07:5e:47 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.10/30 brd 172.16.0.11 scope global enp1s0
       valid_lft forever preferred_lft forever
    inet 192.168.125.2/24 scope global enp1s0
       valid_lft forever preferred_lft forever
3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:2e:96:79 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.14/30 brd 172.16.0.15 scope global enp7s0
       valid_lft forever preferred_lft forever
4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:a1:92:7d brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.18/30 brd 172.16.0.19 scope global enp8s0
       valid_lft forever preferred_lft forever
root@mpls4:~# tcpdump -i enp1s0 'mpls 50002 && mpls 17003'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp1s0, link-type EN10MB (Ethernet), capture size 262144 bytes
17:55:54.902140 MPLS (label 50002, exp 0, ttl 64) (label 17003, exp 0, [S], ttl 64) IP 192.168.0.1 > 192.168.0.3: ICMP echo request, id 1854, seq 29, length 64
17:55:56.918140 MPLS (label 50002, exp 0, ttl 64) (label 17003, exp 0, [S], ttl 64) IP 192.168.0.1 > 192.168.0.3: ICMP echo request, id 1854, seq 30, length 64
17:55:58.934157 MPLS (label 50002, exp 0, ttl 64) (label 17003, exp 0, [S], ttl 64) IP 192.168.0.1 > 192.168.0.3: ICMP echo request, id 1854, seq 31, length 64
17:56:00.950164 MPLS (label 50002, exp 0, ttl 64) (label 17003, exp 0, [S], ttl 64) IP 192.168.0.1 > 192.168.0.3: ICMP echo request, id 1854, seq 32, length 64
17:56:02.966170 MPLS (label 50002, exp 0, ttl 64) (label 17003, exp 0, [S], ttl 64) IP 192.168.0.1 > 192.168.0.3: ICMP echo request, id 1854, seq 33, length 64
^C
5 packets captured
5 packets received by filter
0 packets dropped by kernel
root@mpls4:~# 
root@mpls4:~# ip -M r
16 proto ldp 
        nexthop via inet 172.16.0.13 dev enp7s0 
        nexthop via inet 172.16.0.9 dev enp1s0 
17 proto ldp 
        nexthop via inet 172.16.0.13 dev enp7s0 
        nexthop via inet 172.16.0.17 dev enp8s0 
18 via inet 172.16.0.9 dev enp1s0 proto ldp 
19 via inet 172.16.0.13 dev enp7s0 proto ldp 
20 via inet 172.16.0.17 dev enp8s0 proto ldp 
21 via inet 172.16.0.13 dev enp7s0 proto ldp 
22 via inet 172.16.0.17 dev enp8s0 proto ldp 
23 via inet 172.16.0.17 dev enp8s0 proto ldp 
17001 via inet 172.16.0.9 dev enp1s0 proto ospf 
17002 via inet 172.16.0.13 dev enp7s0 proto ospf 
17003 via inet 172.16.0.17 dev enp8s0 proto ospf 
50000 via inet 172.16.0.13 dev enp7s0 proto ospf 
50001 via inet 172.16.0.13 dev enp7s0 proto ospf 
50002 via inet 172.16.0.9 dev enp1s0 proto ospf 
50003 via inet 172.16.0.9 dev enp1s0 proto ospf 
50004 via inet 172.16.0.17 dev enp8s0 proto ospf 
50005 via inet 172.16.0.17 dev enp8s0 proto ospf 
50006 via inet 172.16.0.17 dev enp8s0 proto ospf 
50007 via inet 172.16.0.17 dev enp8s0 proto ospf 
root@mpls4:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.4/32 brd 192.168.0.4 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:07:5e:47 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.10/30 brd 172.16.0.11 scope global enp1s0
       valid_lft forever preferred_lft forever
    inet 192.168.125.2/24 scope global enp1s0
       valid_lft forever preferred_lft forever
3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:2e:96:79 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.14/30 brd 172.16.0.15 scope global enp7s0
       valid_lft forever preferred_lft forever
4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:a1:92:7d brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.18/30 brd 172.16.0.19 scope global enp8s0
       valid_lft forever preferred_lft forever
root@mpls4:~# vtysh

Hello, this is FRRouting (version 7.3.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

mpls4# show mpls table
 Inbound Label  Type       Nexthop      Outbound Label  
 -------------------------------------------------------
 16             LDP        172.16.0.9   implicit-null   
 16             LDP        172.16.0.13  implicit-null   
 17             LDP        172.16.0.17  implicit-null   
 17             LDP        172.16.0.13  implicit-null   
 18             LDP        172.16.0.9   implicit-null   
 19             LDP        172.16.0.13  implicit-null   
 20             LDP        172.16.0.17  implicit-null   
 21             LDP        172.16.0.13  implicit-null   
 22             LDP        172.16.0.17  implicit-null   
 23             LDP        172.16.0.17  implicit-null   
 17001          SR (OSPF)  172.16.0.9   implicit-null   
 17002          SR (OSPF)  172.16.0.13  implicit-null   
 17003          SR (OSPF)  172.16.0.17  implicit-null   
 50000          SR (OSPF)  172.16.0.13  implicit-null   
 50001          SR (OSPF)  172.16.0.13  implicit-null   
 50002          SR (OSPF)  172.16.0.9   implicit-null   
 50003          SR (OSPF)  172.16.0.9   implicit-null   
 50004          SR (OSPF)  172.16.0.17  implicit-null   
 50005          SR (OSPF)  172.16.0.17  implicit-null   

mpls4# 
root@mpls4:~# ip -M r
16 proto ldp 
        nexthop via inet 172.16.0.13 dev enp7s0 
        nexthop via inet 172.16.0.9 dev enp1s0 
17 proto ldp 
        nexthop via inet 172.16.0.13 dev enp7s0 
        nexthop via inet 172.16.0.17 dev enp8s0 
18 via inet 172.16.0.13 dev enp7s0 proto ldp 
19 via inet 172.16.0.17 dev enp8s0 proto ldp 
20 via inet 172.16.0.13 dev enp7s0 proto ldp 
21 via inet 172.16.0.17 dev enp8s0 proto ldp 
22 via inet 172.16.0.9 dev enp1s0 proto ldp 
17001 via inet 172.16.0.9 dev enp1s0 proto ospf 
17002 via inet 172.16.0.13 dev enp7s0 proto ospf 
17003 via inet 172.16.0.17 dev enp8s0 proto ospf 
50000 via inet 172.16.0.9 dev enp1s0 proto ospf 
50001 via inet 172.16.0.9 dev enp1s0 proto ospf 
50002 via inet 172.16.0.13 dev enp7s0 proto ospf  -----------走mpls2,先用50002路由,再剥掉外层mpls label 50002,留下170003
50003 via inet 172.16.0.13 dev enp7s0 proto ospf 
50004 via inet 172.16.0.17 dev enp8s0 proto ospf 
50005 via inet 172.16.0.17 dev enp8s0 proto ospf 
50006 via inet 172.16.0.17 dev enp8s0 proto ospf 
50007 via inet 172.16.0.17 dev enp8s0 proto ospf 
root@mpls4:~# exit
root@mpls4:~# tcpdump -i enp7s0 mpls  -env
tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
18:12:09.243735 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 38386, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1891, seq 138, length 64
18:12:11.259739 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 38569, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1891, seq 139, length 64
18:12:13.275769 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 38893, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1891, seq 140, length 64
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
1 packet dropped by interface
root@mpls4:~# 

mpls2抓包

root@mpls2:~# tcpdump -i enp6s0 mpls -env
tcpdump: listening on enp6s0, link-type EN10MB (Ethernet), capture size 262144 bytes
18:13:17.272643 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 47681, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1891, seq 176, length 64
18:13:19.288637 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 48172, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1891, seq 177, length 64
18:13:21.304632 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 17003, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 48347, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1891, seq 178, length 64
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
root@mpls2:~# 
root@mpls3:~# tcpdump -i enp7s0 icmp and  src host 192.168.0.1 -env
tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
18:09:00.949225 52:54:00:a1:92:7d > 52:54:00:98:81:e8, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 62, id 13311, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1891, seq 49, length 64

 adjacent id

mpls1# sh ip ospf  database segment-routing 

                OSPF Segment Routing database for ID 192.168.0.1

SR-Node: 192.168.0.4    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 11

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.4/32     17004        pop      SR Pfx (idx 1004)     enp8s0      172.16.0.10

SR-Node: 192.168.0.2    SRGB (Size/Label): 0/0  Algorithm(s): S-SPF

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------

SR-Node: 192.168.0.1    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 8

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.1/32         0          0      SR Pfx (idx 1001)         lo      192.168.0.1
     172.16.0.1/32     50001        pop    SR Adj. (lbl 50001)     enp7s0       172.16.0.2
     172.16.0.1/32     50000        pop    SR Adj. (lbl 50000)     enp7s0       172.16.0.2
     172.16.0.9/32     50003        pop    SR Adj. (lbl 50003)     enp8s0      172.16.0.10
     172.16.0.9/32     50002        pop    SR Adj. (lbl 50002)     enp8s0      172.16.0.10      label 是mpls1 和mpls4间的标签

SR-Node: 192.168.0.3    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 10

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.3/32     17003      17003      SR Pfx (idx 1003)     enp8s0      172.16.0.10

mpls1# ping 192.168.0.4
PING 192.168.0.4 (192.168.0.4) 56(84) bytes of data.
64 bytes from 192.168.0.4: icmp_seq=1 ttl=64 time=0.124 ms
^C
--- 192.168.0.4 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.124/0.124/0.124/0.000 ms
mpls1# 

 ip route add 192.168.0.3/32 encap mpls 50002/17003  via 172.16.0.10

mpls4# show ip ospf database segment-routing 

                OSPF Segment Routing database for ID 192.168.0.4

SR-Node: 192.168.0.4    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 11

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.4/32         0          0      SR Pfx (idx 1004)         lo      192.168.0.4
    172.16.0.10/32     50001        pop    SR Adj. (lbl 50001)     enp1s0       172.16.0.9
    172.16.0.10/32     50000        pop    SR Adj. (lbl 50000)     enp1s0       172.16.0.9
    172.16.0.14/32     50003        pop    SR Adj. (lbl 50003)     enp7s0      172.16.0.13
    172.16.0.14/32     50002        pop    SR Adj. (lbl 50002)     enp7s0      172.16.0.13      -----------------label 50002 是mpls4 和mpls2间的标签
    172.16.0.18/32     50005        pop    SR Adj. (lbl 50005)     enp8s0      172.16.0.17
    172.16.0.18/32     50004        pop    SR Adj. (lbl 50004)     enp8s0      172.16.0.17

SR-Node: 192.168.0.2    SRGB (Size/Label): 0/0  Algorithm(s): S-SPF

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------

SR-Node: 192.168.0.1    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 8

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.1/32     17001        pop      SR Pfx (idx 1001)     enp1s0       172.16.0.9

SR-Node: 192.168.0.3    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 10

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.3/32     17003        pop      SR Pfx (idx 1003)     enp8s0      172.16.0.17

mpls4# 
mpls2# show ip ospf database segment-routing

                OSPF Segment Routing database for ID 192.168.0.2

SR-Node: 192.168.0.4    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 11

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.4/32     17004        pop      SR Pfx (idx 1004)     enp6s0      172.16.0.14

SR-Node: 192.168.0.2    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 9

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.2/32         0          0      SR Pfx (idx 1002)         lo      192.168.0.2
     172.16.0.2/32     50001        pop    SR Adj. (lbl 50001)     enp1s0       172.16.0.1
     172.16.0.2/32     50000        pop    SR Adj. (lbl 50000)     enp1s0       172.16.0.1
     172.16.0.5/32     50003        pop    SR Adj. (lbl 50003)     enp5s0       172.16.0.6
     172.16.0.5/32     50002        pop    SR Adj. (lbl 50002)     enp5s0       172.16.0.6
    172.16.0.13/32     50005        pop    SR Adj. (lbl 50005)     enp6s0      172.16.0.14
    172.16.0.13/32     50004        pop    SR Adj. (lbl 50004)     enp6s0      172.16.0.14

SR-Node: 192.168.0.1    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 8

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.1/32     17001        pop      SR Pfx (idx 1001)     enp1s0       172.16.0.1

SR-Node: 192.168.0.3    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 10

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.3/32     17003        pop      SR Pfx (idx 1003)     enp5s0       172.16.0.6

mpls2# 
mpls3# show ip ospf database segment-routing

                OSPF Segment Routing database for ID 192.168.0.3

SR-Node: 192.168.0.4    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 11

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.4/32     17004        pop      SR Pfx (idx 1004)     enp7s0      172.16.0.18

SR-Node: 192.168.0.2    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 9

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.2/32     17002        pop      SR Pfx (idx 1002)     enp1s0       172.16.0.5

SR-Node: 192.168.0.1    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 8

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.1/32     17001      17001      SR Pfx (idx 1001)     enp7s0      172.16.0.18

SR-Node: 192.168.0.3    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 10

    Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
------------------  --------  ---------  ---------------------  ---------  ---------------
    192.168.0.3/32         0          0      SR Pfx (idx 1003)         lo      192.168.0.3
    172.16.0.17/32     50001        pop    SR Adj. (lbl 50001)     enp7s0      172.16.0.18
    172.16.0.17/32     50000        pop    SR Adj. (lbl 50000)     enp7s0      172.16.0.18
     172.16.0.6/32     50003        pop    SR Adj. (lbl 50003)     enp1s0       172.16.0.5
     172.16.0.6/32     50002        pop    SR Adj. (lbl 50002)     enp1s0       172.16.0.5

mpls3# 

root@mpls1:~# ip route del 192.168.0.3/32 encap mpls 50002/17003  via 172.16.0.10 ------------删除
root@mpls1:~# ping 192.168.0.3 -I 192.168.0.1 -i 2
PING 192.168.0.3 (192.168.0.3) from 192.168.0.1 : 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=63 time=0.255 ms
^C
--- 192.168.0.3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.255/0.255/0.255/0.000 ms
root@mpls1:~# ip r
172.16.0.0/30 dev enp7s0 proto kernel scope link src 172.16.0.1 
172.16.0.4/30 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
172.16.0.8/30 dev enp8s0 proto kernel scope link src 172.16.0.9 
172.16.0.12/30 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
172.16.0.16/30 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
192.168.0.2 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
192.168.0.3 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
192.168.0.4 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
192.168.122.0/24 dev enp1s0 proto kernel scope link src 192.168.122.2 
192.168.123.0/24 via 172.16.0.2 dev enp7s0 proto ospf metric 20 
192.168.124.0/24 proto ospf metric 20 
        nexthop via 172.16.0.2 dev enp7s0 weight 1 
        nexthop via 172.16.0.10 dev enp8s0 weight 1 
192.168.125.0/24 via 172.16.0.10 dev enp8s0 proto ospf metric 20 
root@mpls1:~#
root@mpls1:~# ip route add  192.168.0.3/32 encap mpls 50002/50005  via 172.16.0.10
root@mpls1:~# ping 192.168.0.3 -I 192.168.0.1 -i 2
PING 192.168.0.3 (192.168.0.3) from 192.168.0.1 : 56(84) bytes of data.
^C
--- 192.168.0.3 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 4029ms

root@mpls1:~# 

因为mpls4收到50002标签根据50002查找路由,然后剥掉50002,最会丢给mpls2,
因为mpls2收到50005标签根据50005查找路由,然后剥掉50005,最会丢给mpls4, 
root@mpls1:~# ping 192.168.0.3 -I 192.168.0.1 -i 2
PING 192.168.0.3 (192.168.0.3) from 192.168.0.1 : 56(84) bytes of data.
^C
--- 192.168.0.3 ping statistics ---
29 packets transmitted, 0 received, 100% packet loss, time 56432ms

root@mpls1:~# 
root@mpls4:~# tcpdump -i enp1s0 'mpls 50002 && mpls  50005'  -env             -----抓到mpls 50002,50005
tcpdump: listening on enp1s0, link-type EN10MB (Ethernet), capture size 262144 bytes
19:52:51.678399 52:54:00:ff:18:f4 > 52:54:00:07:5e:47, ethertype MPLS unicast (0x8847), length 106: MPLS (label 50002, exp 0, ttl 64)
        (label 50005, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 50356, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1928, seq 21, length 64
19:52:53.694408 52:54:00:ff:18:f4 > 52:54:00:07:5e:47, ethertype MPLS unicast (0x8847), length 106: MPLS (label 50002, exp 0, ttl 64)
        (label 50005, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 50532, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1928, seq 22, length 64
19:52:55.710420 52:54:00:ff:18:f4 > 52:54:00:07:5e:47, ethertype MPLS unicast (0x8847), length 106: MPLS (label 50002, exp 0, ttl 64)
        (label 50005, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 50548, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1928, seq 23, length 64
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
root@mpls4:~# 
root@mpls2:~# tcpdump -i enp6s0 'mpls 50005' -env         ---------------抓到mpls 50005
tcpdump: listening on enp6s0, link-type EN10MB (Ethernet), capture size 262144 bytes
19:54:00.639222 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 50005, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 65256, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1930, seq 1, length 64
19:54:02.648642 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 50005, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 65529, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1930, seq 2, length 64
^C
2 packets captured
4 packets received by filter
0 packets dropped by kernel
root@mpls2:~# 
root@mpls4:~# tcpdump -i enp1s0 'mpls 50002 && mpls  50005'  -env      ------------------又路由给mpls4
tcpdump: listening on enp1s0, link-type EN10MB (Ethernet), capture size 262144 bytes
19:52:51.678399 52:54:00:ff:18:f4 > 52:54:00:07:5e:47, ethertype MPLS unicast (0x8847), length 106: MPLS (label 50002, exp 0, ttl 64)
        (label 50005, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 50356, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1928, seq 21, length 64
19:52:53.694408 52:54:00:ff:18:f4 > 52:54:00:07:5e:47, ethertype MPLS unicast (0x8847), length 106: MPLS (label 50002, exp 0, ttl 64)
        (label 50005, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 50532, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1928, seq 22, length 64
19:52:55.710420 52:54:00:ff:18:f4 > 52:54:00:07:5e:47, ethertype MPLS unicast (0x8847), length 106: MPLS (label 50002, exp 0, ttl 64)
        (label 50005, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 50548, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 1928, seq 23, length 64
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
root@mpls4:~# 

全部换成adjacent id

root@mpls1:~# ip route del  192.168.0.3/32 encap mpls 50002/50005  via 172.16.0.10
root@mpls1:~# ip route del  192.168.0.3/32 encap mpls 50002/50002  via 172.16.0.10
RTNETLINK answers: No such process
root@mpls1:~# ip route add  192.168.0.3/32 encap mpls 50002/50002  via 172.16.0.10
root@mpls1:~# ping 192.168.0.3 -I 192.168.0.1 -i 2
PING 192.168.0.3 (192.168.0.3) from 192.168.0.1 : 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=63 time=0.258 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=63 time=0.256 ms
^C
--- 192.168.0.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2012ms
rtt min/avg/max/mdev = 0.256/0.257/0.258/0.001 ms
root@mpls1:~#
因为mpls4收到50002标签根据50002查找路由,然后剥掉50002,最会丢给mpls2, 
因为mpls2收到50002标签根据50002查找路由,然后剥掉50002,最会丢给mpls3,


root@mpls4:~# tcpdump -i enp1s0 'mpls 50002 && mpls 50002 '  -env   -------------接收
tcpdump: listening on enp1s0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:03:33.282094 52:54:00:ff:18:f4 > 52:54:00:07:5e:47, ethertype MPLS unicast (0x8847), length 106: MPLS (label 50002, exp 0, ttl 64)
        (label 50002, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 25173, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2009, seq 86, length 64
20:03:35.298108 52:54:00:ff:18:f4 > 52:54:00:07:5e:47, ethertype MPLS unicast (0x8847), length 106: MPLS (label 50002, exp 0, ttl 64)
        (label 50002, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 25667, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2009, seq 87, length 64
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel
root@mpls4:~# 


root@mpls4:~# tcpdump -i enp7s0 mpls  -env  --------------剥掉一层转发 
tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:00:41.924301 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 50002, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 5062, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2009, seq 1, length 64
20:00:43.937117 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 50002, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 5290, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2009, seq 2, length 64
20:00:45.953134 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 50002, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 5573, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2009, seq 3, length 64
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
root@mpls4:~# 
root@mpls2:~# tcpdump -i enp6s0 'mpls 50002' -env -------------------接收
tcpdump: listening on enp6s0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:00:55.480634 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 50002, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 8559, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2009, seq 12, length 64
20:00:57.496627 52:54:00:2e:96:79 > 52:54:00:d7:a1:de, ethertype MPLS unicast (0x8847), length 102: MPLS (label 50002, exp 0, [S], ttl 64)
        (tos 0x0, ttl 64, id 9062, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2009, seq 13, length 64
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel
root@mpls2:~# tcpdump -i enp5s0 icmp and src host  192.168.0.1 -env   -------------剥掉一层转发
tcpdump: listening on enp5s0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:01:29.752656 52:54:00:ea:64:6e > 52:54:00:5a:42:f2, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 63, id 13058, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2009, seq 29, length 64
20:01:31.768655 52:54:00:ea:64:6e > 52:54:00:5a:42:f2, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 63, id 13294, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.0.1 > 192.168.0.3: ICMP echo request, id 2009, seq 30, length 64
^C
2 packets captured
4 packets received by filter
0 packets dropped by kernel
root@mpls2:~# 

 

 nodeA  可以发送外层mpls label =X/Y的报文给nodeB

 nodeB  可以发送外层mpls label =C/D的报文给nodeA

 
原文地址:https://www.cnblogs.com/dream397/p/13529202.html