徹底理解CiscoNAT內(nèi)部的一些事

為了配一條NAT,發(fā)生了很多事。

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的白沙黎族網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

一.Inside和Outside

很多在Cisco配置過NAT的人都有過一個疑問,那就是inside和outside的區(qū)別!以下是Cisco官方文檔上關(guān)于NAT執(zhí)行順序的說明:
徹底理解Cisco NAT內(nèi)部的一些事

注意紅色和藍(lán)色圈住的部分,對于inside-outside而言,NAT發(fā)生在路由之后,而對于outside-inside而言,NAT發(fā)生在路由之前。這是目前為止,我們唯一需要記住的。

1.問題

迷惑的原因不在別的,就在inside,outside這個名字不好,實(shí)際上如果將inside-outside換成POST-ROUTING,將outside-inside換成PRE-ROUTING的話,就非常好理解了,最重要的是,換了名字之后,NAT看起來不再和設(shè)備的inside/outside網(wǎng)口域相關(guān),而和“路由”發(fā)生了關(guān)系,雖然本質(zhì)上沒有任何變化。
       后面會介紹,實(shí)際上,在理解Cisco的NAT的時候,根本不能將inside和outside單獨(dú)拿出來理解,inside和outside僅僅是一個位置限定詞,代表“某地”,而具體的是“到某地去”還是“從某地來”,還需要一個副詞,這就是source和destination。在詳述這個之前,姑且先將inside和outside單獨(dú)拿出來使用。
       接下來我來說明一下NAT和路由的關(guān)系是多么重要!考慮以下的數(shù)據(jù)流,我以“路由”這個動作為中心:
正向包:-->NAT point1-->路由-->NAT point2-->
返回包:<--NAT point1<--路由<--NAT point2<--

我們看一下在NAT point1和NAT point2上要做些什么動作才合理。首先我們先考慮轉(zhuǎn)換正向包的源IP地址發(fā)生在NAT point2,那么對于返回包,目標(biāo)地址轉(zhuǎn)換就發(fā)生在NAT point2,返回包轉(zhuǎn)換完目標(biāo)地址后,發(fā)生路由查詢,數(shù)據(jù)包正常返回,沒有任何問題。現(xiàn)在考慮正向包的源IP地址轉(zhuǎn)換發(fā)生在NAT point1,那么按照將NAT鉤子操作安裝在數(shù)據(jù)流同一位置的原則,返回包的目標(biāo)地址轉(zhuǎn)換只能發(fā)生在NAT point1,此時已經(jīng)經(jīng)過了路由查詢,路由查詢是基于目標(biāo)地址轉(zhuǎn)換前的目標(biāo)地址來的,也就是說這個路由結(jié)果并非真正的路由結(jié)果,真正要想將返回?cái)?shù)據(jù)包送到目的地,必須基于轉(zhuǎn)換后目標(biāo)地址來查詢路由表才可以,然而即便這個針對轉(zhuǎn)換前目標(biāo)的路由查詢結(jié)果實(shí)際上是個假的結(jié)果,你也要必須把它映射成一個真的結(jié)果(這就是ip nat outside source中add-route參數(shù)要做的事情,下面的例子詳述)。以下給出一個實(shí)例:

徹底理解Cisco NAT內(nèi)部的一些事

為了使得返回包能到達(dá)1.1.1.2,必須將到達(dá)2.2.2.4的路由映射到E0那一側(cè)才行,因此必須增加一條:
ip route 2.2.2.4 255.255.255.255 1.1.1.2
也就是說將到達(dá)目標(biāo)地址轉(zhuǎn)換前的下一跳設(shè)置成目標(biāo)地址轉(zhuǎn)換后的下一跳。
       這就是NAT和路由的聯(lián)動關(guān)系。Cisco中如果你用ip nat outside source設(shè)置NAT的時候,就會碰到上面的這個問題,你可以手工添加一條反向包的地址轉(zhuǎn)換前路由映射,也可以通過命令行后面加add-route參數(shù)解決,add-route參數(shù)會自動為你添加那條路由,實(shí)際上它做的就是:
a.根據(jù)NAT映射表查詢目的地址B轉(zhuǎn)換后的目的地址A;
b.查找目的地址A查詢到達(dá)A的下一跳C;
c.將到達(dá)B的下一條設(shè)置到C。

       我們看到在outside上,即PRE-ROUTING上做源地址轉(zhuǎn)換確實(shí)會有問題,但是可以通過add-route參數(shù)進(jìn)行路由重新映射來解決之。正常合理的情況就是在inside上,即POST-ROUTING上做源地址轉(zhuǎn)換。事實(shí)上,我們雖然在做源地址轉(zhuǎn)換,但是問題總是出在反向數(shù)據(jù)包的目標(biāo)地址轉(zhuǎn)換上,合理的情況就是要將目標(biāo)地址轉(zhuǎn)換放在路由之前進(jìn)行,反推正向數(shù)據(jù),那就是將源地址轉(zhuǎn)換放在路由之后進(jìn)行,如果不了解Cisco Domain概念的話,一定會認(rèn)為:不要在outside上作源地址轉(zhuǎn)換!
       目前為止,我來總結(jié)一下。Cisco完全割裂了路由和NAT的關(guān)系,不像Linux那樣DNAT永遠(yuǎn)在路由之前進(jìn)行,不管是配置的DNAT,還是SNAT的反向DNAT,都在路由前,這樣就可以針對轉(zhuǎn)換后的目標(biāo)地址做路由查詢,如果這么理解是對的,你會驚訝,Cisco竟然可以在PREROUTING(outside)做SNAT(ip nat outside source),導(dǎo)致反向包在POSTROUTING做DNAT...但是事情不是這么簡單!
       Cisco不會由于犯錯而設(shè)計(jì)出如此不合理又容易把人搞暈的NAT架構(gòu)的,它這么設(shè)計(jì)必然有自己的理由,是什么理由呢?下面2,3兩小節(jié)給出了一些提示。

2.關(guān)于policy routing

我們知道,標(biāo)準(zhǔn)的IP路由是基于目標(biāo)地址的,但是為了增加更多的策略,policy routing可以用源地址來影響路由查詢結(jié)果。在這種意義上,源地址轉(zhuǎn)換在路由之前就是必要的,然而這樣就會導(dǎo)致反向的目標(biāo)地址地址轉(zhuǎn)換發(fā)生在路由之后!到底是:
a.為了policy routing將SNAT置于路由之前
b.為了不必add-route(雖然它確實(shí)不是什么問題,而且是自動的),將DNAT置于路由之前

需要一個權(quán)衡!然而Cisco不像Linux那樣去對稱設(shè)計(jì)那5個HOOK點(diǎn),Cisco的方式就劃分Domain的,即inside和outside

3.關(guān)于Domain和NAT domain

Cisco設(shè)備一般連接兩種網(wǎng)絡(luò)環(huán)境,一種是自己內(nèi)部的,另一種是外部公共的,這就將接口分為了兩個域,一個是內(nèi)部域,即inside,另外一種為外部域,即outside!這種分法的名字叫得特別好,以至于它被用在了很多的領(lǐng)域,比如nat,然而一旦用在了nat方面,就讓人糊涂了。因此我提議,對Cisco架構(gòu)不是很理解的,請嘗試用POST/PRE ROUTING來理解inside和outside。但是本小節(jié)想做的就是闡明使用inside和outside是合理的。
       對于NAT來講,轉(zhuǎn)換的是IP地址,而IP地址可以分為Global地址以及Local地址,前者是公網(wǎng)可路由的地址,后者是私有地址。從inside域到outside域,需要將所有的Local地址轉(zhuǎn)換為Global地址,一個首要原則就是,Global的地址在未經(jīng)允許是不能出現(xiàn)在inside域和DMZ域(路由器可能沒有)的!決策點(diǎn)就是路由!因此outside到inside方向的地址轉(zhuǎn)換必然要在路由之前完成。這就要求inside到outside方向的地址轉(zhuǎn)換必然要在路由之后完成。即:
ip nat inside source
必然發(fā)生在路由之后,而:
ip nat outside source
必然發(fā)生在路由之前。
如果你定義了某個接口比如FE0/0為outside,那么需要在接口上使能ip nat outside,這樣的話,從該接口進(jìn)入的包就會在路由之前去查詢NAT表,如果找到對應(yīng)的表項(xiàng),就會執(zhí)行NAT。同理如果定義某接口比如FE0/1為inside,那么需要在接口上使能ip nat inside,這樣的話,從該接口進(jìn)入的包先執(zhí)行路由查找,然后去查詢NAT表,如果找到對應(yīng)的表項(xiàng),則執(zhí)行NAT操作。

3.1.轉(zhuǎn)換方向以及轉(zhuǎn)換點(diǎn)-Cisco NAT的設(shè)計(jì)

這個小節(jié)涉及到了對Domain的使用以及如何解讀ip nat inside|outside source|destination命令。本小節(jié)總結(jié)了Cisco NAT設(shè)計(jì)的終極理論。為了簡單,我不再引入Cisco定義的那四種地址以及它們和源/目標(biāo)IP地址,方向的關(guān)聯(lián),這些概念都是額外的概念,最容易使人跑偏而最終陷進(jìn)去。
       Cisco沒有像Linux那樣使用“pre/post路由”這么技術(shù)化的術(shù)語來定義NAT的行為,而是完全根據(jù)Domain來定義,所謂的Domain,即路由器兩邊一邊屬于inside,另一邊屬于outside。那么所有的NAT無外乎就以下4種類型:
1>從inside到outside時轉(zhuǎn)換源地址
2>從inside到outside時轉(zhuǎn)換目標(biāo)地址
3>從outside到inside時轉(zhuǎn)換源地址
4>從outside到inside時轉(zhuǎn)換目標(biāo)地址

其中1和4互相隱含,2和3互相隱含。到此為止,我們發(fā)現(xiàn)Cisco的NAT并沒有像Linux那么簡單,Linux實(shí)際上就定義了兩種NAT,即:
i> SNAT,源地址轉(zhuǎn)換
ii>DNAT,目標(biāo)地址轉(zhuǎn)換

然后其它的約束都是設(shè)計(jì)的時候內(nèi)置的:
路由前執(zhí)行DNAT,路由后執(zhí)行SNAT,包含隱含規(guī)則。
這就是Cisco和Linux的NAT設(shè)計(jì)的終極區(qū)別!它們側(cè)重點(diǎn)不同,Cisco強(qiáng)調(diào)使用者的使用域,Linux強(qiáng)調(diào)技術(shù)本身的合理性(如何配置就需要發(fā)揮想象力了)。我們先看一下Linux的NAT設(shè)計(jì)基準(zhǔn)是什么。Linux的NAT是全局生效的,沒有“將NAT應(yīng)用于接口”的說法,因此接口就成了一個match。因此管理員只需要寫match/target就可以了。

       對于Cisco而言,為了將4種NAT配置界面全部導(dǎo)出給工程師,需要一個前提操作,那就是定義inside接口和outside接口,即在哪個接口上應(yīng)用inside nat,在哪個接口上應(yīng)用outside nat。到此,所有的4種NAT都必須能和任意類型(inside/outside)的接口單獨(dú)組合。這就打破了平衡點(diǎn),變成了馬鞍面,你無法找到一個點(diǎn),在PRE ROUTING和POST ROUTING中完成一切,舉例,如果接口E1使能inside nat,E0使能outside nat,說明E1是inside接口,E0是outside接口,那么我們考慮從inside到outside方向的兩種轉(zhuǎn)換,一種是轉(zhuǎn)換源地址,另一種是轉(zhuǎn)換目標(biāo)地址,我們把它們放在一個位置還是放在一個“虛擬的平衡點(diǎn)”(不一定是routing)兩邊,即兩個位置呢?我們看下面的兩個圖,實(shí)際上代表了兩種約束:

