2015年12月4日 星期五

「轉」Juniper總結—路由器體系結構

原文:http://flashrazer.blog.51cto.com/874229/1357286

此篇文章說明了  junos 的精華,值得深入瞭解。
撰文者為大陸人,用詞方面自行轉換即可。

====

Juniper的路由器分為兩個部分——RE和PFE。不過貌似大部分路由器都分為這兩個部分。。。。
   wKioL1L1yKfwFTUAAAA1z9LU1VE967.jpg
Routing Engine:
  當 密碼授權通過之後,用戶就進入了RoutingEngine中,在其中可以進行軟件升級,配置,ping,telnet等操作。這是邏輯存儲JunOS的 位置,路由器通過Routing Engine操作各種路由協議,比對各個路由之後選出最佳路由。然後將最佳路由裝載進ForwardingTable,並將Forwarding Table拷貝進Packet Forwarding Engine,在PacketForwarding Engine中的轉發表才可以真正轉發用戶數據。
包括組件:
Routing Engine2:存在於M系列路由器中,333MHz處理器和768MB內存,80MBflash存儲和6.4GB的硬盤。M40包括LS 120 外部存儲硬盤,其他型號為可移除的PCMCIA閃存卡作為外部存儲。
Routing Engine3:存在於T系列路由器中(T320,T640),最新的JunOS可以讓M系列路由器也加載該引擎。660MHz的處理器,2GB內存,128MB內部flash30GB硬盤,可移除PCMCIA閃存卡作為外部存儲。
Routing Engine中的內存是用來存儲路由表,轉發表,鏈路狀態數據庫和操作系統內存的。
內部的flash存儲了JunOS的操作系統和configuration file
硬盤是用來存儲,JunOS的備份,日誌文件,debug信息和用戶文件的
JunOS適用於全系列的RoutingEngine,不需要因為Routing Engine更換而換JunOS
Packet Forwarding Engine
負責轉發數據,包含一系列的ASIC,加速數據轉發。與Routing Engine比,不智能

主要部件:
PICPhysical interface card,FlexiblePIC concentrator, switchingcontrol board
每個部件上都有IBM製造的ASIC

Switching control board(FEB,SSB,SCB,SFM,MMB) 包含了一個PPC CPU,64MB的內存,但是不會參與包轉發。SSRAM8MB(16MB)包含了轉發表——8MB有45萬條轉發條目。Switching control board上的internet processorASIC進行路由查找,上面還有一個ASIC會進行包存儲的內存管理
Flexible PIC concentrator:連接PICSCB,其中有個PPCCPU64MB內存跑一個嵌入式系統,不參加數據轉發,但是FPC上有個ASIC會和出站和進站的數據包互動
PCI:FPC上有4個獨立的PIC.

JunOS中包括以下幾個daemon
1routingprotocol daemon(rpd):控制路由協議,包括了協議信息,路由表更新和路由策略。
2Device ControlDaemon(dcd):配置和維護路由器接口所用,控制了接口的物理和邏輯屬性
3ManagementDaemon(mgd): 控制了用戶進入路由器。CLI就是一個MGD的客戶端
4ChassisDaemon(chassisd)控制了路由器本身的屬性,比如midplane,FPC
5PacketForwarding Engine Daemon(PFED):聯繫routing enginepacket forwarding engine的進程。

JunOS包括的軟件:
jkernel:包括了基本的JUNOS組件
jbase:和jkernel相比,包括了一些附加軟件
jroute:包括了在routingengine上操作的軟件,如單播協議,組播協議,MPLS等。還包括了一些daemons,如mgd
jpfe:包含了控制PacketForwarding Engine的嵌入式系統。
jdocs:包括了完全的JUNOS軟件文檔集
jcrypto:包括了IPSecSSH
jbundle:包括了以上所有軟件

