Decided to blow-away my multipoint frame relay and do a point-to-point one. This is by far the saner approach.
Basically the physical topology is the same as the multipoint example, but now instead of using the main serial interfaces I've created subinterfaces, so that I can use small router-to-router /30 networks.
The topology I've chosen is as follows:

2851 is HQ. Clear old config, set encapsulation and description, then start configuring subinterfaces. I have named my subinterfaces after the DLCI so that it's easier to administer them, but this is not actually required, nor does the name itself mean anything to the router.
2851-rt(config)#default int s0/1/0
Interface Serial0/1/0 set to default configuration
2851-rt(config)#int s0/1/0
2851-rt(config-if)#shut
2851-rt(config-if)#desc Frame Relay
2851-rt(config-if)#encapsulation frame-relay
2851-rt(config)#int s0/1/0.109 ?
multipoint Treat as a multipoint link
point-to-point Treat as a point-to-point link
2851-rt(config)#int s0/1/0.109 point-to-point
2851-rt(config-subif)#ip address 172.25.0.1 255.255.255.252
2851-rt(config-subif)#frame-relay ?
class Define a map class on the interface
de-group Associate a DE group with a DLCI
interface-dlci Define a DLCI on an interface/subinterface
inverse-arp Enable/disable FR inverse ARP
ip Frame Relay Internet Protocol config commands
map Map a protocol address to a DLCI address
payload-compression Use payload compression
priority-dlci-group Define a priority group of DLCIs
vc-bundle configure a frame-relay vc-bundle
2851-rt(config-subif)#frame-relay interface-dlci 109
First subinterface is created. I can see the stats, it's inactive because the interface is shut down:
2851-rt(config-fr-dlci)#do sh frame-relay pvc
PVC Statistics for interface Serial0/1/0 (Frame Relay DTE)
Active Inactive Deleted Static
Local 0 1 0 0
Switched 0 0 0 0
Unused 0 0 0 0
DLCI = 109, DLCI USAGE = LOCAL, PVC STATUS = INACTIVE, INTERFACE = Serial0/1/0.109
input pkts 0 output pkts 0 in bytes 0
out bytes 0 dropped pkts 0 in pkts dropped 0
out pkts dropped 0 out bytes dropped 0
in FECN pkts 0 in BECN pkts 0 out FECN pkts 0
out BECN pkts 0 in DE pkts 0 out DE pkts 0
out bcast pkts 0 out bcast bytes 0
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
pvc create time 00:02:41, last time pvc status changed 00:02:41
now create the rest of the subinterfaces:
2851-rt(config-fr-dlci)#int s0/1/0.108 point-to-point
2851-rt(config-subif)#ip address 172.25.0.5 255.255.255.252
2851-rt(config-subif)#frame-relay interface-dlci 108
2851-rt(config-fr-dlci)#int s0/1/0.107 point-to-point
2851-rt(config-subif)#ip address 172.25.0.13 255.255.255.252
2851-rt(config-subif)#frame-relay interface-dlci 107
2851-rt(config-fr-dlci)#int s0/1/0.106 point-to-point
2851-rt(config-subif)#ip address 172.25.0.9 255.255.255.252
2851-rt(config-subif)#frame-relay interface-dlci 106
We can now see what we have:
2851-rt(config-fr-dlci)#do sh frame-relay pvc
PVC Statistics for interface Serial0/1/0 (Frame Relay DTE)
Active Inactive Deleted Static
Local 0 4 0 0
Switched 0 0 0 0
Unused 0 0 0 0
DLCI = 106, DLCI USAGE = LOCAL, PVC STATUS = INACTIVE, INTERFACE = Serial0/1/0.106
input pkts 0 output pkts 0 in bytes 0
out bytes 0 dropped pkts 0 in pkts dropped 0
out pkts dropped 0 out bytes dropped 0
in FECN pkts 0 in BECN pkts 0 out FECN pkts 0
out BECN pkts 0 in DE pkts 0 out DE pkts 0
out bcast pkts 0 out bcast bytes 0
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
pvc create time 00:01:23, last time pvc status changed 00:01:23
DLCI = 107, DLCI USAGE = LOCAL, PVC STATUS = INACTIVE, INTERFACE = Serial0/1/0.107
input pkts 0 output pkts 0 in bytes 0
out bytes 0 dropped pkts 0 in pkts dropped 0
out pkts dropped 0 out bytes dropped 0
in FECN pkts 0 in BECN pkts 0 out FECN pkts 0
out BECN pkts 0 in DE pkts 0 out DE pkts 0
out bcast pkts 0 out bcast bytes 0
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
pvc create time 00:01:53, last time pvc status changed 00:01:53
DLCI = 108, DLCI USAGE = LOCAL, PVC STATUS = INACTIVE, INTERFACE = Serial0/1/0.108
input pkts 0 output pkts 0 in bytes 0
out bytes 0 dropped pkts 0 in pkts dropped 0
out pkts dropped 0 out bytes dropped 0
in FECN pkts 0 in BECN pkts 0 out FECN pkts 0
out BECN pkts 0 in DE pkts 0 out DE pkts 0
out bcast pkts 0 out bcast bytes 0
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
pvc create time 00:04:33, last time pvc status changed 00:04:33
DLCI = 109, DLCI USAGE = LOCAL, PVC STATUS = INACTIVE, INTERFACE = Serial0/1/0.109
input pkts 0 output pkts 0 in bytes 0
out bytes 0 dropped pkts 0 in pkts dropped 0
out pkts dropped 0 out bytes dropped 0
in FECN pkts 0 in BECN pkts 0 out FECN pkts 0
out BECN pkts 0 in DE pkts 0 out DE pkts 0
out bcast pkts 0 out bcast bytes 0
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
pvc create time 00:07:59, last time pvc status changed 00:07:59
2851-rt(config-fr-dlci)#end
2851-rt#sh ip int br | inc Serial0/1/0
Serial0/1/0 unassigned YES TFTP administratively down down
Serial0/1/0.106 172.25.0.9 YES manual administratively down down
Serial0/1/0.107 172.25.0.13 YES manual administratively down down
Serial0/1/0.108 172.25.0.5 YES manual administratively down down
Serial0/1/0.109 172.25.0.1 YES manual administratively down down
2851-rt#
Looks good, let's light up the physical interface:
2851-rt#conf t
Enter configuration commands, one per line. End with CNTL/Z.
2851-rt(config)#int s0/1/0
2851-rt(config-if)#no shut
2851-rt(config-if)#end
2851-rt#
Nov 1 11:25:53: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/1/0, changed state to up
And just for reference, what the running config for the interfaces looks like:
2851-rt#sh run | sect Serial0/1/0
interface Serial0/1/0
description Frame Relay
no ip address
encapsulation frame-relay
interface Serial0/1/0.106 point-to-point
ip address 172.25.0.9 255.255.255.252
frame-relay interface-dlci 106
interface Serial0/1/0.107 point-to-point
ip address 172.25.0.13 255.255.255.252
frame-relay interface-dlci 107
interface Serial0/1/0.108 point-to-point
ip address 172.25.0.5 255.255.255.252
frame-relay interface-dlci 108
interface Serial0/1/0.109 point-to-point
ip address 172.25.0.1 255.255.255.252
frame-relay interface-dlci 109
Now, on to the other routers. The 2801:
2801-rt#conf t
Enter configuration commands, one per line. End with CNTL/Z.
2801-rt(config)#int s0/3/0
2801-rt(config-if)#shut
2801-rt(config-if)#encapsulation frame-relay
2801-rt(config-if)#desc Frame Relay
2801-rt(config-if)#int s0/3/0.901 point-to-point
2801-rt(config-subif)#ip address 172.25.0.2 255.255.255.252
2801-rt(config-subif)#frame-relay interface-dlci 901
2801-rt(config-fr-dlci)#exit
2801-rt(config-subif)#exit
2801-rt(config)#int s0/3/0
2801-rt(config-if)#no shut
2801-rt(config-if)#
.Nov 1 11:17:57: %LINK-3-UPDOWN: Interface Serial0/3/0, changed state to up
2801-rt(config-if)#
.Nov 1 11:18:08: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/3/0, changed state to up
2801-rt(config-if)#
The 2821:
2821-rt#conf t
Enter configuration commands, one per line. End with CNTL/Z.
2821-rt(config)#int s0/0/0
2821-rt(config-if)#shut
2821-rt(config-if)#desc Frame Relay
2821-rt(config-if)#encapsulation frame-relay
2821-rt(config-if)#int s0/0/0.801 point-to-point
2821-rt(config-subif)#ip address 172.25.0.6 255.255.255.252
2821-rt(config-subif)#frame-relay interface-dlci 801
2821-rt(config-fr-dlci)#exit
2821-rt(config-subif)#exit
2821-rt(config)#int s0/0/0
2821-rt(config-if)#no shut
2821-rt(config-if)#exit
2821-rt(config)#
Nov 1 11:20:50: %LINK-3-UPDOWN: Interface Serial0/0/0, changed state to down
2821-rt(config)#exit
2821-rt#
Nov 1 11:21:03: %LINK-3-UPDOWN: Interface Serial0/0/0, changed state to up
2821-rt#
One of the 2621s:
2621b-rt#conf t
Enter configuration commands, one per line. End with CNTL/Z.
2621b-rt(config)#int s0/0
2621b-rt(config-if)#shut
2621b-rt(config-if)#encapsulation frame-relay
2621b-rt(config-if)#desc Frame Relay
2621b-rt(config-if)#int s0/0.701 point-to-point
2621b-rt(config-subif)#ip address 172.25.0.14 255.255.255.252
2621b-rt(config-subif)#frame-relay interface-dlci 701
2621b-rt(config-fr-dlci)#int s0/0
2621b-rt(config-if)#no shut
2621b-rt(config-if)#end
2621b-rt#
Nov 1 11:23:05: %LINK-3-UPDOWN: Interface Serial0/0, changed state to down
2621b-rt#
Nov 1 11:23:17: %LINK-3-UPDOWN: Interface Serial0/0, changed state to up
2621b-rt#
The other 2621:
2621a-rt#conf t
Enter configuration commands, one per line. End with CNTL/Z.
2621a-rt(config)#int s0/0
2621a-rt(config-if)#shut
2621a-rt(config-if)#enc
2621a-rt(config-if)#encapsulation frame-relay
2621a-rt(config-if)#desc Frame Relay
2621a-rt(config-if)#int s0/0.601 point-to-point
2621a-rt(config-subif)#ip address 172.25.0.10 255.255.255.252
2621a-rt(config-subif)#frame-relay interface-dlci 601
2621a-rt(config-fr-dlci)#int s0/0
2621a-rt(config-if)#no shut
2621a-rt(config-if)#end
2621a-rt#
.Nov 1 11:25:01: %LINK-3-UPDOWN: Interface Serial0/0, changed state to up
2621a-rt#
.Nov 1 11:25:12: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/0, changed state to up
2621a-rt#
Now to look at the HQ router (2851) DLCIs and the route:
2851-rt#sh frame-relay pvc summary
Frame-Relay VC Summary
Active Inactive Deleted Static
Local 4 0 0 0
Switched 0 0 0 0
Unused 0 0 0 0
2851-rt#sh frame-relay pvc | inc DLCI
DLCI = 106, DLCI USAGE = LOCAL, PVC STATUS = ACTIVE, INTERFACE = Serial0/1/0.106
DLCI = 107, DLCI USAGE = LOCAL, PVC STATUS = ACTIVE, INTERFACE = Serial0/1/0.107
DLCI = 108, DLCI USAGE = LOCAL, PVC STATUS = ACTIVE, INTERFACE = Serial0/1/0.108
DLCI = 109, DLCI USAGE = LOCAL, PVC STATUS = ACTIVE, INTERFACE = Serial0/1/0.109
2851-rt#sh cdp nei
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone,
D - Remote, C - CVTA, M - Two-port Mac Relay
Device ID Local Intrfce Holdtme Capability Platform Port ID
2821-rt.home Ser 0/1/0.108 157 R S I 2821 Ser 0/0/0.801
2621a-rt.lab Ser 0/1/0.106 170 R S 2621 Ser 0/0.601
2621b-rt.lab Ser 0/1/0.107 139 R S 2621 Ser 0/0.701
2801-rt.lab Ser 0/1/0.109 144 R S I 2801 Ser 0/3/0.901
2851-rt#
2851-rt#sh ip route eigrp
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is 68.3.196.1 to network 0.0.0.0
2851-rt#
Wait, the routes aren't there!
Let's look a the routing protocol:
2851-rt#sh run | sect router eigrp 60
router eigrp 60
network 172.16.0.0 0.0.0.255
network 172.25.0.0 0.0.0.255
network 172.30.255.0 0.0.0.255
passive-interface default
no passive-interface Serial0/1/0
2851-rt#
I use passive-interface default on my routers, mainly because I'm used to using L3 switches and I don't want routing protocols sent out on to my user network. In this case it bit me because
subinterfaces do not inherit their parent interface's passive-interface status.
I manually add no passive-interface for the subinterfaces on all of the routers.
The 2851:
2851-rt#conf t
Enter configuration commands, one per line. End with CNTL/Z.
2851-rt(config)#router eigrp 60
2851-rt(config-router)#no pass
2851-rt(config-router)#no passive-interface s0/1/0.106
2851-rt(config-router)#no passive-interface s0/1/0.107
2851-rt(config-router)#no passive-interface s0/1/0.108
2851-rt(config-router)#no passive-interface s0/1/0.109
2851-rt(config-router)#end
2851-rt#
One of the 2621s:
2621a-rt#conf t
Enter configuration commands, one per line. End with CNTL/Z.
2621a-rt(config)#router eigrp 60
2621a-rt(config-router)#no passive-interface serial 0/0.601
2621a-rt(config-router)#
.Nov 1 11:50:06: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 60: Neighbor 172.25.0.9 (Serial0/0.601) is up: new adjacency
2621a-rt(config-router)#end
2621a-rt#
2621a-rt#sh ip route eigrp
172.16.0.0/16 is variably subnetted, 5 subnets, 3 masks
D 172.16.0.240/28 [90/2297856] via 172.25.0.9, 00:00:51, Serial0/0.601
D 172.16.0.236/30 [90/2170112] via 172.25.0.9, 00:00:51, Serial0/0.601
D 172.16.0.32/27 [90/2297856] via 172.25.0.9, 00:00:51, Serial0/0.601
D 172.16.0.0/27 [90/2297856] via 172.25.0.9, 00:00:51, Serial0/0.601
D 172.16.0.64/27 [90/2297856] via 172.25.0.9, 00:00:51, Serial0/0.601
172.25.0.0/30 is subnetted, 4 subnets
D 172.25.0.4 [90/2681856] via 172.25.0.9, 00:00:51, Serial0/0.601
D 172.25.0.0 [90/2681856] via 172.25.0.9, 00:00:51, Serial0/0.601
D 172.25.0.12 [90/2681856] via 172.25.0.9, 00:00:51, Serial0/0.601
172.30.0.0/32 is subnetted, 2 subnets
D 172.30.255.255 [90/2297856] via 172.25.0.9, 00:00:51, Serial0/0.601
2621a-rt#
And a bonus sh ip route eigrp gives us proof that it's working...
The other 2621:
2621b-rt#conf t
Enter configuration commands, one per line. End with CNTL/Z.
2621b-rt(config)#router eigrp 60
2621b-rt(config-router)#no passive-interface s0/0.701
2621b-rt(config-router)#
Nov 1 11:52:10: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 60: Neighbor 172.25.0.13 (Serial0/0.701) is up: new adjacency
2621b-rt(config-router)#end
2621b-rt#
The 2821:
2821-rt#conf t
Enter configuration commands, one per line. End with CNTL/Z.
2821-rt(config)#router eigrp 60
2821-rt(config-router)#no passive-interface s0/0/0.801
2821-rt(config-router)#
.Nov 1 11:53:14: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 60: Neighbor 172.25.0.5 (Serial0/0/0.801) is up: new adjacency
2821-rt(config-router)#end
2821-rt#
And the 2801:
2801-rt#conf t
Enter configuration commands, one per line. End with CNTL/Z.
2801-rt(config)#router eigrp 60
2801-rt(config-router)#no passive-interface s0/3/0.901
2801-rt(config-router)#
.Nov 1 11:54:12: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 60: Neighbor 172.25.0.1 (Serial0/3/0.901) is up: new adjacency
2801-rt(config-router)#end
2801-rt#
Back to the 2851, to see if we have a routing table yet:
2851-rt#sh ip route eigrp
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is 68.3.196.1 to network 0.0.0.0
172.16.0.0/16 is variably subnetted, 16 subnets, 7 masks
D 172.16.2.0/25 [90/2172416] via 172.25.0.2, 00:00:23, Serial0/1/0.109
D 172.16.2.240/28
[90/2172416] via 172.25.0.2, 00:00:23, Serial0/1/0.109
D 172.16.3.0/26 [90/2170112] via 172.25.0.6, 00:01:21, Serial0/1/0.108
D 172.16.3.240/28
[90/2170112] via 172.25.0.6, 00:01:21, Serial0/1/0.108
172.30.0.0/32 is subnetted, 7 subnets
D 172.30.255.249
[90/2297856] via 172.25.0.14, 00:02:27, Serial0/1/0.107
D 172.30.255.251
[90/2297856] via 172.25.0.10, 00:04:31, Serial0/1/0.106
D 172.30.255.252 [90/2297856] via 172.25.0.2, 00:00:23, Serial0/1/0.109
D 172.30.255.254 [90/2297856] via 172.25.0.6, 00:01:21, Serial0/1/0.108
2851-rt#
Looks good. Let's try some pings from various routers.
2851 to the rest:
2851-rt#ping 172.30.255.249
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.30.255.249, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/3/4 ms
2851-rt#ping 172.30.255.251
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.30.255.251, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/4 ms
2851-rt#ping 172.30.255.252
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.30.255.252, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
2851-rt#ping 172.30.255.254
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.30.255.254, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms
2851-rt#
And the 2801, first the routing table:
2801-rt#sh ip route eigrp
172.16.0.0/16 is variably subnetted, 10 subnets, 6 masks
D 172.16.0.240/28 [90/2297856] via 172.25.0.1, 00:02:11, Serial0/3/0.901
D 172.16.3.240/28 [90/2682112] via 172.25.0.1, 00:02:11, Serial0/3/0.901
D 172.16.0.236/30 [90/2170112] via 172.25.0.1, 00:02:11, Serial0/3/0.901
D 172.16.0.32/27 [90/2297856] via 172.25.0.1, 00:02:11, Serial0/3/0.901
D 172.16.0.0/27 [90/2297856] via 172.25.0.1, 00:02:11, Serial0/3/0.901
D 172.16.3.0/26 [90/2682112] via 172.25.0.1, 00:02:11, Serial0/3/0.901
D 172.16.0.64/27 [90/2297856] via 172.25.0.1, 00:02:11, Serial0/3/0.901
172.25.0.0/30 is subnetted, 4 subnets
D 172.25.0.4 [90/2681856] via 172.25.0.1, 00:02:11, Serial0/3/0.901
D 172.25.0.12 [90/2681856] via 172.25.0.1, 00:02:11, Serial0/3/0.901
D 172.25.0.8 [90/2681856] via 172.25.0.1, 00:02:11, Serial0/3/0.901
172.30.0.0/32 is subnetted, 5 subnets
D 172.30.255.255 [90/2297856] via 172.25.0.1, 00:02:11, Serial0/3/0.901
D 172.30.255.254 [90/2809856] via 172.25.0.1, 00:02:11, Serial0/3/0.901
D 172.30.255.249 [90/2809856] via 172.25.0.1, 00:02:11, Serial0/3/0.901
D 172.30.255.251 [90/2809856] via 172.25.0.1, 00:02:11, Serial0/3/0.901
2801-rt#
And now some pinging:
2801-rt#ping 172.30.255.255
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.30.255.255, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
2801-rt#ping 172.30.255.254
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.30.255.254, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/4 ms
2801-rt#ping 172.30.255.249
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.30.255.249, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/8 ms
2801-rt#ping 172.30.255.251
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.30.255.251, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/5/8 ms
2801-rt#
Looks good to go.