- 分類: 軟體文章
Linux 系統實做 IP 分享器基本功能:NAT
阿寶用之前汰換下來的零件組了台 PC ,使用 Linux 系統 (CentOS) 上的 Samba 服務作為區域網路的檔案分享平台,後來網路線路升級,但是既有的 IP 分享器卻無法支援更快頻關的關係而有了「用 Linux 主機取代 IP 分享器」的想法,在網路上尋找相關文件設定好功能之後,原先需開啟兩部機器的情況現在只要一部就可以了 (笑) 。
希望 Linux 系統能做到的,IP 分享器具備功能
上圖是阿寶家裡的網路連接環境,以下三種功能先前是透過 IP 分享器功能來實現:
- 具備 NAT 功能,讓區域網路中所有設備都能存取網際網路。
- 遊戲主機、 ipod touch、Notebook…等設備透過 DHCP 方式配發 IP 位址,減少設定流程。
- 支援動態 DNS 架站服務,不用申請付費 domain 也能瀏覽到自行架設的網站。
在 Linux 系統上要實現上述內容則是透過以下所列的服務:
- NAT及防火牆功能:iptables
- DHCP動態配發 IP 位址:dhcpd
- 與動態 DNS 服務網站連結:ddclient
在硬體設備上阿寶建議使用兩張網路卡,一張做為對外 (網際網路) 連線使用,另一張則做為區域網路溝通使用,在管理上面會比較方便。以下的內容都是在終端機模式下以 root 權限進行。
使用預寫規則內容建構 iptables,實現 NAT 及防火牆功能
很抱歉阿寶不是專業網管人員,以下的設定資料來自是網路上大大的心血結晶 XD
著名的 Linux 書籍作者「鳥哥」在網站上提供了簡易的防火牆規則設定檔,網友只要依照自己的情況更改部分內容後就可以使用,有關 iptables 服務的教學請參考「鳥哥的 Linux 私房菜 -- Linux 防火牆與 NAT 主機」文章,防火牆規則下載位於:http://linux.vbird.org/download/index.php?action=detail&fileid=43
下載下來之後的檔案:iptables.rule 阿寶是按照內文將文件放在 "/usr/local/virus/iptables/ "資料夾下,如果沒有這個資料夾請先行建立:
mkdir -p /usr/local/virus/iptables
接著依照自己的情況編輯 iptables.rule 檔案的內容,以下就需要更動的地方作說明:
- 第56行:EXTIF="eth1" <-- 設定對外聯絡的網路卡設備號碼,如果朋友跟阿寶一樣是透過 pppoe 連接網路的話請改成 "ppp0" 。
- 第58行:INIF="eth0" <-- 設定內部網路的網路卡設備名稱,請依照自己的情況設定。
-
第152 - 158行:設定可以外界可以連線進入的服務內容。範例中已經寫了幾組常用的設定,如果有需要的話移除最前面的 "#" 符號就可以。如果想多增加服務的內容也可以按照內容增加。例:我想新增一個p2p下載服務用的聯絡埠號是15000,那可以寫成
iptables -A INPUT -p TCP -i $EXTIF --dport 15000 -j ACCEPT # p2p"
- 第205行:上述的內容是以Linux系統本身同時是網路服務提供主機的情況,如果第 152 - 158 行所提到服務是由內部網路的其他機器負責的話,請參考這邊的內容,將對外溝通時的tcp/ip埠號轉到提供服務的機器ip,以及對應埠號。(一般 IP 分享器的設定會以「虛擬伺服器」、「應用程式伺服器」等名稱表示。)
延伸閱讀:常用之TCP/IP通訊埠請參考:http://tw.myblog.yahoo.com/ccho-blog/article?mid=9
調整好之後將該規則檔賦予可執行的能力:
chmod 755 iptables.rule
執行該規則檔:{code}/usr/local/virus/iptables/iptables.rule{/code}
如果要在開機時一併執行請在 "/etc/rc.d/rc.local" 檔案當中加入
{code}/usr/local/virus/iptables/iptables.rule{/code}
就可以在開機完後實現IP分享功能囉,網路卡中有關預設閘道 (Default Gateway) 的資訊也請移除,避免實施防火牆規則時發生錯誤。
區域網路中其他電腦的設定
完成網路連線,也把網路分享資源及防火牆規則設定好了,那麼其他區域網路中的電腦該怎麼設定才能透過 Linux Server 連上網際網路呢?其實跟一般分享器的設定方法是相同的。阿寶的習慣是將區域網路中的電腦以 Class C 的私人IP 設定好每部主機,重要的資訊如下:
- IP位址 (IP Address):以 Class C 的範圍設定 192.168.1.1~254,最多可以讓 253 部機器透過 Linux 主機連線,而Linux 主機己在區域網路的IP設定為192.168.1.1。
- 網路遮罩 (Submask):一般都設定為 255.255.255.0。
- 預設閘道 (Default Gateway):設定為 Linux 主機的 IP (例:192.168.1.1) ,在區域網路中的機器透過她連接網際網路。
- DNS 設定以各 ISP 所提供的內容為準。Hinet DNS 資訊為:第一組 168.95.1.1,第二組 168.95.192.1。
如果朋友的連線環境比較簡單,或者不想一個一個設定連接資訊的話,也可以透過 DHCP 服務讓 Linux 主機自動配發 IP 位址給區域網路中的設備。設定方式請參考下一頁「Linux 系統實做 IP 分享器基本功能:DHCP」。
思考:本文中所使用的防火牆規則檔在封包控管上面是採「內部對外皆放行,外部對內僅核准特定埠號」的方式,對於已經感染電腦病毒或是木馬程式的內部網路機器是沒有防衛功能的,因此內部網路中的電腦還是要安裝防毒軟體、個人防火牆等防護措施,防堵資安死角。
附錄:設定 pppoe 連接
如果朋友跟我一樣是透過pppoe方式連接上網際網路的話,接下來所提到的 pppoe 設定應該可以幫得上忙:
-
看看系統確認是否有安裝 "rp-pppoe" 套件,可透過輸入以下指令確認有無:
rpm -qa rp-pppoe
如果沒有顯示程式名稱與版本的話就利用 yum 服務安裝程式吧:
yum -y install rp-pppoe
-
開始設定pppoe內容,請輸入:
adsl-setup
- 輸入連線時的使用者名稱,Hinet用戶記得在輸入完用戶編號後加上"@hinet.net"喔!輸入完請按 Enter 進行下一步。
- 使用介面設定:詢問與ATU-R(光纖則是VTU-R)連接的網路卡設備名稱,阿寶的情況是 eth0。
- 設定連接方式,阿寶直接按Enter使用預設值:no。
- 輸入ISP的DNS資料第一組,以阿寶使用 Hinet 的情況是輸入:168.95.1.1。
- 輸入ISP的DNS資料第二組,以阿寶使用 Hinet 的情況是輸入:168.95.192.1。
- 輸入 pppoe 的連線密碼,輸入完按 Enter 繼續。
- 再輸入一次剛剛的密碼做確認,輸入完後按Enter繼續。
- 是否讓一般使用者可以設定?這邊輸入 "no"。
- 是否使用內定的防火牆?因為已經有自訂的防火牆規則關係所以不使用,請輸入"0"。
- 是否要在開機時就啟動?阿寶的習慣是在 "/etc/rc.d/rc.local" 檔案中輸入內容來啟動,所以這邊輸入 "no",朋友希望開機就上線的話可以選擇 "yes"。
- 最後會將剛剛所輸入的資料列出,如果都沒問題就輸入 "y" 儲存內容。
設定好之後輸入:
adsl-start
這個時候數據機會有燈號閃爍,等到終端機執行完上述指令後可以輸入以下內 容,如果看到送出的封包有順利傳遞的話就成功囉!
ping 168.95.1.1