IP 位址區段轉移之維運技術規畫與設計





  蔣大偉、陳文水、黃勝雄

  中央研究院計算中心網路組
  台北市南港區 11529 研究院路二段一二八號計算中心
  TEL:(02)27899490,27899492
  EMAIL: dawei@sinica.edu.tw,chenws@sinica.edu.tw,huangk@sinica.edu.tw


摘要

本文將依目前網際網路因更換 ISP (Internet Service Provider)而必需改 IP 位址區段 (Address Block)的需求,規畫一個維持網路穩定轉移 IP 位址區段的維運 模式, 以及此模式所需的相關軟硬體組件,協助網際網路使用單位平順地完成新舊 ISP 路徑與 IP 位址區段的移轉工程。





一、研究動機

網際網路 IP 位址所有權已由過去各連線單位所擁有的情形改變為 ISP 所擁有。 在這樣的趨勢下網路使用者或是使用單位 IP 位址的異動已是無法避免的事實。 由於 各個 ISP (Internet Service Provider) 廠商所擁有 IP 位址區段各有不同。 當企業 主因為某些理由(服務不佳、價格太高..)不得不作出更換 ISP 廠商的決定之後,接 下來 IT 部門的人員就得為更換 ISP 而付出相當的成本,如何才能平安地渡過新舊 ISP (IP 位址區段) 移轉的期間而不影響到企業的運轉。特別是那些 Mission Critical 性質 的企業網路(機票定位系統、網路銀行、自動化工廠..)要求近100%的網路可用度, 假使一個原本正常運轉的網路,為了要更換 IP 位址區段而來修改網路上各節點的相關 參數設定值,卻因為一時的疏忽造成了整個企業網路停擺,結果企業蒙受了莫大的損失, 這種狀況應該不是大家所樂於見到的結果。如何才能協助企業平順地完成新舊 ISP (IP 位址區段)的移轉工程?





二、背景介紹

近年來由於網路節點的快速成長,使得網際網路傳輸協定IPv4不符使用。其原因有三: B 等級位址範圍已全部釋出、所有位址空間終將用完、路由器的路徑表太大導致骨幹 路由器無法負荷。

B 等級位址的範圍都已分配出去,一等到 B 等級位址空間用完,勢必造成 C 等級位 址的大量釋出,使得所有位址空間終將用完,同時因為路徑表太大導致骨幹路由器無法負 荷。我們可以用 CIDR (Classless Inter-Domain Routing) 的方法減緩 B 等級位址空間 被用完的速度,要延後位址空間被用完的時間除非增加 IPv4 的位址欄位長度,路徑表太 大導致骨幹路由器無法負荷則可由 BGP-4 暫時解決,雖然 IPv4 似乎還能繼續存活,但 是未來還是不得不走向下一代網際網路傳輸協定 IPv6 。

由於無法增加 IPv4 的位址欄位長度,遂有許多其他的替代方案,用以節省位址空間 的使用。其中一個解決方案是IP Masqerade 也就是在自己的內部網路使用私有位址空間, 然後透過 proxy 與網際網路連接,雖然僅限於部份的應用或協定,但是整個內部網路只需 一個與網際網路連接的 IP 位址即可。IPv4的位址欄位長度為32個位元,共分為A、B、C三 個等級:

	等級	網路組數			網路範圍
	A	7bits = 2^7 = 128組		0-127.xx.xx.xx
	B	14bits = 2^14 = 16384組		128-191.0-254.xx.xx
	C	21bits = 2^21 = 2097152組	192-223.0-254.0-254.xx

在RFC1918中網際網路上負責分配IP位址的IANA (Internet Assigned Number Authority) 將下面三段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位址空間只允許用於內部私有網路中,故對外不必註冊。

較常用的解決方案是使用NAT (Network Address Translation) Router來動態分配 正式的IP位址。當電腦連線到外面的網際網路時才將內部私有的IP位址轉換成正式的IP 位址。因為同一時間連上網際網路的電腦個數將會低於所有內部網路的電腦總數,將正 式的IP 位址動態的分配給需要用到的電腦結束後再收回,可達到節省位址空間的目的。 使用 NAT Router 幾乎與應用程式無關,因為它只在第三層(IP協定層)運作處理。

