Learning networking on Linux can be quite the task. There is a lot of functionality that you selectively enable via the Linux kernel as well as a bunch of command line utilities like those provided via iproute2, netfilter and others. It's really hard finding good, easy to understand documentation on all of these systems. But over the years I have gathered a bit of a collection.
First off, I should state that it would be a good idea to get a good grounding in basic networking concepts before trying to learn this stuff via Linux.
That said, take a look at the Linux Advanced Routing & Traffic Control HOWTO (otherwise known as the LARTC HOWTO). Though usually quite outdated, this will give you a lot of good information about the Linux routing/networking systems, as well as a bunch of iproute2 commands. I would recommend skimming through this document before anything else.
Along with that site, LARTC also has a mailing list that can at times have good dialog. VGER.KERNEL.ORG hosts this list and provides information on subscribing.
Next, another outdated, but at times useful piece of documentation is the Linux Network Administrator's Guide. It covers a lot of material like the LARTC HOWTO, but covers certain subjects with a bit more detail.
For NAT type stuff, netfilter.org has a great article on how connection tracking works in the Linux kernel.
Iptables Tutorial 1.2.2 is a great tutorial on how to setup NAT and general firewall type rules on Linux.
With all of these sites, there's a few awesome pictures that I've found that will help you put everything together. Here they are in no certain order:
Now, this stuff will just get you started. You'll want to dig into all of the iproute2 utilities (ip, tc, &etc), the bridge control utilities (brctl), a bunch of flags specified in /proc/sys/net and other places in the /proc filesystem, netfilter (iptables) and a number of other commands on your own. Play with them and try to use them to build your own advanced networks. One thing that I've found helpful is using qemu to setup multiple interconnected virtual machines and network them together.
First, networking isn't a small concept. It's a competitive niche. But then again, if you:
read quality books
experiment
spend time testing, and
collect feedback on your progress,
You can learn it flawlessly. That's pretty much the "best way."
First you have to get a grip on foundational concepts, like protocols, IP addresses, routing, networking commands, and this is important: you have to be an expert in file transfer protocol (FTP) and handling ports. This all happens in shell scripting (sh), so knowledge about that is evidently necessary.
All that can be learned by reading quality books, consuming the Web, or being tutored by an expert.
It's only practice and experiments, backed by proper knowledge, that can give you a good amount of common sense in the field. For example, books can teach you how to connect to remote FTP servers, but as long as you don't have personal hit-and-trial sessions and constant failures, you're not going anywhere. You have to be flexible and adaptive so that you can access an FTP server even without the needed tools, like just an outdated command prompt or something, or downloading a file by a Terminal window manually. That's called being expert.
The best way to learn Linux is by installing it in virtual machine and experimenting, more the error more you will learn the concepts.
However for specific network related things you can check site called linuxhomenetworking.com, its a pretty good site and covers most of the networking stuff related to linux.