(2019-01-02)
Problem
Cisco 3750 running IOS 12.2(something) can't route across a router. Configuration includes the line
ip route 0.0.0.0 0.0.0.0 192.168.49.1
...which is locally correct.
Clue
On the router 192.168.49.1 (which in this case is a FGT-100D cluster (this is not relevant to this particular problem)) we run a packet sniff and catch a ping attempt from another system to the switch in question:
# di sniffer packet Admin-500 'host 192.168.49.16' 1 50
interfaces=[Admin-500]
filters=[host 192.168.49.16]
1.016864 10.100.10.81 -> 192.168.49.16: icmp: echo request
1.018247 arp who-has 10.100.10.81 tell 192.168.49.16
Solution
The directive
ip route... is only effective when the directive
ip routing is active in the configuration. Add
ip routing in
conf t mode and the switch will respect the route as given.
Alternatively: remove the
ip route... directive and replace it with
ip default-gateway 192.168.49.1
Discussion
In this case the Fortigate 100D was replacing the role of a Cisco 6506 core router. Ciscos appear to be smart enough to A) arp locally for systems they have no routes to when not in routing mode and B) be smart enough to answer an arp for a non-local IP if they have a route to said non-local IP. So when the 6506 was in place, it would answer the arp request for 10.100.10.81 and the 3750 would just treat it as apparently local. Take the 6506 away, and that glue is missing.