NAT Router是如何來完成IP位址轉換的功能?

一般說來有靜態和動態二種方式,說明如下:

先定義m 及n 二個參數
m: 需要被轉換的IP位址個數 (私有的IP位址或舊的IP位址)
n: 能夠被分配的IP位址個數 (正式的IP位址或新的IP位址)

 • 靜態NAT 的定義為
    m:n-Translation, m,n≧1 and m = n (m,n is N)
    也就是說私有的IP位址個數與正式的IP位址個數相同

    靜態NAT 的實作很簡單,只要一行邏輯轉換公式即可完成
    new-ip-addr = new-network-id OR ( old-ip-addr AND ( NOT netmask ))

    例如,NAT Router要將網路192.168.1上所有的IP位址轉換成網路140.109.5上所有
    相對應的IP位址,netmask皆為255.255.255.0,現在私有的IP位址192.168.1.3 要
    轉換成正式的IP位址140.109.5.3。

    old-ip-addr    = 192.168.1.3
                   = old-network-id + old-host-id 
                   = 1100 0000 1010 1000 0000 0001 + 0000 0011 = 192 168 1 + 3
    NOT netmask    = 0000 0000 0000 0000 0000 0000   1111 1111
    ----------------------------------------------------------
                  AND
                   = 0000 0000 0000 0000 0000 0000   0000 0011 
    new-network-id = 1000 1100 0110 1101 0000 0101   0000 0000 = 140 109 5
    ----------------------------------------------------------
                  OR
                   = 1000 1100 0110 1101 0000 0101 + 0000 0011 = 140 109 5 + 3
                   = new-ip-addr = 140.109.5.3

 • 動態NAT 的定義為
    m:n-Translation, m,n≧1 and m≧n (m,n is N)
    也就是說私有的IP位址個數大於正式的IP位址個數;或是雖然二者個數相同
    但是基於安全理由不希望使用靜態的對應方式。

    在動態 NAT 的環境中能夠連通外界網路的機器個數受限於正式的IP位址個數。
    當所有正式的IP位址分配完畢之後,任何的IP位址轉換要求將會被NAT Router 
    拒絕,並回傳host unreachable之ICMP封包。動態NAT 之實作較靜態NAT複雜,
    因為它必需維護一個動態表格以便記錄私有IP位址與正式IP位址之對應關係。

    例如,NAT Router 要將 B 等級網路 172.16 上所有的 IP 位址動態轉換成 C 
    等級網路 140.109.5 上的 IP 位址範圍。每次內部網路有機器要連通外部網路
    時 NAT Router 會從140.109.5上的IP位址範圍內動態取得尚未分配出去的 IP 
    位址並記錄在動態表格中直到斷線。若是內部網路機器的資料已經存在動態表格
    中就使用該筆資料作轉換。只要動態表格中存在某內部網路機器的資料,外部網
    路的人就可以利用其所對應之正式IP位址與該內部網路機器連線。請參考下面的
    示意圖。

	src 172.16.2.100 --> NAT Router -->  src 140.109.5.20
	dst 172.16.2.100 <-- NAT Router <--  dst 140.109.5.20

	                      動態表格
		=================
		私有IP位址		正式IP位址
		─────────────────
		172.16.2.100		140.109.5.20
		   ...		            ...
		─────────────────

如前所述,當m = n 時有些人基於安全上的考量使用動態NAT。因為使用動態NAT之後 位於外部網路的人無法正確取得內部網路機器的IP位址,因為它每次與外部網路連通 的IP位址可能都不一樣。

由以上的介紹我們瞭解到 NAT 被提出來的目的,是為了解決網際網路 IP 位址不足 的問題。而在新舊IP 位址區段的移轉過程中,剛好就可以利用靜態NAT 的特性來達到平 順轉移的目的。另一方面由於靜態 NAT 實作容易,而且目前有現成免費的模擬程式可用 ,所以是一個便宜的解決方案。





三、案例說明