徹底理解Cisco NAT內(nèi)部的一些事

徹底理解Cisco NAT內(nèi)部的一些事

這兩個圖展開后是個典型的馬鞍面,原點(diǎn)就是路由,之所以要有個原點(diǎn),是因?yàn)榛贒omain的配置中,數(shù)據(jù)包從inside到outside或者反過來必然要經(jīng)過一個點(diǎn),從本文最上面的那幅Cisco網(wǎng)站上的圖,我們看到基于Domain的NAT行為不僅僅是一個NAT,它需要和ACL匹配,加解密等操作聯(lián)動,這些操作所依賴的IP地址和NAT發(fā)生了關(guān)聯(lián),因此基于Domain的NAT行為一定要位于路由行為的兩邊。由于Cisco是按照Domain即inside/outside來進(jìn)行配置的(在接口上應(yīng)用特定Domain的規(guī)則),因此必然是這種設(shè)計(jì)方式,而對于Linux,NAT是全局的,接口只是一個match而已,因此就完全按照路由的約束來設(shè)計(jì)。
       現(xiàn)在,我們可以來總結(jié)一下ip nat inside|outside source|destination的含義了。我把這個命令公式化:
ip nat P H
其中H代表要做源轉(zhuǎn)換還是要做目標(biāo)轉(zhuǎn)換,H還有一個更加隱蔽的含義,那就是它和P指名了數(shù)據(jù)的方向,也就是說:數(shù)據(jù)是以P為H的。舉例,ip nat inside destination表示數(shù)據(jù)是以inside為目標(biāo)的(來自outside),做目標(biāo)地址轉(zhuǎn)換;ip nat outside source表示數(shù)據(jù)是以outside為源發(fā)往inside的,做源地址轉(zhuǎn)換。

4.Cisco的destination轉(zhuǎn)換

但是,但是如何對目標(biāo)地址進(jìn)行轉(zhuǎn)換,即將訪問一個公共Global地址時,將其轉(zhuǎn)到一個內(nèi)部的Local地址,這就是目的地址轉(zhuǎn)換,也叫地址映射,Cisco如何來做呢?實(shí)際上,很多Cisco設(shè)備的ISO版本不允許你像Linux那樣無限制做DNAT,而僅僅允許映射特定的IP地址+TCP/UDP端口對或者全I(xiàn)P。這肯定是在outside上做目標(biāo)地址轉(zhuǎn)換了,在相反的方向就是在inside上做源地址轉(zhuǎn)換,即:
ip nat inside source static tcp $local_ip $local_port $global_ip $global_port
注意,必須是static的NAT,這涉及到下一節(jié)要說的“如何安裝NAT”
       對于TCP負(fù)載均衡做的ip nat inside destination這種定制化的NAT則不在本文討論范圍內(nèi)。

二.如何安裝NAT

0.風(fēng)格

Linux的NAT是基于5元組的,也就是NAT結(jié)果和一個流(conntrack)關(guān)聯(lián)在一起,這種關(guān)聯(lián)導(dǎo)致同屬于一個五元組的一個流的所有數(shù)據(jù)包的NAT策略必須一致,對于這一硬性規(guī)定有點(diǎn)太強(qiáng)硬了,因此我在Linux上做了好幾個補(bǔ)丁來彌補(bǔ)Linux的不足,當(dāng)然也可以用RAWNAT。
       對于Cisco,NAT不和一個流關(guān)聯(lián),除非是Stateful的。既然不和流關(guān)聯(lián),那么如何做呢?Cisco會在特定的時間將“一條NAT映射策略”安裝到系統(tǒng)的inside NAT表或者outside NAT表中,對于從網(wǎng)口進(jìn)入的數(shù)據(jù)包,會根據(jù)網(wǎng)口是inside還是outside去匹配inside NAT表或者outside NAT表中的NAT規(guī)則,僅此而已。
       不管是inside NAT表還是outside NAT表,都各有兩張,一張是SNAT表,另一張是DNAT表,NAT表的拍腦袋想出的數(shù)據(jù)結(jié)構(gòu)可以是:

