伺服器架設篇 - RedHat 9

第十四章、簡易 NAT 伺服器

簡單的 NAT 設定,可以讓您輕鬆的達到頻寬分享的目的呢!

最近更新時間: 2003/09/09

本文資料主要針對 RedHat 9 的系統進行說明,要注意的是,RedHat 9 與 Red Hat Enterprise Linux (RHEL) 是完全不同的東西!RedHat 9 在 2003 年推出,在 2004 年就不再維護了!這部份網站更新到 2005 年,也沒有再維護過! 因此,建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。那為何還需要編輯 RedHat 9 的資料呢? 鳥哥只想要做個自己曾經撰寫過的文件內容保存而已囉! ^_^!最新文章請前往鳥站首頁查閱囉!
在開始這個章節之前,您務必要讀過『簡易防火牆』那一章節,否則這篇文章裡面很多的資料將會無法理解喔!好了,那麼 NAT 是什麼?是 Network Address Translation 的縮寫,這玩意很有趣,因為他可以讓您的 Linux 提供至少最簡單的 IP 分享器的功能!讓一部 Linux 主機可以提供整個區域網路(LAN)內的電腦來分享網路頻寬,也就是區域內部的電腦通通都可以透過 NAT 主機來達到多人上網的目的吶!這篇文章其實主要是簡易防火牆的延伸就是了!

