簡易 NAT 伺服器

zt:from鳥哥的 Linux 與 ADSL 私房菜
http://linux.vbird.org/linux_server/0320nat.php

--------------------------------------------------------------------------------

簡易 NAT 伺服器
最近更新日期:2003/09/09
  在開始這個章節之前,您務必要讀過『簡易防火牆』那一章節,否則這篇文章裡面很多的資料將會無法理解喔!好了,那麼 NAT 是什麼?是 Network Address Transmission 的縮寫,這玩意很有趣,因為他能够讓您的 Linux 提供至少最簡單的 IP 分享器的功能!讓一部 Linux 主機能够提供整個區域網路(LAN)內的電腦來分享網路頻寬,也就是區域內部的電腦通通都能够透過 NAT 主機來達到多人上網的目的吶!這篇文章其實主要是簡易防火牆的延伸就是了!
  
什麼是 NAT 呀:
  :NAT 的功能
  :連線示意圖
  :核心版本,
  :誰需要 NAT 架設,
NAT 的設定:
  :一塊網路卡的 NAT 架設:
  :兩塊網路卡的 NAT 架設:
  :觀察路由資訊:
客戶端的設定: Windows, Linux,
安全性:
課後練習:

--------------------------------------------------------------------------------
什麼是 NAT 呀:
我想,大家對於 NAT 一定是有所耳聞才對,不過,到底什麼是 NAT 呢?NAT 其實是 Network Address Transmission 的簡寫,字面上的意思是『網路位址的傳送』,他主要的功能就是在提供內部私有網路的電腦之頻寬分享了。簡單的說,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 要對外連線的時候:
 

 
這個 client 的 gateway 設定為 NAT 主機,所以當要連上 Internet 的時候,該封包就會被送到 NAT 主機啦,這個時候的封包 Header 之 source IP 為 192.168.1.100 喔;
而透過這個 NAT 主機,她會將 client 的對外連線封包的 source IP ( 192.168.1.100 ) 偽裝成 ppp0 ( 假設為撥接情況 )這個介面所具备的公共 IP 囉,因為是公共 IP 了,所以這個封包就能够連上 Internet 了!同時 NAT 主機並且會記憶這個連線的封包是由哪一個 ( 192.168.1.100 ) client 端傳送來的;
由 Internet 傳送回來的封包,當然由 NAT 主機來接收了,這個時候, NAT 主機會去查詢原本記錄的路由資訊,並將目標 IP 由 ppp0 上面的公共 IP 改回原來的 192.168.1.100 ;
最後則由 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)自有辦法幫您弄一個就是了。』!這樣能够瞭解了嗎?

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!