NAT table {
type:SNAT or DNAT
direction:inside or outside
nodes:local/global mapping
}


對于每一個數(shù)據(jù)包,都要用源IP地址去查詢SNAT表,用目標(biāo)IP地址去查詢DNAT表。然而對于Linux而言,需要的僅僅是查詢conntrack結(jié)構(gòu),然后取出第一個包查詢時記錄于此的nat結(jié)果。

1.靜態(tài)NAT

靜態(tài)NAT就是一個一對一的NAT映射,也就是一個Local IP地址和一個Global IP地址之間的轉(zhuǎn)換。在配置生效的時候,NAT轉(zhuǎn)換規(guī)則就會被添加到NAT表中。

1.1.Cisco方式

當(dāng)在inside方向上添加了一條NAT:
ip nat inside source static a b
系統(tǒng)會將a->b的源地址轉(zhuǎn)換加入到inside的SNAT表中,同時將b->a的目標(biāo)地址轉(zhuǎn)換加入到outside的DNAT表中。
       針對后面的所有數(shù)據(jù)包,不管是從內(nèi)部發(fā)起的,還是從外部發(fā)起的,都會根據(jù)接口使能的是inside nat還是outside nat來查表匹配。

1.2.Linux方式

Linux基于conntrack,因此即使你使用
iptables -t nat -A POSTROUTING -s a -j SNAT --to-source b
也只針對匹配該策略的第一個數(shù)據(jù)包,Linux的NAT的轉(zhuǎn)換一方a是作為一個match出現(xiàn)的,因此它嚴(yán)格匹配第一個包的源地址,故反方向的數(shù)據(jù)包不會匹配,因此Linux的NAT都是單向的。

2.動態(tài)NAT

動態(tài)NAT不在配置的時候規(guī)定轉(zhuǎn)換后的地址,而在第一個有轉(zhuǎn)換需求(由ACL來判斷)的數(shù)據(jù)包到來的時候才確定它要轉(zhuǎn)換成什么地址。因此,配置生效的時候,沒有任何NAT規(guī)則會被加入到NAT表中。

2.1.Cisco方式

當(dāng)在inside方向添加了一條動態(tài)NAT:
ip nat pool NAME ...
ip nat inside source list $acl pool NAME
...

系統(tǒng)不會添加任何NAT規(guī)則,只有當(dāng)某一個包匹配到了acl,要引發(fā)NAT的時候,系統(tǒng)會動態(tài)(基于pool類型來計(jì)算)從pool中選一個要轉(zhuǎn)換成的IP地址,將其添加入inside的SNAT表中,同時針對反方向的目標(biāo)地址轉(zhuǎn)換規(guī)則生成并加入outside的DNAT表中。
       因此,Cisco動態(tài)的NAT是單向的,因此反向的數(shù)據(jù)包進(jìn)入時不會匹配到acl,不會引發(fā)NAT規(guī)則的生成,也就不會匹配到任何NAT規(guī)則。

2.2.Linux方式

再次重申,Linux的nat中,待轉(zhuǎn)換的IP地址是一個match,因此不管是一對一的轉(zhuǎn)換還是一對多的轉(zhuǎn)換,原理都是一樣的。Linux并不區(qū)分靜態(tài)轉(zhuǎn)換和動態(tài)轉(zhuǎn)換。在內(nèi)核中,永遠(yuǎn)都不會出現(xiàn)所謂的NAT映射表,iptables添加的NAT規(guī)則不會生成映射,數(shù)據(jù)包進(jìn)入匹配nat成功,也不會生成映射,nat結(jié)果僅僅存在于conntrack中作為tuple的一部分體現(xiàn)。