JUNOS軟件命名:
File list jbundle*
/var/home/user/jbundle-5.2R1.4-domestic-signed.tgz
5.2為主版本號
R代表公開發行(A——alpha versionB——BetaI——internal or test
1.4——releaseversion
domestic——包括jcrypto
signed——可以使用MD5

軟件升級:
Show version brief
Request system software addjbundle-5.3R2.4-domestic-signed.tgz(新的軟件名稱)

啟動順序:
可移除存儲(做災備,會還原到出廠環境)——>內部flash——>硬盤(先要用requst system snapshot來做鏡像,會有警告信息)——>systemhalt

CLI
有兩個模式:
Operation mode:相當於enable,登錄路由器後首先進入該模式, >表示。
Configuration mode:相當於config terminal
有補全功能——tab或空格

幫助:

快捷鍵:
Ctrl+P:上一條命令
Ctrl+N:下一條命令
Ctril+B:命令提示符向左移一位
Ctrl+F:向右移一位
Esc+B:向左移一個單詞
Esc+F:向右移一個單詞
Ctrl+A:移到行首
Ctrl+E:移到行尾
Ctrl+W:刪除左邊的一個單詞
Ctrl+X:刪除整行
Ctrl+L:整行變紅

可以用|符來做更多的操作
Count
display
Except
Find
Hold
Match
No-more
Resolve
Save
Trim

Show interfaces terse 查看路由器上的邏輯接口
Show interfaces terse | match inet 查看接口IP地址
Show interfaces terse | match inet |count 看有幾個接口有IP地址

show命令輸出過多,顯示--More時,可以按h,輸入命令
/鍵位查找。

Configuration Mode
輸入configure進入該模式

Run
相當於cisco中的dorun showinterfaces ter
Run show route

Edit 模式
用來修改Juniper的各項參數。樹狀列表如下所示
               wKiom1L1zvDjOGiNAAGEvXUSUTA210.jpg
         
如需要編輯bgp,則在頂部菜單輸入
Edit protocols bgp
edit protocols , 然後 edit bgp.
如需返回上層菜單,則輸入up,如需返回頂部,則輸入top

改變值,用命令set. 如設置系統名:
Edit system
Set host-name XX
set system host-name XX.
然後用show查看,show system

delete命令來刪除配置。
Delete system host-name XX.

CandidateConfiguration:
當配置改變時,不會馬上生效,因為改變的是cadidateconfiguration。需要用commit來確認配置之後,才能生效

show | compare可以查看現在運行的configurationcandidate configuration的區別。
+說明在candidateconfiguration但不在active configuration
-說明在candidateconfig中將其刪除了

保存和讀取配置
top下:save commcomm為文件名)
Load comm來讀取文件。
load overrid comm 覆蓋現有配置
load merge comm 把現在的配置和comm合併

Show | find ospf
Load merge terminal,然後將其他路由器上的配置粘帖上去,然後按ctrl+D,保存配置

Commit
只有在輸入commit之後,配置才能生效。當輸入commit之後,JunOS首先檢查語法和邏輯錯誤,比如應用策略卻沒有創建這個策略。如果沒有錯誤,路由器應用該配置文件並且搭建該配置所需的環境。最後保存。

Commit and-quit 退出配置模式,如果commit成功
Commit at 在某時執行commit
Commit check 只做檢查操作,不應用commit
Commit confirmed 如果沒確認,自動回滾——>相當於rollback 1 commit
Commit synchronize 在所有的RE上同步commit
恢復
JunOS一共能保存9文件供恢復使用。
當前使用的配置文件為juniper.conf,最近一次更改的為juniper.conf.1.gz
Commit 發現配置不對
Rollback 1
Commit 再次確認配置

JUNOS上的存儲目錄
/config 在內部flash上,保存JUNOSactive configurationjuniper.conf)和回退文件123
/var/db/config 在路由器的內部硬盤中,包括了回退文件4-9
/var/temp 在內部硬盤中,由守護進程啟動失敗後釋放的一些文件,用來分析
/var/log 在內部硬盤內,由路由器的日誌功能和追蹤(traceoption)功能釋放的文件
/var/home 在內部硬盤上,包含了登錄用戶的文件夾,其內有各種junos軟件命令
/altroot 在內部硬盤上,有拷貝自flash上的root文件結構,用於災難恢復。
/altconfig 在內部硬盤上,有/config的拷貝(從flash中的拷貝),做災難恢復用。

RE的冗餘
M20,M40eM160支持RE的冗餘,一個為主,一個為備。
默認情況下,當主REdown掉,備份RE不會自動切換為主,需要配置
Set chassis redundancy failover on-loss-of-keealives
Set chassis redundancy keepalive-time 30默認20s之後切換

PFE組件
PIC I/O Manager ASIC——數據幀校驗,負責將報文移動到傳輸介質
I/O Manager ASIC——對二三層頭部完整性信息校驗,如果有效,將報文分成定長64字節的J-cell,並發送給DBM ASIC
Distributed Buffer Manager ASIC——InboundASIC中收到J-cell,生成通知信元,發給Internet Processor ASIC,並將J-cell通過I/O manager ASIC放到每個FPC的共享內存池中。
Internet Processor ASIC——將通知信元通過查詢轉發表轉換成結果信元,告知outbound distributed buffer manager ASIC如何處理J-cell。再將J-cell發到outboundI/O manager ASIC中,再發到outbound PIC I/O manager ASIC上,完成數據轉發。
單播包流程:
wKiom1L1z_6xJojAAAHOWs1G68E045.jpg
         
多播包流程:
只有一點不同,結果信元檢查後有多個出口,會將包複製成多分,發到出口出去。

列外流量:
發到RE的流量,一般是路由器維護自身進程的流量,如ICMP,PING,TELNET,SSH,包含IP OPTION字段的流量,回覆目標不可達信息的流量等。

總結
RE:操縱路由並構成路由轉發表,將其複製一份到PFE,
PFE:實現數據的真正轉發

JunOS軟件存儲在內部flash,內部硬盤,可移除閃存中。啟動順序:可移除閃存——>內部flash——>內部硬盤

知道commitrollbacksaveload的用法

知道ASICPFE中的作用,四種ASICPICI/O Manager ASICI/O Manager ASICDistributedBuffer Manager ASICInternet Processor ASIC