某企業決定更換 ISP 廠商,由於IP 位址區段歸屬權的問題,必須將舊有的IP 位址區段 歸還原 ISP 廠商。但是舊有的 IP 位址區段已經分配給企業網路上所有的節點,況且目 前都正在運作使用中,要如何收回再轉移至新的IP 位址區段呢?而且企業主的基本要求 是新舊 ISP (IP 位址區段) 的移轉期間,對網路 Availability 的影響必須降至最低。 請參考圖一。

	圖一.新舊 ISP (IP 位址區段) 的移轉。
解決的方法是,首先保留舊 ISP 先不要斷線,以備移轉失敗時可馬上恢復原來的狀態。 這個期間我們會利用靜態 NAT Router,來做新舊 IP 位址區段一對一的靜態轉換工作, 此時企業網路上面所有機器的網路相關設定值都不需要變動。

在新舊 IP 位址區段共同運轉的期間,網路封包流通的路由,分成二個部分來說明, 請參考圖二:

	圖二. NAT 的乙太網路 e0 界面取代 old-Router 的乙太網路 e0 界面,
               此時NAT e0 界面是 old-ip-block 的 default gateway。而 
	       local-ip-block 只提供 NAT Router 與 new-Router 使用,並不
	       作其它用途。
  • 若同是舊 IP 位址區段上二部機器互連,則路由不會經過靜態 NAT Router,
     網路封包只會在舊 IP 位址區段上流通。

  • 若是舊 IP 位址區段上的一部機器與企業外面的機器互連,則路由會經過靜態
     NAT Router。當企業內部封包通過 NAT Router 時,Source IP 位址會由舊的
     區段轉換至新的區段;當企業外面封包通過 NAT Router 時 Destination IP 
     位址會由新的區段轉換至舊的區段。

在新舊 IP 位址區段共同運轉的期間,網域名稱的查詢動作較為複雜,這也要分成二個 部分來說明,請參考圖三:

	圖三.舊 IP 位址區段必需有一個 DNS 伺服器供企業內部使用,
	      inner-DNS 所對應的內容是舊的 IP 位址區段;新 IP 位址
	      區段必需有一個 DNS 伺服器供企業外面使用,outter-DNS 
	      所對應的內容是新的IP 位址區段。outter-DNS 的部分要求
	      新 ISP 廠商協助維護。
  • 對企業內部而言,由於網路上面所有機器仍然使用舊的 IP 位址區段,所以必需要
     有一部 DNS 伺服器,保留住網域名稱與舊 IP 位址區段的對應資料。這部 DNS 伺
     服器應該放置在企業內部,並只提供企業內部使用。

  • 對企業外面而言,在新 IP 位址區段啟用的同時,就必需要有一部 DNS 伺服器,提
     供網域名稱與新 IP 位址區段的對應資料。這部 DNS 伺服器應該放置在企業外面,
     可以要求新 ISP 廠商協助維護,並只提供企業外面使用。

注意事項:
	
	在新 IP 位址區段啟用之前,應該先將舊 DNS 資料記錄的 TTL (Time To Live)
	值設小,因為此值決定了該 DNS 資料記錄在其他 DNS 伺服器上存活的時間,如
	果此值設得很小,則其他 DNS 伺服器就不會將前一次所查詢到的資料記錄 cache
	太久。當新的 IP 位址區段與 DNS 伺服器啟用之後,企業外面的人就不會因為仍
	然使用舊的 DNS 資料記錄,而造成網路不通的情況。





四、實作方法

在此處我們假設 IP 位址區段 192.168.2.0/24,192.168.3.0/24 屬正式的 IP 位址範圍; 而 IP 位址區段 10.1.1.0/24 屬私有的 IP 位址範圍。


步驟一、安裝 NAT Router 模組程式

	本設計使用一部 PC 當作 NAT Router,安裝二片乙太網路卡(界面 eth0, eth1)
	以及  Linux 作業系統,網路界面 eth0 連接 old-ip-block, 然後安裝 NAT 所需
	的程式 (此處使用 nat-static.tar.gz)。請參考圖四。
	圖四