3.查詢方式

3.1.Linux方式

Linux的nat查詢對于第一個包是逐條匹配iptables nat表規(guī)則,對于后續(xù)的包,則轉(zhuǎn)化為針對五元組的conntrack哈希查詢。

3.2.Cisco方式

對于Cisco而言,不像Linux那樣PREROUTING處僅僅發(fā)生DNAT,POSTROUTING處僅僅發(fā)生SNAT,而是不管在PREROUTING還是在POSTROUTING,均可能發(fā)生SNAT和DNAT,因此不管在哪個nat HOOK point,均要用數(shù)據(jù)包的源IP地址和目標(biāo)IP地址分別來查詢SNAT表和DNAT表。既然這么對稱,那么就可以將這個查詢過程抽象出來,使之成為一個獨(dú)立的虛擬接口,是為NVI!

三.使用NVI虛擬接口

0.虛擬接口理念

這個就不說了。Open×××的tap,Cisco IPSec ×××的VTI,包括下文描述的NVI,都屬于虛擬接口,并且所有的虛擬接口都可以通過路由的方式將數(shù)據(jù)包導(dǎo)入進(jìn)去,至于在里面執(zhí)行什么操作,這就是虛擬接口“虛擬”的地方,可以將數(shù)據(jù)包導(dǎo)出到字符設(shè)備,也可以加解密,當(dāng)然也可以做NAT...

1.Linux 2.4的nat route

Linux 2.4的nat route依賴于policy routing,超級失敗,還沒有我自己寫的好,《又一個Linux的雙向stateless NAThttp://blog.csdn.net/dog250/article/details/8996666》詳細(xì)介紹了實(shí)現(xiàn)方法。

2.Cisco的domainless NAT

Domainless就是說不再區(qū)分inside和outside,只是單純地做NAT,這個在Cisco中實(shí)現(xiàn)得熱別清爽,沒有用所謂的平衡點(diǎn),進(jìn)而兩個方向NAT的處理HOOK點(diǎn)也不再基于平衡點(diǎn)對稱,所有的NAT操作全部在PREROUTING上做,然而Cisco并沒有用增加配置,掛接HOOK的方式實(shí)現(xiàn),而是用一個叫做NAT  Virtual Interface的虛擬接口來實(shí)現(xiàn),這樣有什么好處呢?說實(shí)話,從界面上看不出來,但是從其實(shí)現(xiàn)角度,就可以通過路由的方式將帶有ip nat enable配置的接口進(jìn)來的包全部導(dǎo)入這個虛擬接口NVI0中。然后用數(shù)據(jù)包的源地址和目標(biāo)地址分別查詢SNAT表和DNAT表,根據(jù)結(jié)果進(jìn)行NAT操作,隨后進(jìn)入真正的路由查詢,整體流程如下圖所示:

徹底理解Cisco NAT內(nèi)部的一些事

可見,不管方向,不管路由,只要數(shù)據(jù)包進(jìn)入了一塊帶有ip nat enable配置的物理網(wǎng)卡,就會進(jìn)行NAT匹配以及匹配成功后的操作,不管是SNAT和DNAT都在這里進(jìn)行。這個實(shí)現(xiàn)雖然很豪放,但是卻解決了所有問題,平衡點(diǎn)的問題不存在了,數(shù)據(jù)包在進(jìn)入真正的路由查詢前,NAT就已經(jīng)完成了,在路由器看來,NAT操作被藏起來了,就好像數(shù)據(jù)包本來就是那個樣子一樣。
       當(dāng)然Domainless的NAT也不再和任何其它操作關(guān)聯(lián),ACL,×××感興趣流匹配,policy routing等都和NAT無關(guān)。Cisco Domainless的NAT設(shè)計(jì)和Linux的NAT設(shè)備區(qū)別更加明顯,雖然Linux的NAT也是Domainless的,但是在設(shè)計(jì)上卻和Cisco基于Domain的NAT很像,因?yàn)槎叩腘AT都要和其它的Filter操作聯(lián)動,對于Linux,NAT行為需要和大量的Netfilter行為聯(lián)動。

