鳥哥的 Linux ADSL 私房菜


NAT Server (適用於 ipchains)
(請注意,若您使用 kernel 2.4 ,請前往新文件)
最近更新日期:2001/08/14
虛擬 IPNAT 技術
安裝第二塊網路卡
區域網路與 Internet 連線示意圖
架設 NAT
問題討論


虛擬 IPNAT 技術
當你已經學會使用  ipchains 這一個 Linux 的功能來實現 IP 偽裝和為網路建立簡單的防範之後(這個功能等一下就會提到了),你就可以利用 Linux 來為您做更多的事情﹕其中有一個非常好的功能叫 NAT (Network Address Translating) 。使用 NAT有什麼好處呢﹖

首先﹐如果您當初架設的網路使用了私有位址(就是虛擬 IP),而現在又想連上 internet ,雖然您可以對您的網路重新分配 IP 地址﹐但這樣做是非常費心和隱藏的問題多多。這時候﹐ NAT 就可以幫到您了﹕您只需用一台 Linux 主機安裝兩片網路卡﹐一張使用合法 IP 地址來擔當對外地連線﹐另外一張使用私有 IP 負責和內部網路溝通。

然後﹐您為那張對外連線的網卡建立多個 IP alias ﹐當收到傳給那些 IP alias 的請求的時候﹐可以把這些請求通過 NAT 轉送給內部真正負責網路服務的伺服器﹐而那些伺服器根本無需更改 IP 地址﹐依舊使用原來的私有 IP 就可以。

使用 NAT 還有一個好處是﹐可以分流網路負擔 (load balancing) ﹐也就是說﹐您可以將同一個 IP alias 的請求分別導向好幾台執行相同服務的伺服器。這樣對於處理大量數據的服務是非常好用的。



安裝第二塊網路卡
好了,由『區域網路的架構』及上面提到的『NAT主機的設定』都可以知道,由於我們需要提供區域內的虛擬網路系統(區域網路,LAN),所以在你的 Linux 主機中應該要安裝兩塊網路卡才是。不過,對於第二塊網路卡的安裝,在這裡有些建議:基本上,第二張網路卡最好不用使用與第一張相同晶片的卡,例如你第一張卡使用 RTL 8139,那第二張卡最好使用別的卡。因為鳥哥曾經發現,在鳥哥的 RedHat 6.1 英文版中,安裝兩塊相同的(同公司出的) RTL8139 ,結果竟然兩張卡的輸出輸入都是經由第一張!也就是說,第二張卡根本就沒有用處!並且,也很容易發生 eth1 與 eth0 捉錯的情況!所以,請記得,『第二張網路卡不要使用與第一張網路卡相同晶片的卡!』

好了!假設你已經安裝了第一塊網路卡,而且也已經由『連上 Internet』的方法連上網際網路了,那接下來就是要開始安裝第二塊網路卡了,如何安裝第二張網路卡呢?依序以下列的步驟安裝就可以完成囉!

  1. 關機、硬體安裝:這個不用再提了吧!,先關機,然後拆開外殼,插入PCI網路卡即可;

  2.  
  3. 開機、硬體掃瞄:然後再開機,而於開機的過程中,你的 Linux 會主動去找到這一張網路卡(如果這張卡是有被 Linux 支援的!),果真如此的話,那在這一步驟中, Linux 會要求你輸入 IP 與 GateWay 等等的 IP 位址,由於這一張網路卡是定義在內部網路使用的介面,因此你可以輸入 192.168.1.2,而 子遮罩網路為 255.255.255.0,DNS與Gateway都寫成自己 192.168.1.2 即可!

  4.  
  5. 安裝網路卡驅動程式:如果在上一步驟中,你的網路卡並不能被捉到,哪就比較傷腦筋!請到前一個頁面參考特殊的網路卡的驅動程式安裝方法。

  6.  
  7. 檢視設定 /etc/sysconfig/network-scripts/ifcfg-eth1:在安裝完了網路卡的驅動程式之後,在 /etc/sysconfig/network-scripts/ 中,應該會有 ifcfg-eth1 這一個檔案。這一個檔案可以設定如下(當然,你也可以依自己的喜好設定):

  8.  
    [root@tsai network-scripts]# more ifcfg-eth1
    DEVICE=eth1
    BOOTPROTO=static
    BROADCAST=192.168.1.255
    IPADDR=192.168.1.2
    NETMASK=255.255.255.0
    NETWORK=192.168.1.0
    ONBOOT=yes
    上面的設定中,就變成了:eth0為對外的連接介面,eth1為對內的連接介面!
     
  9. 啟動第二張網路卡:使用 『ifup eth1』 來啟動之。


區域網路與 Internet 連線示意圖
基本上,我們連線區域網路的連線方法有如下面所示:

透過具有 NAT 功能的 Linux 主機來達成內部網路與外部網路的溝通!詳細的說明可以到『區域網路的架構』來看看。