簡述數據包在PFE中的流程:
接口收到一個數據包,I/OManager 將其分解成J-cellDistributedBuffer Manager ASIC 將該包儲存到共享內存池中,Internet ProcessorASIC完成路由查找並將結果發送給Distributed Buffer ManagerASICDBMAJ-cell轉發給出站I/Omanager ASIC。在經過隊列調整後,I/O manager ASIC從共享內存池中收到J-cell,並將其重組,然後發到出站PICI/O Manager ASIC

例外流量:路由器維護自身進程的,或者一些測試流量,終止於路由器本身。控制面板的CPU會轉發這些流量,不會經由PFE處理。

進入SRX底層的FreeBSD方式

由於Junos是建構在 FreeBSD上,一定有人跟我一樣非常好奇,能不能進到最底層去設定FreeBSD,或是看底層裡面到底有什麼東西。

我原本是這樣想的,無奈google查不到相關說明,可能我下的關鍵字「junos freebsd」「juniper freebsd」還不夠正確吧

剛好有認識的朋友熟悉 junos,請他翻一下陳年的筆記終於找到方式

進入正題:
如同FreeBSD的預設管理者帳號,其實junos也有root帳號,但是在junos web ui不會顯示出來,要確認junos有沒有root帳號可以透過以下指令

 確認junos有沒有root帳號:
>show configuration | display set | match root
set system root-authentication encrypted-password "$xxxxxxxejxxxsQj2J."
出現這行代表有root帳號的配置,但是我們不知道密碼是什麼,所以用指令變更root的密碼

修改root密碼:
>configure
#set system root-authentication plain-text-password
輸入新密碼
#commit
修改完密碼後,再以ssh連線以root帳號登入SRX,會自動進入FreeBSD的shell,這時就能下FreeBSD指令了

一般登入junos之後會看到
henry@srx550>
換成root帳號之後就會變成
root@srx550%

若是不想用root帳號進入SRX,也可用junos帳號進freeBSD shell
>start shell
下完指令後會切換到%符號,此時就代表已經在FreeBSD shell了

由於是簡化的FreeBSD,所以有很多指令是不存在的
例如:man、free 這些很基本的指令

top 這個指令倒是有保留住

2015年12月3日 星期四

新增Juniper SRX550 防火牆規則方式



新增Juniper SRX550 防火牆規則


telnet登入Juniper SRX550進入設定模式,指令:
configure

新增StaticNAT指令範例:
set security nat static rule-set NAT rule Static-Rule1 match destination-address 192.168.0.91/32
set security nat static rule-set NAT rule Static-Rule1 then static-nat prefix 10.220.21.2/32
說明:
Static-Rule[序號] 序號依照防火牆上最後一筆資料遞增
destination-address [public IP]
prefix [private IP]

新增客戶來源IP指令範例:
set security address-book global address 192.168.0.127/32 192.168.0.127/32
說明:
address [命名][ip/mask]

若客戶來源IP很多,可將客戶IP群組化,指令範例:
set security address-book global address-set ADM address 192.168.0.127/32

set security address-book global address-set ADM address 192.168.0.128/32
set security address-book global address-set ADM address 192.168.0.129/32
說明:
address-set [群組名稱] address [ip/mask]

新增客戶使用的port資訊指令範例:
set applications application tcp_20 protocol tcp
set applications application tcp_20 destination-port 20
說明:
application [port名稱] protocol [協定]
application [port名稱] destination-port [port-number]

若客戶使用的PORT很多,可將PORT群組化,指令範例:
set applications application-set tcp_80_8080 application tcp_80
set applications application-set tcp_80_8080 application tcp_8080
說明:
application-set [群組名稱] application [port名稱]


新增規則指令範例:
set security policies from-zone untrust to-zone trust policy Rule707 match source-address 192.168.0.40/32
set security policies from-zone untrust to-zone trust policy Rule707 match destination-address 10.200.4.212/32
set security policies from-zone untrust to-zone trust policy Rule707 match application tcp_20_21_3389
set security policies from-zone untrust to-zone trust policy Rule707 then permit
說明:
set security policies from-zone [來源zone] to-zone [目的zone] policy [規則名稱] match source-address [來源IP/mask]
set security policies from-zone [來源zone] to-zone [目的zone] policy [規則名稱] destination-address [目的IP/mask]
set security policies from-zone [來源zone] to-zone [目的zone] policy [規則名稱] application [port名稱]
set security policies from-zone [來源zone] to-zone [目的zone] policy [規則名稱]  then [執行動作]

刪除語法,只要將上述範例的 set 改為 delete 即可,範例:
delete security nat static rule-set NAT rule Static-Rule1 match destination-address 192.168.0.91/32

=====
除了telnet、ssh以外,也可以透過 junos web ui 或是web CLI Editor 也可以進行操作

junos web ui 是視窗化介面,比較貼近使用者操作上手容易,但是細部的設定就無法進行
web CLI Editor 是在 junos web ui 的其中一個功能,裡面的語法格式類似 C語言,有學過程式設計的人非常容易上手
更進階的方式是 junos web ui 內的  Point and Click CLI設定方式接近 junos web ui 但是可設定的東西就比 junos web ui 多出非常多,也非常非常詳細