四.總結(jié)和想法

通過使用Cisco的NAT,我有一些自己的想法,需要暫時記錄下來。

1.和微軟的關(guān)系,和自由的關(guān)系

我配置Cisco的時候,有種使用微軟系統(tǒng)的感覺。遇到瓶頸的時候,束手無策!在微軟的系統(tǒng)上,我想做單臂NAT,我想配置路由的時候帶上source,折騰了好久都未果,配置Cisco的時候,同樣的感覺!雖然有時候,高一點(diǎn)的IOS版本確實(shí)能解決問題(這是和微軟一樣的)??偟膩碇v,使用這些東西讓你感覺不自由,能HACK的地方實(shí)在太少,HACK操作門檻太高,使用它們時,你要一直提心吊膽,你要么一氣呵成,只要是碰到了攔路虎,哪怕多么小的攔路虎,你可能都過不去。
       Linux正好是事情的另一面,UNIX處在中間。在Linux上操作,你的任何行為都不會受到阻礙,即使碰到了問題,系統(tǒng)不會阻礙你去編寫一個程序或者內(nèi)核模塊,甚至重新訂制內(nèi)核。即使不這么深入,光看一下iproute2以及iptables就夠了,本身自帶的參數(shù)就能讓你完成幾乎所有的操作,在這個意義上,習(xí)慣了Linux的人可能也會苛求Cisco的擴(kuò)展訪問控制列表更加優(yōu)秀一些,實(shí)際上,面對Netfilter的幾乎無限的擴(kuò)展能力,Cisco的擴(kuò)展訪問控制列表的“擴(kuò)展”體現(xiàn)在哪里呢??
       我買手機(jī)不是來hack的,我也不寫代碼安裝在手機(jī)上,我僅僅是想用它來打電話,發(fā)信息,上網(wǎng),所以我不買Android,由于價(jià)值觀相差甚遠(yuǎn),我不買和微軟有任何關(guān)聯(lián)的手機(jī),不管它有多好,買了iOS是因?yàn)樗蚒NIX有關(guān)聯(lián),事實(shí)上,蘋果很封閉,但是它的封閉不是技術(shù)本身,而是價(jià)值取向和設(shè)計(jì),事實(shí)上,也正是因?yàn)樗忾]的不是技術(shù),才有了越獄之說,越獄之后,你將面對一個原汁原味的開放的UNIX。開放是金,開放就是一切。

2.功能性技術(shù)點(diǎn)和解決方案

如果碰到問題,當(dāng)然要想辦法去解決問題了,此時就有兩條路,第一條路就是尋找單獨(dú)解決該問題的功能性技術(shù)點(diǎn),比如你想在做一個基于ACL的地址映射,如果你用的是Linux BOX,那么這個功能性技術(shù)點(diǎn)就是iptables,但是如果你用的是Cisco低端路由器,那么就無法做這件事,文檔明確說不支持。此時就是第二條路了,那就是徹底否定最初的方案,說一句:“為何要這么做呢?XX會更好的。我們有整套的解決方案,滿足你的所有需求?!薄R话愕南馛isco,微軟,IBM都會提供解決方案,它們的系統(tǒng)上的功能性技術(shù)點(diǎn)往往都有短板,單獨(dú)拿來用很雞肋,只有和其它的配合才可以。因此,想hack的,千萬別基于這些系統(tǒng),你會煩死的,在這些系統(tǒng)上,這也不行,那也不行,這個不能變通,那個不能變通,用多了,人也就死板了,說話也就不好聽了,“技術(shù)上的任何問題都是可以解決的”這句話到了使用這些封閉系統(tǒng)的人那里就成了“這是不可能的?。?!”

