Next Previous Contents

5. 控制哪些要 NAT

您需要建立一些 NAT 規則﹐來告訴核心哪些連線要改變﹐同時如何去改變它們。要做到這點﹐我們需要一個非常多用 的 iptables 工具﹐同時指定 `-t nat' 選項告訴它去修改 NAT 表格。

NAT 規則的表格含有三個列表叫做`chains' ﹕每一條規則都按順序檢查﹐直到找到一個相符的比對。該三個鏈就叫做 PREROUTING (對 Destination NAT 來說﹐因為封包首先是傳入的)、POSTROUTING (對 Source NAT 來說﹐因為封包是離開的)、以及 OUTPUT (對 Destination NAT 來說﹐是指那些由本機產生的封包)。

假如我夠藝術天份的話﹐下面的圖示將準確模擬出上面所說的概念。

      _____                                     _____
     /     \                                   /     \
   PREROUTING -->[Routing ]----------------->POSTROUTING----->
     \D-NAT/     [Decision]                    \S-NAT/
                     |                            ^
                     |                          __|__
                     |                         /     \
                     |                        | OUTPUT|
                     |                         \D-NAT/
                     |                            ^
                     |                            |
                     --------> Local Process ------

於前述的每一點﹐當一個封包通過我們要查看的相關連線之時﹐如果它是一個新建連線﹐我們查看它在 NAT 表格裡對應的鏈﹐看看能對之做些什麼動作。而由此獲得的答案就應用於該連線將來的所有封包。

5.1 用 iptables 做簡單的選擇

iptables 具有如後所列的許多標準選項。所有那些帶雙減號的選項都是可以縮寫的﹐只要 iptables 仍可將之與其它可能的選項區分開來就行。如果您的核心以模組形式來支援 iptables ﹐您就需要首先載入 ip_tables.o ﹕ `insmod ip_tables'。

這裡﹐最重要的一個選項是表格選擇選項﹕ `-t' 。對於所有的 NAT 操作﹐您會想用 `-t nat' 來表示 NAT 表格。第二個重要的選項是以 `-A' 增加一條新規則至鏈的末端 (如﹕`-A POSTROUTING')﹐或以 `-I' 插入至前端(如﹕`-I PREROUTING')。

您可以指定您要做 NAT 的封包來源地址 (`-s' 或 `--source') 與目的地 (`-d' or `--destination')。這兩個選項後面可以後接一個單一的 IP 地址 (如﹕192.168.1.1)﹐或一個名稱 (如﹕ www.gnumonks.org)﹐或一個網路地址 (如﹕192.168.1.0/24 或 192.168.1.0/255.255.255.0)。

您也可以指定要比對的傳入 (`-i' 或 `--in-interface') 和傳出 (`-o' or `--out-interface') 界面﹐但哪一個界面可以指定則取決於您要將規則寫入哪一個鏈去﹕對於 PREROUTING ﹐您可以選擇傳入界面﹐但對於 POSTROUTING (以及 OUTPUT)﹐您可以選擇傳出界面。如果您不小心用錯了﹐ iptables 就會給您一個錯 。

5.2 關於挑選哪些封包來 mangle 的細節

我前面已經說過﹐您可以指定來源和目的地地址。如果您省略來源地址的選項﹐那麼就泛指任何來源。如果您省略目的地地址﹐則泛指所有目的地地址。

您還可以指定一個特定協定 (`-p' or `--protocol')呢﹐例如 TCP 或 UDP﹕只有這些協定的封包 符合該規則。其主要原因是﹐指定 tcp 或 udp 協定可以允許更多選項﹕尤其是 `--source-port' 與 `--destination-port' 選項 (縮寫為 `--sport' 與 `--dport' )。

這些選項可以讓您指定只有哪些特定來源和目的地埠口的封包 符合該規則。這在您要重導 web 請求 (TCP port 80 或 8080) 但又怕影響其它封包的時候﹐就很好用了。

這些選項必須接在 `-p' 選項的後面(這會在為該協定載入共享函式庫時有副作用)。您可以使用埠口號碼﹐或者是在 /etc/services 檔中的名稱。

所有這些您能選擇的封包之不同 質﹐都詳細列在那個詳細得有點恐怖的 manual page 中了(man iptables)。


Next Previous Contents