Why does 0.0.0.0 resolve to the loopback device?
$ curl --verbose 0.0.0.0
* Rebuilt URL to: 0.0.0.0/
* Hostname was NOT found in DNS cache
* Trying 0.0.0.0...
* Connected to 0.0.0.0 (127.0.0.1) port 80 (#0)
It follows from an RFC requirement. RFC 5735 says:
- Global and Other Specialized Address Blocks
0.0.0.0/8 - Addresses in this block refer to source hosts on "this" network. Address 0.0.0.0/32 may be used as a source address for this host on this network; other addresses within 0.0.0.0/8 may be used to refer to specified hosts on this network
That given, the only rational thing to do with 0.0.0.0
as a destination is to treat it likewise. You can't route it anywhere else, because return packets would violate the RFC; you can't say it's invalid, because it's not when used as a source; the only sane thing to do with it when used as a destination is map it to localhost
as well.
One of my old colleagues used to use telnet 0 22
as a real timesaver for telnet localhost 22
.