BGP TTL Security


I am trying to implement BGP TTL security between one of my routers and
an eBGP peer that is one hop away over a layer 2 IX.

As soon as I add:

neighbor ttl-security hops 2
neighbor ttl-security hops 1

The peer drops to active/open sent with entries in syslog for hold time

I have validated via trace in both directions as being 1 hop.

I have read another article that implies the default behaviour at the
other end will to be send TTL 1 not 255 and consequently I need to
configure both ends to get the session to
come back up. An access list reveals all the packets I am receiving
have a TTL of 0.

The session re-establishes if I configure:

neighbor ttl-security hops >=192

<=191 and the session stays down.

Which is proper bizarre!

Is it necessary to configure this on both side for the session to
re-establish. Is this a Cisco bug?

Kind Regards

Ben Butler

You're missing the fundamentals of what protection this
mechanism is meat to provide. A remote attacker can
craft a packet such that it yields a TTL of 2, 1 or 0 at
the target system.

However, what a remote attacker can't do is craft a
packet that yields a TTL or 255 or 254, for example.
You probably want both values to be 254 if you've
got one intermediate hop between the peers.


After a prodding offlist I reread your message and understand
what point you're making now. Indeed as you suggest above
the normal configuration should be 'ttl-security hops 2' or 'ttl
security hops 1'.

Not for sure, but I'd have to speculate that if this is only
working for you with 'ttl-security hops >= 192' perhaps your
peer is setting the TTL in it's packet to 64? I believe that's
the default TTL for Linux, Foundry and a couple others.
Juniper's default TTL is 1 eBGP (though configurable), and
64 for iBGP, multihop, etc. IIRC.

In order to implement this effectively the peer would need to
be setting the transmitted TTL to 255.

And my apologies if my previous message seemed a bit
negative, that was certainly not my intention.