架設 NAT
好了,說了這麼多,終於要實地的演練 NAT 機器了!如何設定呢?這裡要再提醒一下: 基本上,你要做的事情其實真的很簡單,只要:
  1. 確定第一張網路卡可以連上網際網路:關於對外的連線上網際網路方法請參考『連上 Internet 』的說明,這裡就不多說了;

  2.  
  3. 確定第二張網路卡可以正常的啟動:這是一張具有虛擬 IP 的網路卡,請確定他可以被啟動,另外,這裡的設定是這樣的:
  4. 開啟 IPV4:確定 /etc/sysconfig/network 這個檔案中,有下列這一行FORWARD_IPV4=yes,這是開啟傳送 IP 服務的一個設定。如果沒有的話,請將這一行加入 network 這個檔案中,然後執行:
  5. # /etc/rc.d/init.d/network reload
  6. 確定 ipchains 已經編譯進核心:這個比較麻煩,不過,如果你是用這個網頁提供的方法進行安裝 Linux 的話,這個程式已經被編譯進核心了,所以不用理他沒關係!

  7.  
  8. 設定 192.168.1.0-192.168.1.255 這一個網段的 IP 可進行 NAT 服務:接下來就是直接設定了,只要依序執行底下的咚咚:
  9.  /sbin/ipchains -P forward DENY
     /sbin/ipchains -A forward -j MASQ -s 192.168.1.0/24 -d 0.0.0.0/0
     /sbin/depmod -a
     /sbin/modprobe ip_masq_ftp
     /sbin/modprobe ip_masq_raudio
     /sbin/modprobe ip_masq_irc
     /sbin/modprobe ip_masq_autofw
     /sbin/modprobe ip_masq_cuseeme
     /sbin/modprobe ip_masq_portfw
     /sbin/modprobe ip_masq_quake
     /sbin/modprobe ip_masq_vdolive
     /sbin/modprobe ip_masq_user
     /sbin/modprobe ip_masq_mfw
    這樣就可以了!如果你覺得這樣很麻煩的話,這裡鳥哥已經有一個寫好的批次檔,與說明檔,你可以下載使用,使用的方法就更簡單了:
    # mkdir /usr/driver
    # mkdir /usr/driver/nat <== 建立一個 nat 的子目錄
    # mv nat.sh /usr/driver/nat <== 將檔案移動到 nat 這個目錄下
    # cd /usr/driver/nat
    # chmod 744 nat.sh  <== 修改 nat 成為可執行的檔案
    # ./nat.sh all <== 開始執行
    加上一個參數 all 是讓兩個網域可以連上這部 NAT 主機!
    不要懷疑,這樣就已經作好 NAT 主機的基本設定了!如果你還要設定更精細的防火牆的話,你可以去找一些比較高深的 HOWTO 的文件去鑽研,我這裡就只介紹你可以作為 NAT 的基本設定喔!
     
  10. 將上面的咚咚寫入開機自動執行檔:由於每次開機都要進行一次 NAT 的設定是很煩的一件事,因此我們可以將上面的一大串字全部寫在 /etc/rc.d/rc.local 這個開機自動執行檔案的最底下,如此一來,每次開機就會自動將 NAT 的設定載入你的主機中了!

  11.  
  12. 設定 Windows 的網路設定:好了,主機的部分設定完了,接下來就是各個 Windows 個人電腦的設定了,以 Windows 98 為例,
  13. 設定完成


本章問題討論:
  1. Q:何謂『虛擬 IP 』,與『實體 IP 』或者『固定 IP 』『動態 IP 』有啥不同?

  2. A
    『實體 IP 』:在網路的世界裡,為了要辨識每一部電腦的位置,因此有了電腦 IP 位址的定義。一個 IP 就好似一個門牌!例如,你要去微軟的網站的話,就要去『 207.46.197.101 』這個 IP 位置!這些可以直接在網際網路上溝通的 IP 就被稱為『實體 IP 』了。

    『虛擬 IP 』:不過,眾所皆知的,IP 位址僅為 xxx.xxx.xxx.xxx 的資料型態,其中, xxx 為 1-255 間的整數,由於近來電腦的成長速度太快,實體的 IP 已經有點不足了,好在早在規劃 IP 時就已經預留了三個網段的 IP 做為內部網域的虛擬 IP 之用。這三個預留的 IP 分別為:

      10.0.0.0 - 10.255.255.255
      172.16.0.0 - 172.31.255.255
      192.168.0.0 - 192.168.255.255
    不過,由於是虛擬 IP ,所以當您使用這些地址的時候﹐當然是有所限制的,限制如下:
      私有位址的路由資訊不能對外散播
      使用私有位址作為來源或目的地址的封包﹐不能透過Internet來轉送
      關於私有位址的參考紀錄(如DNS)﹐只能限于內部網路使用
    這給我們架設IP網路做成很大的方便﹐比如﹕即使您目前的公司還沒有連上Internet﹐但不保證將來不會啊。如果使用公共IP的話﹐如果沒經過註冊﹐等到以後真正要連上網路的時候﹐就很可能和別人衝突了。也正如前面所分析的﹐到時候再重新規劃IP的話﹐將是件非常頭痛的問題。這時候﹐我們可以先利用私有位址來架設網路﹐等到真要連上intetnet的時候﹐我們可以使用IP轉換協定﹐如NAT (Network Addresss Translation)等技術﹐配合新註冊的IP就可以了。

    『固定 IP 』與『動態 IP 』:基本上,這兩個東西是由於近來網路公司大量的成長下的產物,例如,你如果向中華電信申請一個商業型態的 ADSL 專線,那他會給你一個固定的實體 IP ,這個實體 IP 就被稱為『固定 IP 』了。而若你是申請計時制的 ADSL ,那由於你的 IP 可能是由數十人共同使用,因此你每次重新開機上網時,你這部電腦的 IP 都不會是固定的!於是就被稱為『動態 IP』或者是『浮動式IP』。基本上,這兩個都是『實體IP』,只是網路公司用來分配給用戶的方法不同而產生不同的名稱而已!

    這裡只有說了一些概念性的東西,基本是,IP是很麻煩的,小弟也不甚瞭解,例如子網路遮罩的計算等等!強烈的建議初學者到 study-area 這個網站去看看,相信對你往後的電腦網路概念有很大的幫助喔!
     

  3. 等待加入新討論:
2002/ 01/01以來統計人數