摘 要:本文通過對實際工作中遇到的問題的描述和解決,闡述了代理ARP技術的原理,以及SCO UNIX主機系統TCP服務的機理,對核心交換機及路由器相關端口禁用ARP代理后,SCO UNXI主機系統跨域網關進行通訊的原理進行了探討,并提出了解決問題的辦法。最后就SCO文檔中心的關于缺省路由的說明提出了需要關注的地方。
關鍵詞:代理ARP網關SCO UNIX路由
中圖分類號:TP393文獻標識碼:A文章編號:1674-098X(2011)09(b)-0026-01
1 代理ARP及問題的提出
代理ARP是一種IP網絡地址復用技術,之前在人行系統網絡中廣泛應用。當網絡的主機A需要和另一主機B通訊時,主機A向自己所在網絡發送ARP請求,如果主機B在同一網段,則回應主機A的ARP請求,主機A獲得并維護一條關于主機B的ARP條目。如果主機B不在A所在的網絡中,則主機查找自己的路由表,如果通過掩碼沒有找到自己合適的路由,則查找缺省路由,由缺省網關來處理。
我行網絡結構是在核心交換機上按業務流分成不同的VLAN,大部分計算機放置在VALN10中,VLAN10 IP地址為11.xx.xx.254作為局域網上所有計算機的網關,上聯路由器E口地址為11.xx.xx.252,下聯路由器E口地址為11.xx.xx.245,某一SCO服務器IP地址為11.xx.xx.10。基于安全考慮,禁止核心交換機及路由器上相關端口ARP代理后,SCO UNIX服務器無法上聯到上級服務器。但其他WINDOWS系統則不存在問題。在SCO主機手工添加ARP表目,將非本地地址指向路由器MAC地址后,通訊正常。因上聯路由器與下聯路由器之間有直連,所以ARP表目中添加的MAC地址可以是任何一個路由器E口MAC地址,SCO主機均能上連到分行服務器。
2 SCO存在的問題
根據以上現象,初步判斷問題出在SCO系統的TCP服務上。一般情況下,SCO OPENSERVER在/etc/tcp中添加缺省路由,方法大致如下:
/etc/routeadddefault網關IP地址 0 >/dev/1 2 >1
在未禁止相關端口上ARP代理的情況下,如此配置的SCO主機上,可以發現ARP表目大致如下:
(11.xx.xx.9) at 0:b:46:bb:3c:ff (802.3)/*為本地地址*/
(11.xx.xx.231) at 0:f:1f:af:ae:aa (802.3)/*為本地地址*/
(100.xx.xx.xx) at 0:3:6b:bc:bd:11 (802.3)/*非本地地址*/
(100.xx.xx.xx) at 0:3:6b:bc:bd:11 (802.3/*非本地地址*/
其中,MAC地址0:3:6b:bc:bd:11為路由器E口(11.xx.xx.252)物理地址。可見,所有通過路由去廣域網的目標地址在ARP表中均代理為路由器E口11.xx.xx.252的MAC地址。
同時其維持的運行時路由表如表1。
注意其中Flags中關于缺省路由的標志,其中C表示是由路由表中其他表目克隆而來,而剛才我們已經在/etc/tcp中手工加入缺省路由,應該是原生路由,而不應該是克隆路由,至次,問題開始明晰,可以初步斷定就是由于/etc/tcp中添加的缺省路由沒發揮應有作用,而ABS主機和路由器E口又在同一網段,主機因無法找到缺省路由而廣播ARP請求時,路由器學習到并將上級服務器地址映射成自己MAC地址。
3 問題的解決
根據以上的判斷,同時查閱SCO文檔中心,對于缺省路由有如下描述:在SCO OpenServer3.0,路由可以添加在/etc/tcp 或者/etc/rc.d/8/userdef,對SCO OpenServer5,由于啟動時幾個scripts可能并行運行,由此可能引起某些運行時問題。因而推薦使用在/etc/rc2.d中添加文件的方法。但文檔未明確說明,是由于哪幾個運行時scripts因啟動次序不同而引起問題,及會引起什么樣的問題。鑒于此,提出如下解決方法:
對SCO主機做如下修改:刪除/etc/tcp文件中添加的缺省路由條目,同時在/etc/rc2.d目錄下新建一文件,以大寫S開頭,例如S96gateway,在其中添加:
route add default 11.xx.xx.254 1。
停止并重新啟動TCP服務,或者重新啟動計算機,查看ARP表,發現所有非本地主機均沒生成ARP,同時查看路由表,發現缺省路由條目如表2。
至此可見,該缺省路由標志為G,已經是原生路由,可見S96gateway中條目已經發生作用。實際ping上級服務器,發現可以連接,問題解決。
其實,SCO系統在版本5.0.6及以前,對于非同一網段的訪問可以通過兩種方法實現,一種是做為簡單路由器,另一種是作為非路由器連接,下面就非路由器模式做一說明。
在SCO系統存在三個守護進程,分別為irdd、routed、gated,在配置為非路由器模式下,這三個守護進程均可以使用,但不可同時運行,下面以routed進程作介紹,要啟動該守護進程,需在/etc/default/tcp文件中加如下語句:
ROUTERDAEMON0=\"/etc/routed -g\"
該守護進程啟動時會讀/etc/gateways文件,并將該文件中定義的路由讀入路由表中,因此需要創建該文件(如果沒有的話),同時添加路由條目,例如:
net 100.xx.xx.xx gateway 11.xx.xx.254 metric 1
其中,100.xx.xx.xx為非本地目標地址,11.xx.xx.254為網關地址。
重新啟動計算機,查看routed進程是否運行,連接外部地址100.xx.xx.xx,發現已經可以連接。
至于SCO文檔中所說幾個啟動scripts并行運行可能會引起問題的說法,是否會對此產生影響,有待于進一步觀察和研究。