在做isis的route leaking的实验的时候,发现了一个诡异的现象,然后查遍了cisco的文档,以及RFC 1142都没找到任何的不对的地方,最后发现是自己的一个小失误导致的,从而对isis的OSI编址在路由器中的识别方式有了新的认知。
实验环境
R1和R2是属于区域1的,R3是属于区域2的。很明显R1是L1路由器,R2是L1L2路由器,R3是L2路由器。然后下面是我一开始的错误配置。
错误配置
R1的配置
router isis
net 49.0001.0000.0001.00
is-type level-1
log-adjacency-changes
!
interface Ethernet0/0
ip address 192.168.12.1 255.255.255.0
ip router isis
R2的配置
router isis
net 49.0001.0000.0002.00
log-adjacency-changes
!
interface Ethernet0/0
ip address 192.168.12.2 255.255.255.0
ip router isis
!
interface Ethernet0/1
ip address 192.168.23.2 255.255.255.0
ip router isis
R3的配置
router isis
net 49.0002.0000.0003.00
is-type level-2-only
log-adjacency-changes
!
interface Loopback0
ip address 3.3.3.3 255.255.255.0
ip router isis
!
interface Ethernet0/0
ip address 192.168.23.3 255.255.255.0
ip router isis
问题分析
上面的配置不多,乍一看这样好像也没啥问题,下面我开始检查邻居关系的建立。在R2上查看clns的邻居关系。
R2#sh clns neighbors
System Id Interface SNPA State Holdtime Type Protocol
R3 Et0/1 cc02.213c.0000 Up 25 L2 IS-IS
R1 Et0/0 cc00.213c.0000 Up 27 L1 IS-IS
好像也没啥,问题,下面检查连通性时。我就发现了如下问题:
R1#ping 3.3.3.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
R1无法访问R3的loopback接口,我赶紧检查R1的路由表,然后发现:
R1#sh ip route
Gateway of last resort is not set
C 192.168.12.0/24 is directly connected, Ethernet0/0
i L1 192.168.23.0/24 [115/20] via 192.168.12.2, Ethernet0/0
理论上说,R1应该会自己生成一条去往最近的L1L2路由器的默认路由,但是这边却没有看到,除非是R2在给R1路由的时候忘掉了att置位了,我就查看R1的isis数据库。
R1#sh isis database
IS-IS Level-1 Link State Database:
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
R1.00-00 * 0x00000004 0x988A 620 0/0/0
R2.00-00 0x00000006 0x26D2 986 0/0/0
R2.01-00 0x00000001 0x91BC 619 0/0/0
R3.00-00 0x00000003 0xEEEA 666 0/0/0
R3.01-00 0x00000001 0xAE9A 666 0/0/0
竟然还真没有置位,我顿时就傻眼了,这和资料上说好的不一样啊。配置量也不大,我就查了一遍,还是没发现我有哪里不对的,cisco和RFC都说我这种情况应该出现att置位的情况,我检查了很多地方,最终在LSP-ID这边发现了异样:
R1#sh isis hostname
Level System ID Dynamic Hostname (notag)
* 0001.0000.0001 R1
1 0002.0000.0003 R3
1 0001.0000.0002 R2
我不是设置的sys-ID都应该是0000.0000.000x的么,这个是啥,然后赶紧查看配置,然后发现我的NSAP地址输入错了,也不能说输入错了啊,NSAP地址不是固定长度的,可以是10~20字节大小,然后我就发现了Cisco IOS对NSAP地址的识别方式是固定的。
Cisco IOS软件从右边开始解释NSAP地址(这里使用NSAP 的OSI格式)。首先从右边数起,第一个B是NSEL,往左的6B是SystemID,剩下的部分是AreaID。
所以我上面配置的三台路由器,他们认为自己是属于同一个区域的,从hostname那边也可以看出来,R3前面的level也是1。然后我修改了NSAP地址后,clear isis *。再次查看,就发现这个情况消失了。
R1#sh ip route
Gateway of last resort is 192.168.12.2 to network 0.0.0.0
C 192.168.12.0/24 is directly connected, Ethernet0/0
i L1 192.168.23.0/24 [115/20] via 192.168.12.2, Ethernet0/0
i*L1 0.0.0.0/0 [115/10] via 192.168.12.2, Ethernet0/0