什麼是 NAT 呀:

    我想,大家對於 NAT 一定是有所耳聞才對,不過,到底什麼是 NAT 呢?NAT 其實是 Network Address Translation 的簡寫,字面上的意思是『網路位址的傳送』,他主要的功能就是在提供內部私有網路的電腦之頻寬分享了。簡單的說,NAT 的功能就是『 IP 分享器』咯!(註:NAT 主機的功能相當的多,不過,這裡我們僅說明頻寬分享的部分!)。
     

    NAT 的功能
     
    我們由 網路基礎 當中知道,要能夠連接上 Internet 必須要具有『公共 IP (Public IP)』才行,內部私有 IP (Private IP) 是不能直接與 Internet 進行資料溝通的。好了,今天假設您是一家公司的主管,或者是一間學校的資訊主任,而且您所負責的單位內有 20 部電腦好了,這 20 部電腦都需要能夠連上 Internet ,並可以進行任何 Internet 的服務要求,請問您是否需要具備有 20 個公共 IP 呢?如果真的要提供 20 個公共 IP 的話,以最經濟的價格來說,我們可以申請 Seednet 的 512/64 (下載/上傳) 撥接制 ADSL ,每個專線都可以具有五個 IP ,因為我們有 20 部主機,所以就需要四條電話線~呵呵!怕了吧!光是接線與申請 ADSL 的流程就會讓人崩潰,更不用說申請到之後還需要在每一部電腦上面設定撥接、管制電腦使用性、進行防毒等等的工作,光是用想的,就已經很頭大了,更不用說實際去作.....
     
    那麼應該要怎麼辦呢?比較聰明的朋友已經想到要去買 IP 分享器來分享網路頻寬了!那麼 Linux 是否能夠達到 IP 分享器的功能!?當然可以啦!那就是 NAT 主機的能力之一囉!我們在之前的 Router 設定當中,提過路由的概念了,封包的傳送主要是透過路由的資訊,但是,私有路由是不能直接與 Internet 溝通的啊!因此用 Linux 作為 Router 時,如果 Linux 主機本身就是僅有私有 IP ,自然也就無法直接連接到 Internet 上面去了。
     
    到底該如何是好?呵呵!這個時候就得要回頭談一談 TCP 封包的概念咯。由 網路基礎 章節裡面提到的 TCP 封包的架構圖,我們可以發現 TCP 封包裡頭有來源與目的地的 IP 及 port 的資訊在 Header 裡面,那麼如果透過某些技術,來改變 TCP 封包的 header 呢?如果能夠將 TCP 封包的來源 IP 由本來的 Private IP 變成 Public IP 的話,不就可以連接到 Internet 了嗎?!呵呵!沒錯沒錯!談到重點了!就是這樣啦!NAT 主機的重要功能之一就是將來自內部 Client 端電腦封包的 Header 的 IP 『偽裝』成公共 IP ,而提供 Client 端連上 Internet 的一個方法!(註:當然啦, IP 分享器也是使用同樣的道理!)。那麼 Linux 是用什麼機制達到這樣的功能?還記得簡易防火牆設定當中提到的 iptables 吧?!iptables 可以進行封包的分析,當然,他還可以進行封包資訊的修改呢!那麼整個流程是如何呢?如下圖所示,當我的區域內的具有 192.168.1.100 的 client 要對外連線的時候:
     
     
    1. 這個 client 的 gateway 設定為 NAT 主機,所以當要連上 Internet 的時候,該封包就會被送到 NAT 主機啦,這個時候的封包 Header 之 source IP 為 192.168.1.100 喔;
    2. 而透過這個 NAT 主機,她會將 client 的對外連線封包的 source  IP ( 192.168.1.100 ) 偽裝成 ppp0 ( 假設為撥接情況 )這個介面所具有的公共 IP 囉,因為是公共 IP 了,所以這個封包就可以連上 Internet 了!同時 NAT 主機並且會記憶這個連線的封包是由哪一個 ( 192.168.1.100 ) client 端傳送來的;
    3. 由 Internet 傳送回來的封包,當然由 NAT 主機來接收了,這個時候, NAT 主機會去查詢原本記錄的路由資訊,並將目標 IP 由 ppp0 上面的公共 IP 改回原來的 192.168.1.100 ;
    4. 最後則由 NAT 主機將該封包傳送給原先發送封包的 Client 囉!
     
    如果是在 iptables 的內建 table 當中,與 NAT 有關的就是 nat table 的 POSTROUTING 那個鏈了!就是簡易防火牆當中的圖九的示意圖喔!也就是說,整個封包其實只有經過 NAT 主機的 iptables 機制在偽裝 IP 與修改路由資訊而已,並沒有進入 NAT 主機內部啦! ^_^!由上面的資訊我們可以知道一件事,那就是:『您的 NAT 主機至少需要有一個私有 IP 與一個公共 IP 才行』喔!而且,『NAT 主機,一般來說,也是一部 Router 喔!』如果 Router 兩邊都是私有 IP 或都是公共 IP 時,Linux 主機只要有 Router 的功能即可,若是兩邊分別為公共與私有 IP 時,才需要以 iptables 來啟動 NAT 的功能
     
    其實 NAT 的功能也可以簡單的這樣想:『當您在私人賽車場上比賽的時侯,不必管您是否有註冊過的車牌﹔但開到馬路上卻非得要一個監理站核發的車牌不可。如果您要將跑車開到街道上,必須要改掛一個合法的車牌。這時候,賽車場老闆(NAT)自有辦法幫您弄一個就是了。』!這樣可以瞭解了嗎?
     

    連線示意圖:
     
    由上面的說明您應該可以瞭解了吧?!沒錯,您的 NAT 主機上面,至少需要『兩塊網路介面』請注意,鳥哥說的是『網路介面』而不是『網路實體介面卡』呦!以撥接為例,由於撥接之後會產生 ppp0 這個撥接後產生的網路介面,加上原本的實體網路介面,那麼自然就有兩個以上的網路介面囉!這麼說應該很容易瞭解了嗎?底下我以兩塊實體網路介面卡的佈線情況作為連線的示意圖,至於一塊網路卡進行 NAT 的圖示,將在待會說明囉。