3.人員沖突

一周以來,我跟人沖突好幾次,完事后還是證明我的想法是正確的,所以再次讓我感到大多數(shù)所謂的高級網(wǎng)管員的水平是多么的垃圾,水平垃圾個性還一個個都挺狂妄,這實(shí)在讓人氣憤和悲哀。這些垃圾人員的觀點(diǎn)基本分為兩類:
1>沒有做過的事情就說不可能
因?yàn)橐郧皬膩頉]有這么做過,就說不可能,甚至否定我的技術(shù)方案。我是作為研發(fā)出現(xiàn)的,這就更讓對方覺得我根本就不懂網(wǎng)絡(luò),沒有經(jīng)驗(yàn)等,第一他們沒做過,第二我沒網(wǎng)絡(luò)方面的職稱,這就更讓他們狂妄無比。
2>想當(dāng)然的事情就拍腦袋說可以,實(shí)際上根本就不可以
我說要把udp服務(wù)一對一雙向映射出去:
ip nat inside source udp 1.1.1.1 12345 2.2.2.2 12345
在測試的時候,他們非要用ping來測試!這個明明是一個udp的映射,怎么用ping?!然而他們非要用ping,我告訴他們不能做全映射,因?yàn)闀巡幌喔傻牟辉撧D(zhuǎn)換的地址也轉(zhuǎn)換了,因?yàn)樗麄冎繬AT可以通過ACL+pool來做,所以他們就認(rèn)為這個可以在outside口用ACL匹配地址來做...這幫×××!我要做目標(biāo)地址轉(zhuǎn)換,還得是雙向的,也就是說不管數(shù)據(jù)流從那邊發(fā)起都是可以的!那幫人連NAT轉(zhuǎn)換項(xiàng)什么時候安裝進(jìn)系統(tǒng)的都不知道!
       這些人還好意思說自己是網(wǎng)絡(luò)工程師啊!看看我們的那些NA/NP/IE/NE/SE們,無一例外的就是靠背題的,好多證書都拿到手了,卻連網(wǎng)絡(luò)的基本原理都TMD不懂!再看看那些真正的CCIE,比如Petr Lapukhov, 4xCCIE/CCDE in CCIE R&S,IP Services:
Petr Lapukhov's career in IT begain in 1988 with a focus on computer programming, and progressed into networking with his first exposure to Novell NetWare in 1991. Initially involved with Kazan State University's campus network support and UNIX system administration, he went through the path of becoming a networking consultant, taking part in many network deployment projects. Petr currently has over 12 years of experience working in the Cisco networking field, and is the only person in the world to have obtained four CCIEs in under two years, passing each on his first attempt. Petr is an exceptional case in that he has been working with all of the technologies covered in his four CCIE tracks (R&S, Security, SP, and Voice) on a daily basis for many years. When not actively teaching classes, developing self-paced products, studying for the CCDE Practical & the CCIE Storage Lab Exam, and completing his PhD in Applied Mathematics.
看看人家的經(jīng)歷,從編程開始,逐步深入,從計(jì)算機(jī)體系結(jié)構(gòu),TCP/IP棧,到UNIX,最終,Cisco只是大師將這一切附著的一個平臺而已,如果他不是在Cisco上工作,而是加入IBM的陣營,或者去開發(fā)Linux內(nèi)核,你能說人家不是圈子里的人嗎?記住,別把編程的人看作不懂網(wǎng)絡(luò)的。

網(wǎng)站題目:徹底理解CiscoNAT內(nèi)部的一些事
當(dāng)前地址:http://muchs.cn/article4/pgdsoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、標(biāo)簽優(yōu)化、網(wǎng)站排名、ChatGPT、定制開發(fā)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)