步驟二、啟動 NAT Router

	接著 make xconfig,在 Networking options 裡選擇 IP:forwarding/gatewaying、
	IP:optimize as router not host、以及 IP:network address translation 等項目。
	然後選擇 Save and exit 離開,並執行 make dep ; make clean ; make zImage。
	最後使用新產生的 kernel 重新開機。檢查 /proc/net/ 目錄下是否有 ip_nat 這個
	檔案,如果存在表示 NAT Router 已啟動成功。

步驟三、設定 NAT rule

	按照圖五重新連接與設定 NAT Router,並注意企業內外 DNS 伺服器的使用問題,
	以及 Routing Table 的設定。

	在 linux-ip-nat/ipnatadm 子目錄下,執行 make 來編譯 ipnatadm 程式。
	使用 ipnatadm 程式來設定 NAT 轉換規則,我們只針對 NAT Router 的網路界面 
	eth0,設定 NAT 轉換規則:

	ipnatadm -O -i -b  -W eth0 -S 192.168.2.0 -M 192.168.3.0 

	此處意思是插入 (-i) 一個雙向 (-b) 的規則到 NAT 的 rule chain 中,
	如果網路封包是透過界面 (-W) eth0 送出 (-O) 則 Source IP (-S)
	192.168.2.0 被代換成 Source IP (-M) 192.168.3.0。
	因為這是雙向規則,所以當網路封包送入界面 eth0 時,Destination IP
	若是 192.168.3.0 會符合這個規則,並被轉換成 192.168.2.0。
	圖五
             
步驟四、完成新舊 IP 位址區段的轉移

	新舊IP 位址區段已經能夠共同運轉,也達到更換 ISP 廠商不影響原先環境
	設定的目的。網路使用單位可以持續保持此架構維持穩定運作,亦可依需求
	修改網路上所有的節點的網路參數設定值而不至造成網路無法運作。





五、結論

本文在IP轉換程序中所定義的 m 及 n 二參數,其相對比例必須依企業網路進出 網際網路的通信率而調整, 此相對比例需以滿足企業網路品質所定義的阻塞率 (Blocking Probability)為原則。同時對於常置性服務系統 (如 WWW, Email等) 與動態系統的分佈亦有重要的影響。

IP 轉移的維運需求已隨著網際網路的普及而日漸擴大。此處所設計的維運方式 可作為一個轉換 IP 位址區段的參考模式。 若企業主想繼續在企業網路上使用 相關技術,下一次再度變更 ISP 廠商時,只要導入相同的維運模式即可。如此 可保障企業網路維持高度的可用度。發揮網路應有效益, 進而提升整體企業的 產能與產值。





參考文獻

[1] E. Gerich, RFC 1466, "Guidelines for Management of IP Address Space" ( May 1993)

[2] E. Gerich, RFC 1814, "Unique Addresses are Good" (June 1995)

[3] B. Carpenter Y. Rekhter, RFC 1900, "Renumbering Needs Work" (February 1996)

[4] Fuller, V., Li, T., and J. Yu, RFC 1519, "Classless Inter-Domain Routing (CIDR) an Address Assignment and Aggregation Strategy" (September 1993)

[5] IETF Network Working Group, RFC 1918, "Address Allocation for Private Internets" (1996)

[6] IP Next Generation (IPng), http://playground.sun.com/pub/ipng/html/ipng-main.html

[7] Ambrose Au, "Linux IP Masquerade mini HOWTO" (1997), http://sunsite.unc.edu/mdw/HOWTO/mini/IP-Masquerade.html

[8] P. Tsuchiya, K. Egevang, RFC 1631, "The IP Network Address Translator (NAT)", (1994)

[9] Michael Hasenstein, "IP NETWORK ADDRESS TRANSLATION" (1997), http://www.csn.tu-chemnitz.de/~mha/linux-ip-nat/diplom/

[10] Daniel L鏕ez Ridruejo,"The Linux Networking Overview HOWTO" (July 1998), http://sunsite.unc.edu/mdw/HOWTO/Networking-Overview-HOWTO.html http://www.linux.org.tw/CLDP/Networking-Overview-HOWTO.html