圖一、兩塊網路卡的 NAT 主機配置
    在上面的圖示當中,很清楚吧!我們的 Linux 共有兩塊實體介面卡,一塊接在 數據機 上面,一塊接在 Hub/Switch 上面,並且以此 Hub/Switch 連接所有的區域網路內的電腦,以組成內部的私有網域!鳥哥個人是比較喜歡這樣的接線方式啦!不過,人人各有其所好,而且這樣的情況也不見得適合所有的人,所以還是得瞭解一下其他種類的連接方法!好吧,等一下再告訴您~ ^_^""
     

    核心版本:
     
    我們在簡易防火牆設定當中就提過了,核心與防火牆機制是有關係的,也就是:
     
    • Kernel 2.2.xx :使用 ipchains 做封包偽裝的技術;
    • Kernel 2.4.xx :使用 iptables 做封包偽裝的技術!
     
    所以,還是請仔細的檢查一下您的核心版本吧!(用 uname -r 來察看)。簡單的判別方法,如果是 Red Hat 7.0 ( 含 7.0 )以前的版本,使用的是 2.2.xx 的核心,自然只有 ipchains 而已,而如果是 Red Hat 7.1 ( 含 7.1 ) 以後的版本,則使用的是 Kernel 2.4.xx ,因此最好使用 iptables 的技術!因為 2.4.xx 的 IP 處理模組當中,大部分都是針對 iptables 來作為處理的軟體, ipchains 的模組已經不含在 2.4.xx 裡頭了!由於我是以 Red Hat 7.2, 7.3 與 9 作為範例的,所以自然以 iptables 為準囉!如果還想要以 ipchains 來進行架設 NAT 的朋友,不妨參考一下底下這篇:
       

    誰需要 NAT 架設:
     
    由前面 NAT( Network Address Translation ) 的功能介紹,我們知道他可以作為頻寬分享的主機,當然也可以管理一群在 NAT 主機後面的 Client 電腦!呵呵!所以 NAT 的功能至少有這兩項:
     
    • 頻寬分享:我想,架設 NAT 的朋友大部分都是希望可以達到頻寬分享的目的的!這畢竟是 NAT 主機的最大功能囉!
    • 安全防護:咦!關安全防護什麼事呀!?別忘了, NAT 之內的 PC 連線到 Internet 上面時,他所顯示的 IP 是 NAT 主機的公共 IP ,所以 Client 端的 PC 當然就具有一定程度的安全了!最起碼人家在進行 port scan 的時候,就偵測不到您的 Client 端的 PC 啦!安全多了!

