The problem is your mesh topology. All those close edges "weight" the shading toward those edges, giving it that weird look. It's best to avoid edges like that, except around an edge that's meant to be hard.
There's something similar in the wiki, it's called a round inset (images from the Subdivision Modeling page): * http://wiki.polycount.com/wiki/File:Subdiv_roundinsets.jpg * http://wiki.polycount.com/wiki/File:Subdiv_bolt-insets.png Note the 5-edge poles that form a loop around each hole.