Linux 2.4 NAT HOWTO
作者﹕Rusty Russell, mailing list [email protected]
譯者﹕網中人 [email protected]
1. Introduction
親愛的讀者﹐歡迎您﹗
您將要探索的是引人入勝(有時蠻恐怖)的 NAT(Network Address Translation) 世界﹐同時﹐您甚至可以把這份 HOWTO 當成 Linux 2.4 核心及以後版本的精確指南呢。
在 Linux 2.4 裏面﹐有一個叫 `netfilter' 的東東﹐它是專門撕裂 (mangling* )封包的。在它再上一個層級﹐就是提供 NAT 功能的了﹐則是完全由以往的核心實作而成的。
(譯者注﹕很奇怪﹐原作者用 mangle 這一詞﹐似乎在過往的中文文件中都沒碰到過﹐查過好多字典都不知道怎麼翻譯好。這裏暫時勉強用‘撕裂’這個詞代替﹐不過後面我就不嘗試翻譯這詞了﹐讓讀者自己去理解吧。)
目前有三個官方網站可供瀏覽﹕
- 感謝 Filewatcher (http://netfilter.filewatcher.org).
- 感謝 The Samba Team and SGI (http://www.samba.org/netfilter).
- 感謝 Harald WeltE (http://netfilter.gnumonks.org).
而官方的 netfilter 郵件論壇﹐則可以到這裏看﹕ Netfilter List.
2.1 何爲 Network Address Translation?
一般來說﹐在網絡上封包從其來源(比方您家中的計算機)出去﹐然後到達目的地(比方www.gnumonks.org)﹐會經過許許多多個不同的連接(links)﹕就我所在的澳洲來說就大約有 19 個之多。沒有任何一個連接會真的去更改您的封包﹕他們僅僅是將之傳送出去而已。
假如其中一個連接會做 NAT 的話﹐然後它們就會更改那些經它而過的封包之來源或目的地地址。誠如您能想象得到的﹐這並非系統被設計成這樣的﹐而是 NAT 所做的手腳而已。通常要做 NAT 的聯機會記住它如何 mangled 封包的﹐然後當響應封包從另一方向過來的時候﹐然後就反過來 mangling 那個響應封包﹐所以所有東西都工作起來了。
2.2 爲什麼我要做 NAT 呢﹖
在完美的世界裏﹐您無需這樣做啦。在目前來說﹐還是有其理由的﹕
用 modem 撥接上網
大多數的 ISP 在您連上去的時候只會給您一個單一 IP 地址。您喜歡的話﹐以任何來源地址把封包送出去都行﹐但只有響應到這個來源地址的封包� 可以回到您那裏。如果您想用多臺不同主機(例如家中網絡)透過該連接上 internet 的話﹐那您就要 NAT 了。
這也就是今天 NAT 最常用之處﹐而在 Linux 世界最爲人知的就是所謂的 `masquerading(封包僞裝術)' 了。我稱之爲 SNAT﹐因爲您改變了第一個封包的 source(來源) 地址的緣故。
多重服務器
有時候﹐您會想去改變那些進入您網絡的封包之路向。這最常是因爲(如上述)您只有一個 IP 地址﹐但您卻想讓別人能夠連接到 `真實' IP 地址後面的主機去。如果您重寫這些內送封包的目的地址﹐這樣您就可以管理它們了。
一個常見的變動是負載分擔(load-sharing)﹐也就是在一組機器上面爲封包做映對(mapping)的動作。這類型的 NAT ﹐在以前的的 Linux 版本中也就被稱爲 port-forwarding 。
透明代理(Transparent Proxying)
有時候﹐您或許想要每一個經過您的 Linux 主機的封包送至主機本身的一個程序去。這就需要進行透明代理的動作了﹕一個代理就是一個位於您的網絡和� 部網絡的程序﹐爲彼此雙方負起溝通的任務。而所謂的透明﹐則是因爲您的網絡甚至無須知道在和一個代理對講﹐當然了﹐除非代理不再工作了吧。
Squid 可以配置成這樣的工作方式﹐這就是在過往的 Linux 版本中所謂的重導向(redirection)﹑或透明代理了。