NAT 的設定:

    NAT 的設定可以使用一塊網路卡,當然也可以使用兩塊網路卡啦!鳥哥個人還是比較建議使用兩塊網路卡來完整的隔開私有網域的內外部分,畢竟還是比較安全一些!不怕內部私有網域的高手作怪啊! ^_^
     

    一塊網路卡的 NAT 架設:


     
    剛剛上面我們已經提過了,要架設 NAT 的話,只要『兩塊網路介面』就夠了,倒不一定需要兩塊『實體網路卡( NIC )』,是的!所以鳥哥先以較為便宜的方式(因為少了一塊網路卡呀!)來介紹 NAT 的架設!底下是我們介紹的安裝步驟:
     
    1. 關閉一些系統服務的 port

    2. 為了安全起見,還是檢查一下吧!首先,我們需要先來瞭解一下我的 Linux 主機的功用為何?!如果只是單純的要作為 NAT 的話,那麼 Linux 主機所開放的 port 是越少越好!鳥哥可不希望您開機了大約一個星期,就開始苦苦哀嚎說自己的主機無法以 root 登入了......。關閉 port 的方法與選擇『系統一定需要的服務』的介紹在 限制連線的埠口 裡面已經說的很清楚了!我以 Red Hat 9 來說明:
      1. 使用 ntsysv 設定開機時啟動的服務項目:
      [root@test root]# ntsysv
      只要選擇底下幾個服務即可:
      atd, cron, iptables, keytables, network, random, syslog, xinetd

      2. 重新開機讓設定生效:
      [root@test root]# reboot

      3. 觀察目前的 port 開啟多少個?
      [root@test root]# netstat -an | more
      Active Internet connections (servers and established)
      Proto Recv-Q Send-Q Local Address           Foreign Address         State
      Active UNIX domain sockets (servers and established)
      Proto RefCnt Flags       Type       State         I-Node Path
      unix  7      [ ]         DGRAM                    944    /dev/log
      unix  2      [ ]         DGRAM                    3162963
      unix  2      [ ]         DGRAM                    739227
      unix  2      [ ]         DGRAM                    739189
      unix  2      [ ]         DGRAM                    1070
      unix  2      [ ]         DGRAM                    953
      unix  2      [ ]         STREAM     CONNECTED     690
      # 注意:盡量不要看到有 LISTEN 的咚咚!最多就是有 ssh 就好了!除非您有其他的服務!

       
    3. 實體線路配置圖

    4. 怎麼安裝連線呢?趕快買線材來架設吧!由於 Linux 主機只有一張網路卡,所以所有的裝置(包括 Linux 主機, client 端電腦, 數據機等等)都需要接在 Hub/Switch 上面,有點像底下的樣子:
       

      圖二、一塊網路卡的 NAT 主機配置
       
      這個時候請特別留意啦!如果是使用 ADSL 撥接制的話,那麼在 Linux 主機上應該會有安裝 rp-pppoe 這個東西,並且在撥接之後會產生 ppp0 這個網路介面,同時不要忘了,啟動網路卡的時候不是就已經有 eth0 這個實體網路界面的設定嗎?,嘿嘿!那麼我們不是就有兩個網路介面了嗎?!沒錯!就是這樣!但是,如果是 Cable 或者是其他的固定制的方法的話,那麼跟這個也差不多啦!不過由於 Cable 的方式沒有自動產生兩個以上的網路界面,所以就需要設定 IP Alias 囉,也就是 eth0:0 啦!亦即就是以 eth0 跟 eth0:0 這兩個介面來連線囉!反正,只有一張網路卡,也可以進行 NAT 的啦! ^_^""
       
    5. 設定網路介面

    6. 我們分別以撥接、 Cable 及固定 IP 為例啦!
       
        ADSL撥接制 :
        在進入 Linux 並啟動網路卡之後,我們會得到 eth0 這個界面,再加上撥接之後的 ppp0 界面,所以我們就已經會有個兩網路介面,分別是 ppp0, eth0!此外,我預計的私有網域的 IP 選用 192.168.1.0/24 這個 C Class 的網域,其中, Linux NAT 主機的私有 IP 選擇為 192.168.1.2 這一個!
         
        • 第一個網路介面 -- ppp0 -- 的設定:這個東西應該不難吧!就是我們在 連上 Internet 一文裡頭提到的關於 rp-pppoe 的撥接上網方式。

        •  
        • 實體網路卡 -- eth0 -- 的設定:請注意,如果您要同時使用 ppp0 及 eth0 ,那麼請在撥接之前啟動 eth0 吧!以取得內部的 eth0 這個網路界面的設定!( 註:如果您不知道如何設定的話,那麼就請照我的方式來填寫即可 ):
        • [root@test root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
          DEVICE=eth0
          BOOTPROTO=static
          BROADCAST=192.168.1.255
          IPADDR=192.168.1.2
          NETMASK=255.255.255.0
          NETWORK=192.168.1.0
          ONBOOT=yes <==重要的地方在這裡!請設定為 yes 呦!
          # 如果您不曉得應該如何設定的話,就照上面的打就好了!
           
        Cable 浮動式:
        在 Cable 的情況又不太相同了!這個時候只有兩塊網路介面,分別是 eth0, eth0:0 囉!設定為:
         
        • 實體網路卡 -- eth0 -- 的設定:請注意,由於 cable 使用的是 DHCP 主機,所以這個時候請特別留意您底下的設定呦!( 註:如果您不知道如何設定的話,那麼就請照我的方式來填寫即可 ):
        • [root@test root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
          DEVICE=eth0
          BOOTPROTO=dhcp <==這裡最重要!
          BROADCAST=192.168.100.255
          IPADDR=192.168.100.1
          NETMASK=255.255.255.0
          NETWORK=192.168.100.0
          ONBOOT=yes
          # 如果您不曉得應該如何設定的話,就照上面的打就好了!
           
        • 虛擬網路介面 --eth0:0 的設定:在 IP Alias 的設定當中,我們已經在 Router 當中說明過多次了!請務必回到該章節再閱讀一次,如果您不記得如何設定的原理的話!
        • [root@test root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0:0
          DEVICE=eth0:0
          BOOTPROTO=static
          BROADCAST=192.168.1.255
          IPADDR=192.168.1.2
          NETMASK=255.255.255.0
          NETWORK=192.168.1.0
          ONBOOT=yes 
          # 如果您不曉得應該如何設定的話,就照上面的打就好了!
           
        固定 IP 的情況:
        跟 cable 的設定幾乎一模一樣,只有兩個介面,分別是 eth0, eth0:0,需要特別注意的是 eth0 這個東西,您必須要『填寫正確的 IP, netmask, network, broadcast 而且 ONBOOT=yes 才可以!』,而 eth0:0 則與上面相同!
         
        啟動私有網域的 IP 網路介面:
        啟動之後順便觀察一下路由的資訊!
        [root@test root]# ifdown eth0
        [root@test root]# ifup   eth0
        [root@test root]# route
        Kernel IP routing table
        Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
        swks81-1.adsl.s *               255.255.255.255 UH    0      0        0 ppp0
        192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
        127.0.0.0       *               255.0.0.0       U     0      0        0 lo
        default         swks81-1.adsl.s 0.0.0.0         UG    0      0        0 ppp0
        # 嘿嘿!這樣就是成功啦!注意,上面這個路由是以 adsl 撥接為例的!
         
    7. 設定其他檔案

    8. 還有一些網路的相關檔案要設定呦!/etc/hosts, /etc/resolv.conf, /etc/sysconfig/network,
      別忘了我們還有其他的檔案要設定呦!很重要的:
      1. 將私有 IP 加入到 /etc/hosts 裡面去吧!
      [root@test root]# vi /etc/hosts
      127.0.0.1     localhost
      192.168.1.1   linux001
      192.168.1.2   linux002
      .......(略)......
      192.168.1.100 linux100
      .......(略)......
      192.168.1.254 linux254

      2. 將 DNS 的 IP 寫到 /etc/resolv.conf 裡面去,這裡以中華電信跟 Seednet 為例
      [root@test root]# vi /etc/resolv.conf
      nameserver 168.95.1.1
      nameserver 139.175.10.20

      3. 設定主機名稱跟 gateway 與否:
      [root@test root]# vi /etc/sysconfig/network
      NETWORKING=yes
      HOSTNAME=your.domain.name <==寫您的主機名稱
      GATEWAY= <==除非您是固定制的,不然這個不要填入任何東西!

       
    9. 設計 NAT 的 shell scripts

    10. 直接將一些指令寫在 scripts 裡頭執行較快啦!正確的情況之下,目前您的 Linux 主機上面應該是已經可以正常的對外連線的才對!而且內部也已經可以正確的連線成功了才對!如果還沒有成功的話,請趕快再到 區域網路設定 裡頭去查一查資料去!好了,接著下來只要執行一個程式,嘿嘿!就可以將 NAT 啟動喔!這個就好玩了!因為基本上,我們使用的是 iptables 這個東西,自然就需要這個 ip_tables 的模組了!而查看模組與載入模組的指令分別為 lsmod, modprobe 哩!好了,您可以直接在命令提示字元底下進行工作:
      echo "1" > /proc/sys/net/ipv4/ip_forward
      modprobe ip_tables
      modprobe ip_nat_ftp
      modprobe ip_nat_irc
      modprobe ip_conntrack
      modprobe ip_conntrack_ftp
      modprobe ip_conntrack_irc
      /sbin/iptables -F
      /sbin/iptables -X
      /sbin/iptables -Z
      /sbin/iptables -F -t nat
      /sbin/iptables -X -t nat
      /sbin/iptables -Z -t nat
      /sbin/iptables -P INPUT   DROP
      /sbin/iptables -P OUTPUT  ACCEPT
      /sbin/iptables -P FORWARD ACCEPT
      /sbin/iptables -t nat -P PREROUTING  ACCEPT
      /sbin/iptables -t nat -P POSTROUTING ACCEPT
      /sbin/iptables -t nat -P OUTPUT      ACCEPT
      /sbin/iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/24 -j MASQUERADE
      還記得我們在簡易防火牆設定裡面有提供一支 script 吧?那支 script 名為 iptables.rule ,該 script 同時可以提供 NAT 的功能喔!完整的 script 請前往該章節觀看,這裡鳥哥僅以 ADSL 撥接的 NAT 主機為例來介紹需要更改的地方:
      [root@test root]# cd /usr/local/virus/iptables
      [root@test iptables]# vi iptables.rule
      #!/bin/bash
      #...(略)...
      # 設定對外的網路介面
       EXTIF="ppp0"
      # 設定對內的網路介面與內部私有網域的設定
       INIF="eth0"
        INNET="192.168.1.0/24"        # This is for NAT's network
      #....(略)....
        if [ "$INIF" != "" ]; then
              /sbin/iptables -A INPUT -i $INIF -j ACCEPT
              echo "1" > /proc/sys/net/ipv4/ip_forward
              /sbin/iptables -t nat -A POSTROUTING -s $INNET -o $EXTIF -j MASQUERADE
        fi
      #...(略)...
      這支程式當中,只要修改 EXTIF 及 INIF 與內部網域表示方法 (INNET) ,再藉由最後面那一行設定偽裝(MASQUERADE)的功能,呵呵!整個 NAT 以及基本的主機防護就已經 OK 囉!相當的簡單吧!詳細的 iptables.rule 的安裝方法,請往前翻到簡易防火牆設定當中去搞定喔!^_^!如果執行無誤,就可以將這支 script 寫在您的 /etc/rc.d/rc.local 裡面囉!
       
    11. Client 端的設定參數:包含的是網路的設定參數而已!這個等一下我們在用戶端設定當中再講!
     

    兩塊網路卡的 NAT 架設


     
    真是的,這個部分的連線架設在 區域網路連線 當中已經提過很多遍了!這裡不再重複的說明!僅列出幾個重要的地方,基本上,跟剛剛一張網路卡的設定方式幾乎完全相同,只是那個 eth0:0 變成了 eth1 而已啦!鳥哥的設定為:
     
    • eth0 為對內的實體網路卡,具有私有 IP ,其 IP 為 192.168.1.2 。
    • eth1 為對外的實體網路卡,被用來進行 ADSL 的撥接,所以開機的時候不要設定 on !
     
    同樣的,我們的設定方式為:
     
    1. 關閉一些系統服務的 port :與前一節相同!

    2.  
    3. 實體線路配置圖:與圖一的配置相同。

    4.  
    5. 設定網路介面

    6. 重要的地方在安裝第二塊網路卡!安裝網路卡的相關技巧請前往 連上 Internet 參考!不過,對於第二塊網路卡的安裝,在這裡有些建議:基本上,第二張網路卡最好不用使用與第一張相同晶片的卡,例如您第一張卡使用 RTL 8139,那第二張卡最好使用別的卡。因為鳥哥曾經發現,在鳥哥的 RedHat 6.1 英文版中,安裝兩塊相同的 ( 同公司出的 )  RTL8139 ,結果竟然兩張卡的輸出輸入都是經由第一張!也就是說,第二張卡根本就沒有用處!並且,也很容易發生 eth1 與 eth0 捉錯的情況!所以,請記得,『第二張網路卡盡量不要使用與第一張網路卡相同晶片的卡!』當然,您要使用同一個晶片的網路卡也是可以啦!目前我的機器上面就是使用兩塊 RTL8139 的網路卡。不過,在安裝的時候請特別留意,不要同時安插兩塊,最好是一塊安裝完畢之後,再安裝另一塊!會比較好一點啦!安裝的步驟可以是(請注意,我以 ADSL 撥接為例的,其中, eth0 為對內, eth1 為對外,請依照您的設定來修正呢!):
       
      • 關機、硬體安裝:這個不用再提了吧!,先關機,然後拆開外殼,插入PCI網路卡即可;
      • 開機、硬體掃瞄:然後再開機,而於開機的過程中,您的 Linux 會主動去找到這一張網路卡(如果這張卡是有被 Linux 支援的!);
      • 安裝網路卡驅動程式:如果在上一步驟中,您的網路卡並不能被捉到,哪就比較傷腦筋!請到連上 Internet 參考網路卡的驅動程式安裝方法
      • 檢視設定 /etc/sysconfig/network-scripts/ifcfg-eth1:在安裝完了網路卡的驅動程式之後,在 /etc/sysconfig/network-scripts/ 中,應該會有 ifcfg-eth1 這一個檔案。請設定他吧!因為是對外卡,我這裡假設他是利用 ADSL 撥接的,所以可以是這樣:
      • [root@test root]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
        DEVICE=eth1
        BOOTPROTO=static
        BROADCAST=192.168.0.255
        IPADDR=192.168.0.2
        NETMASK=255.255.255.0
        NETWORK=192.168.0.0
        ONBOOT=no <==這裡很重要!對外用來撥接的卡不要在開機的時候啟動啦!
         
      這樣就成功囉!很簡單吧! ^_^""
       
    7. 設定其他檔案

    8. 其他一些網路的相關檔案也要設定!亦即/etc/hosts, /etc/resolv.conf, /etc/sysconfig/network,設定的方式跟前一小節相同!
       
    9. 設計 NAT 的 shell scripts

    10. 基本上,設定的方式跟上面也是一模一樣的啦!您依舊可以僅使用前一小節的 script 來進行 NAT 的設定,只是要注意那個粗體字部分的設定,如果您跟我的情況不同,那麼就需要修改一下啦!趕快 下載 script 吧!
       

    觀察路由資訊:


     
    在整個 NAT 的設定當中,最經典的錯誤連線訊息來自於 路由資訊 的錯誤啦!這個在我們的 連上 Internet 網路偵測 文章當中已經說明過了,不過,我們這裡再次提醒一下!免得您又犯了同樣的錯誤了!由於網路在進行連接的時候,都會指定所謂的 router 或者是 gateway 的設定,除非是來自於廣播的網域之連線。而我們在設定網路時,常常會犯了一個錯誤,那就是指定錯了 Gateway 了!請您參考一下連上 Internet 一文的設定方式,在 ADSL 撥接及 Cable 連線時,請『務必』不要設定 gateway 才好!
     
    再來,請常下達 route 的指令來觀察一下您的 linux 主機的路由設定是否正確呦!

客戶端的設定

在 Client 端的設定真是簡單的可以了!由於我們上面的網域設定的是 192.168.1.0/24 這個 C Class 的私有網域,所以您只要記得幾件事情:
  1. network 設定需要為: 192.168.1.0
  2. broadcast 設定需要為: 192.168.1.255
  3. netmask 設定需要為 255.255.255.0
  4. IP 設定需要為 192.168.1.1 ~ 192.168.1.254 之一,且『不能重複』
  5. Gateway 或者說是 通訊閘 需要設定為您的 Linux 的對內 IP ,以我的例子來說,就是 192.168.1.2 !
  6. DNS 的設定:這個最容易出錯了,您的 DNS 設定需要是您的 ISP 給您的 DNS IP,如果您不知道的話,可以填入 168.95.1.1 這一個中華電信的 DNS 或者是 139.175.10.20 這一個 SeedNet 的 DNS 即可!千萬不要設定為 192.168.1.2 呦!會連不出去!
大致上就是這樣啦!至於 Client 端通常是 Windows ,相關的設定可以前往參考一下區域網路設定一文說!至於 Linux 端則需要查看一下 連上 Internet 裡面的固定 IP 的設定啦!

安全性:

請注意,在這個例子當中,我們並沒有使用到封包分析的動作,有的只有 IP 偽裝而已,所以:
  • 對於 Client 端來說,由於已經經過了 IP 偽裝的功能,所以基本上,您通過 NAT 主機連出去的封包的 IP 都會是『 NAT 主機對外的公共 IP 』,因此對於內部 Client 端而言,由於網路 Cracker 幾乎都是根據 IP 來進行破壞,而因為您連出去的封包 IP 是 NAT 主機的公共 IP ,自然您的 Client 端就比較安全多了!基本上, Client 端在 NAT 之內,沒有安裝防火牆軟體也還好,但是『防毒軟體一定要安裝!』因為您畢竟會接收電子郵件呀等等的,所以還是可能會中毒啦!!
  • 對於 Server 端來說,我們僅僅設定一些簡單的防火牆規則,而且在原本的 iptables.rule 當中還預設開啟了許多的埠口,所以其實這樣的一個主機並不是十分的安全的,因此,您最好還是自行將 iptables.rule 內的最後面的幾個開放的埠口給他註解掉才好吶!(如果您的 NAT 主機僅想要負責頻寬分享的功能的話!)

課後練習

  • 請簡單的說明 NAT 主機的用途與運作原理。
  • 假設我是您公司的上層主管,我知道我們單位內共有 100 部電腦 (Windows 作業系統),其中共分為兩大部門,這兩大部門的資料是互相獨立的,並且兩大部門各自擁有一部 Linux 主機在負責檔案分享的工作(就是未來會談到的 SAMBA 主機)。不過,我們公司僅有一條對外的 ADSL 雙向 512 的專線而已。現在,我命令您規劃全公司 100 部電腦都可以連上 Internet ,而且只多給您一部 Linux 主機,並且原有的 Linux 主機功能 ( 就是 SAMBA 啦 ) 還是存在。請問:
    1. 公司的網路規劃的示意圖為何?
    2. 多出來的那一部 Linux 主機用途為 ADSL 連接與內部私有網路的連接,該 Linux 的網路參數為何?
    3. 兩部 Linux SAMBA 主機的網路參數為何?
    4. 兩個部門的網路參數請自行設定
    前往參考解答
修改歷史:
2002/08/15:第一次完成日期!
2003/09/09:重新修改一下版面,使符合近期(2003年中以後)的格式,此外亦增加一題課後練習。
2002/08/15 以來統計人數
其他連結
環境工程模式篇
鳥園討論區
鳥哥舊站

今日 人數統計
昨日 人數統計
本月 人數統計
上月 人數統計