樹莓派-設備選購、2021年適合的SD卡

最近被樹莓派(Raspberry Pi)燒到,工作上也有接觸到迷你電腦,運算能力不比一般電腦遜色,具有輕巧、體積小而好攜帶,還有節能跟PD支援。這使得迷你電腦能用在更多的場景,勝任一些角色。

樹莓派本體是主機板,上面焊死處理器跟記憶體,沒有內建儲存空間。因此除了本體之外,還要再準備影像輸出、電源跟SD卡,才能做基本使用。

這裡我是選擇4B版本,8GB的RAM。

影像輸出

樹莓派4版內建兩個MicroHDMI孔,MicroHDMI線相比HDMI線是比較少見的,因此有一條MicroHDMI to HDMI線,就可以把影音輸出到顯示器上。

電源

樹莓派4版使用USB C接頭供電,個人也有很多PD的充電產品。 樹莓派電壓5V電流3A,只要一般USB C線材就可以跑得動。

SD卡

在4B版本中,是microSD,要小心不要買成大卡。SD卡仍然持續進步,更快的傳輸速度,A3規格的卡也出現了,但是樹莓派能跑得好嗎?一查才發現,買太好反而可能會是一種退步。

A1跟A2的測試規則不同,不少文章更是直接給出建議「不要買A2的SD卡」,直接翻船。

128GB現在主流就A2的SD卡,選擇也非常多。但評測也多半是用A1等級,表現上,各家差異也不小,如果想要找一點好用的SD,就不能隨意買張來用,得找型號去選擇,只好再找更多的評測。

以下是找到可以參考的文章。

最後照著A2等級SD卡評測,選擇最佳表現的 Kingston 128GB Canvas Go plus A2

需求選配

想把樹莓派做甚麼用?

第一個是Home Assistant,用來作為智慧家庭的管家;
第二個是影音播放器,可以直接輸出到電視上,或是搭配Google Cast投放;
第三個是資訊顯示跟互動,在前陣子沒有手錶看時間的日子,真的會不清楚時間;
第四個是臨時Server,最基本是DHCP跟RADIUS。這對於工作中的某些時候可以啟到神效。

根據虛擬機的經驗,我把記憶體跟SD卡容量都選到一定等級,相信這能撐到它的生命週期,可能是五年吧。

為了找到最超值的買法,搭配信用卡回饋,所以只好把更部分都拆開來買,沒有直接買一個全家餐。

外殼

材質有鋁殼、塑膠,因為有無線使用需求,直接捨棄鋁殼,工作上碰到的無線基地台都沒有使用鋁殼,以免無線訊號被卡在金屬屏蔽效應大幅減損。

觸控螢幕

外殼可以直接套上3.5吋觸控螢幕,就當作一個套件一起買。目前是沒有甚麼研究,如果好用就再來分享。

東西已經下訂,期待拿到的那天,可以讓我好好玩個一個月。

iperf3環境測速:只用一台筆電做兩端

iperf3是測速工具,優勢是可以侷限測速範圍,不像測速網站,一定要經過狹窄的對外頻寬,這樣可以盡情發揮內部網路效能。

此方法的需求:VM、VM用的外接網卡。

一台筆電安裝了iper3之後,可以當Server也可以當Client,如果當指向自己的網路介面卡IP,就會走電腦內部,可以看到內部處理效能的表現,不過也就無法測得經由外部的網路速度,結果也就不能做為參考。

我們做測速,需要先走到電腦外,再回來,這樣才會貼近現實數據。

如果要一台當二台用,自然就會想到VM。一般VM的設定是共用電腦網卡,如果是這種方式,測速路徑依舊是電腦內部。

VM是對的方向,而測速會走電腦內部,是因為測速兩端的介面卡同時存在於一台電腦中,或在內部路由就能到達。因此只要能做出「區別」,把介面卡隔開,一個接在筆電,另一個接在VM,兩卡能通一定得走外部,就可以達到期望的效果。

如果網路介面卡是「On Board」,VM要用就只能共享。但使用「外接」,就可以選擇在接在筆電還是VM,只要選擇接到VM,就能達到介面卡邏輯上分隔,強迫走外部,出去再回來。

VMware有個USB Tool,使用USB tool就可以實現讓外接網卡只跟VM連接。

這方法可以在有線1G測得900Mb,作測速是能勝任的。接下來就可以在筆電跟VM啟動iperf3互打,下圖為筆電連wifi,VM接網路線。

用iperf3測AP傳輸速度

使用情境,只有一個人,然後要在兩端啟iperf3測速。去客戶端測試,環境準備最好都自己,這能少掉很多麻煩。人手不足也是需要考量的,只有一人是無法在兩端同時移動,自己架了兩台,當在其中一台時,另外一台就沒有人可以留意了,要是出了什麼狀況,是無法即時處理。

因此使用這個方法,是可以只用一台電腦就做到iperf3測速,就能降低很多要求。雖然這個方法會有網點距離的要求,以及額外的外接網卡。

不過一個人能進行的話,就大幅減少缺人就做不了的困擾。

Port Mirror 初嘗試

Port Mirror是側錄封包,並且往其中一埠或一個目的端傳送錄下的封包,這些封包會用於分析,多半目的是用於流量分析或惡意檢測。

Port Mirror要具備兩個:

  • 可以側錄封包的設備,通常為Switch其自身功能。
  • 可以接收封包的設備。

在Switch,大廠牌通常都具有Mirror的功能。我個人用的也買了一台 NETGEAR GS305E,看中其有網管功能,終於有機會用到這項功能。

NETGEAR GS305E 設定 Port Mirror

接收設備是用Windows 10 + Wireshark,網卡接在Port 3,執行Wireshark後,可以看到Port2的封包。建議把接收Mirror網卡的IPv4跟IPv6給取消掉,這樣錄起來會比較乾淨。

基於資安,就不秀出成功圖片。

使用Port Mirror是一個很好的實戰教學,前提是先具有多半的IP跟Protocol知識,否則會一頭霧水而卡住。

在TroubleShooting時,對於一個熟悉網路的人,OSI的一到四層是很容易看出來的,狀況明顯,判斷也很明確。不過在更高層的地方出了問題,像是應用層出現了狀況,要是思考範圍只陷於低層級,就會覺得莫名其妙。

下了指令,卻沒有作用。確認一到四層沒問題之後,那麼指令是真的執行嗎?還是執行失敗呢?這是很耐人尋味的了。

Android11 802.1x CA憑證問題 – 以Aruba解決方案

今天終於親自讓Pixel5連上802.1x認證的Wifi,在這裡先留下一些筆記。

造成Android11連不上802.1x的問題根源是數位憑證認證機構(英語:Certificate Authority, CA)憑證,CA憑證一定得選擇,就意味著得匯入CA憑證到Android裝置,才可以解決問題。

CA憑證有許多解決方案,Windows Server也可以當CA。只是這裡選擇用Aruba ClearPassPolicyManager(CPPM)。

對於一個憑證菜鳥,這邊會一一講解概念。

先講最終的目標:手機上面的Wifi憑證的CA要跟Radius Server憑證的CA是可以對上的。

每個單位可以自行產生憑證(如:Radius Server),而替人簽署憑證的機構為CA,CA自己也有憑證,稱為CA憑證。

CA的運作模式是一條鏈,鏈的最上頭稱為「Root CA」,也是最源頭的簽署憑證機構。其他設備可以去向CA要求簽署設備自身的憑證,「請求簽署憑證」這項功能在設備上可以找到,按下後,設備會產生一串代碼,這串代碼傳至CA後,CA會簽署而產生簽署過的憑證,最後再把 簽署過的憑證傳到設備上,就完成加入這串CA鏈。

即使不是Root CA,也可以去簽署別台設備的憑證,然後別的設備繼續串在CA鏈的後方,成為次一級的CA。因此下游設備可以不斷簽署跟幫人簽署,這失去了公共監控,公信力不高。

使用CA本身的目的是在於驗證真偽,沒辦法控管第二級與之後的CA,但只要控管Root CA,就可以解決濫發跟公信力的問題,因此針對Root CA就有了許多要求,符合要求的就能合法CA,這些合法CA的清單也能在各種裝置上找到。

如果使用者使用CA憑證作認證,使用者在連線的時候會去查看認證伺服器的憑證,然後查看「自身使用CA憑證的CA」跟「 認證伺服器憑證的CA」是否相同,是的話就能信任。

將CPPM作為Radius Server,本身預設是自簽CA,因此得替換上面的憑證,去換成一張被CA簽署過的憑證。

而在CPPM裡面的On board,是可以作為Root CA。

因此使用CPPM policy manager(PM)去向CPPM on board(CA)請求簽署憑證,然後再把on board上的簽署憑證(Trust)匯回PM,就能完成替換 Radius Server 憑證的動作。(※https跟其他服務又有自己的憑證)

接著處理客戶端,客戶端缺甚麼?就是CA憑證。因為合格CA清單其中不會有自己起的CA,於是就把手動匯入。

現在 CPPM on board 上可以看到三張憑證,一張是PM的,另一張是自簽的,最後一張是Root CA,也是所謂的 CA憑證 。(CA簽署過的憑證,唯獨憑證所有者(請求簽署憑證的設備)才能使用的,因此可以排除PM跟自簽的。)

把Root CA的CA憑證匯出,放到客戶端上。在Android11上從「設定」>「安全性」裡找到安裝憑證,並選擇「Wi-Fi憑證」,並且在wifi連線設定中的「CA憑證」選項選擇剛剛匯入的憑證。

設定 > 安全性
安全性 > 進階 > 加密和憑證
安裝憑證
Wi-Fi憑證

只差最後一步了。

Android11 Wifi使用WPAx-Enterprise作認證,在設定中有項「網域」是強制輸入的,這要填甚麼呢?這裡要填「認證伺服器CA憑證的名稱」也就是Common Name(CN),這跟網址的Domain是不一樣的。在CA憑證的世界中, Common Name通常是用公司的名稱去申請,使用者在還沒通過之前是無法得知DNS的Domain,但能看到認證伺服器CA憑證的 CN,這是特別容易搞混的地方,所以得寫長一點去強調它。

已經完成了所有步驟,如果其他環節沒有出差錯,Android11就能連上802.1x認證的SSID。

特定路由走VPN,其他走當地

今天發現VPN被鎖,只能存取部分設備,不能上網,這是基於安全性的設置,是比較好的作為。環境:Windows 10、Global Protect (SSL VPN)。

不過也讓人頭痛,自動化如果要正常運作,不僅要能存取設備,還要可以上網回報,這樣子讓運作卡住。

說說VPN的運作,只要連上去後,除了特定網段,其餘流量都會走VPN出去。至於去哪裡往哪個介面送,這就是路由表的功能,查表決定封包方向,而Windows也有內建路由功能,可以做修改。

首先要先解決Default Route(預設閘道),透過 cmd 輸入「route print」 ,可以看到 0.0.0.0 0.0.0.0 這類的,由於我使用 Global Protect,所以沒有像這篇,可以取消遠端網路的預設閘道。

明明有兩個預設閘道,為什麼會都走VPN出去?這是因為Metric的關係。比起改Metric,更建議的做法是直接刪除走VPN的預設閘道。

透過「route delete 0.0.0.0 mask 0.0.0.0」就能刪除預設閘道。(記得用管理員權限執行cmd

接著把當地的預設閘道加回去「route add 0.0.0.0 mask 0.0.0.0 [Gateway IP]」。

不過路由表中有路由的預設閘道是「在連結上」,這個其實很簡單,就是把Gateway設定成介面IP。如果我的VPN介面是10.123.234.111,那麼Gateway就是 10.123.234.111 。

因此,如果想要透過VPN到達網段為「xxx.xxx.xxx.xxx/24」,就這樣輸入「route add xxx.xxx.xxx.xxx mask 255.255.255.0 [VPN介面IP]」。

EVE-NG 安裝在 ESXi 上與映像檔部署

遇到了很多困難,所以紀錄一下方式。

EVE-NG 安裝在 ESXi 上

關於EVENG VM有兩種版本,一種是OVF,另外一種是ISO。如果要快速部署,會使用OVF。

失敗,在ESXi上說需要更高的權限。

就算使用更高的權限,匯入OVF檔案也是失敗。

換個方式,使用ISO。教學影片

先把ISO匯入資料存放區,然後新增一個VM,最後要選擇ISO檔開機。如果沒有選對配置,就不會成功。最重要是要用BIOS開機。

  • 客體作業系統:Linux
  • 客體作業系統版本:Ubuntu Linux (64位元)
  • 開機選項 > 韌體:BIOS

順利安裝完成,重開完機,進入下一個階段。

映像檔部署

由於之前都在GNS3練習,手邊剛好有Cisco c7200跟L2、L3 IOU Switch的映像檔。至於要去哪裡取得,其實搜尋一下就會有了。

首先透過ESXi進入EVE-NG,預設帳/密為 root/eve ,然後會做一點基本設定,之後會再重開,再次進入,就能看到熟悉的Linux。

這裡推薦使用SSH連線跟WinSCP傳輸檔案,使用SSH連線,可以方便複製貼上,使用WinSCP可以快速把檔案傳到目錄,甚至可以直接把文件做修改,像是改成固定IP,會方便許多。

官方教學文件:

關於IOU的License,只要system name沒有更改,算出來都會是一樣的,可以不執行keygen.py,直接新增一個檔案 /opt/unetlab/addons/iol/bin/iourc 內容為下列代碼。

[license]
eve-ng = 972f30267ef51616;

這裡提兩個重要的提醒事項

  1. Cisco Dynamips images是吃 image 檔,bin檔可以解壓縮,解壓縮出來的檔案副檔名改成 image、主檔名就是bin檔的主檔名,直接透過WinSCP傳到對的目錄,或是照著文件去改。
  2. 凡是傳入檔案或做修改,請在根目錄執行指令「/opt/unetlab/wrappers/unl_wrapper -a fixpermissions」,因為預設讀寫權限會造成無法正常運行,下了指令就可以修改權限,讓映像檔正常運作。

簡記

因為GNS3的WEB介面太難用,也不能順利跑IOU。昨天同事傳給我看一個PNET,不過PNET不適合用在ESXi上,設計給Workstation,不過PNET算是目前看到最不錯的,畢竟映像檔是這類虛擬機LAB的入門障礙,PNET不需要自己去尋找。

於是嘗試使用EVE-NG去架設,需求是可以建立一個WEB,讓別人可以去存取練習,設計一些LAB給新人練習。最後也順利架起來,順便改成固定IP。

BGP – TTL Security

關於這個,大部分只有看到可以防止惡意的更新,消耗設備的CPU資源。

這邊先講解要如何進行防禦。

今天有兩個Router,彼此直連,因此當收到對方的BGP報文時,TTL沒有被減少過的,為最大值如255。

有一個攻擊者,接在任何一顆Router上,要攻擊另外一顆BGP Router,封包會轉送一次,這樣子TTL會減少1,然後才被BGP Router收到。

TTL Security是去檢查TTL的剩餘次數,如上述案例,TTL Security hop設定為1,就會丟棄TTL為254(255-1)以下的BGP報文。

不過呢!BGP的角色可以分為eBGP跟iBGP。在eBGP傳遞BGP報文時,TTL預設是為1;而iBGP則為255。因此,要用在eBGP上面,就要修改TTL。

目的

瞭解eBGP的TTL,修改BGP的TTL,最後施用TTL Security。

設定

R1、R2、R3彼此皆為eBGP關係。

!R1
conf t
int loopback 1
ip addr 1.1.1.1 255.255.255.255
no sh
int g0/0
ip addr 10.1.12.1 255.255.255.0
no sh
router bgp 1
network 1.1.1.1 mask 255.255.255.255
network 10.1.12.0 mask 255.255.255.0
neighbor 10.1.12.2 remote-as 2
neighbor 10.1.13.3 remote-as 3
exit

!R2
conf t
int loopback 1
ip addr 2.2.2.2 255.255.255.255
no sh
int g0/0
ip addr 10.1.12.2 255.255.255.0
no sh
int g1/0
ip addr 10.1.23.2 255.255.255.0
no sh
exit
router bgp 2
network 2.2.2.2 mask 255.255.255.255
network 10.1.12.0 mask 255.255.255.0
network 10.1.23.0 mask 255.255.255.0
neighbor 10.1.12.1 remote-as 1
neighbor 10.1.23.3 remote-as 3
exit

!R3
conf t
int loopback 1
ip addr 3.3.3.3 255.255.255.255
no sh
int g0/0
ip addr 10.1.23.3 255.255.255.0
no sh
int g1/0
ip addr 10.1.34.3 255.255.255.0
no sh
exit
router bgp 3
network 3.3.3.3 mask 255.255.255.255
network 10.1.23.0 mask 255.255.255.0
neighbor 10.1.12.1 remote-as 1
neighbor 10.1.23.2 remote-as 2
exit

設定為後,R1跟R2形成鄰居,R2跟R3形成鄰居,而R1跟R3卻沒有形成鄰居。

R3#show ip bgp summary
Neighbor        V          AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.1.12.1       4          1       0       0        0    0    0 never    Idle

設著用R3去ping到R1(10.1.12.1),是互通的。

這是因為eBGP的預設TTL為1,所以傳到R2就被丟棄了。要調整一下eBGP的TTL。

R1(config-router)#neighbor 10.1.23.3 ebgp-multihop 255
R3(config-router)#neighbor 10.1.12.1 ebgp-multihop 255

接著,R1跟R3就形成鄰居關係了。

用wireshark看,R1發出的TTL變成255,R1收到的變成254,但到R2只有1。

接著在R2下 TTL Security,然後去影響R3的Route,看R2能不能更新。

R2(config-router)#neighbor 10.1.23.3 ttl-security hops 1

R3(config)#
int loopback 2
ip addr 3.3.4.3 255.255.255.0
router bgp 3
network 3.3.4.0 mask 255.255.255.0
exit

接著觀察R2有沒有從R3收到Loopback2的Route,結果收到從R1傳來的R3的Loopback2,這是因為BGP的收斂速度比較慢,過一陣子就會斷了。

要讓R2跟R3重新建立起鄰居關係,那麼R2收到的TTL需要超過254,因此可以在R3下指令,改成255。

R3(config-router)#neighbor 10.1.23.2 ebgp-multihop 255

很快R2跟R3就建立起鄰居關係了。

接著在R3對R1下TTL Security。

R3(config-router)#neighbor 10.1.12.1 ttl-security hops 1

Remove ebgp-multihop before configuring ttl-security

這裡收到一句提示,其實當我們在R2下TTL-Security時,R2對R3發的BGP報文TTL就已經改為255。這也是因為TTL Security的機制,只有從TTL最大值開始算,對方收到才會是最大值,才能去防禦攻擊。

正確的設定方式兩鄰居同時啟用ttl-security!

R1(config-router)#neighbor 10.1.23.3 ttl-security hops 2

R3(config-router)#
no neighbor 10.1.12.1 ebgp-multihop
neighbor 10.1.12.1 ttl-security hops 1

R1跟R3中間經過R2轉了一手,因此TTL會減1,等R3收到時,TTL為254,就會被丟棄,於是就沒有辦法更新route。

R3(config-router)#

neighbor 10.1.12.1 ttl-security hops 10

在R3收到TTL為254,新的TTL Security設定只要小於244才會丟棄,254 > 244 所以接收,因此就可以找回鄰居關係。

這樣的機制,除了鄰居直連之外,理論上,只要ttl-security hops超過1,攻擊者可以從中間轉送的Router去偽造BGP報文TTL為255也能成功。

不過TTL-Security已經可以防止從遠處攻擊,降低了不少潛在風險。

Archive(Cisco)

概念

Archive是一個啟用自動保存的指令,能保存甚麼?Running-Config跟Config的Log。

Archive在管理上是很實用的,聽同學說在設備上的一舉一動都會被錄下來,這點可以透過Archive去達成,看得一清二楚。

由於Archive是思科的功能,似乎在其他家沒有,因此就不特別分類,並且在此篇完成實戰。

目的

瞭解Archive的設定。

設定

TFTP-Server(11.12.13.1)可以使用3CDeamon,將電腦跟R1串起來。


!R1
config t
int g0/0
ip addr 11.12.13.2 255.255.255.0
no sh
exit

首先要先PING到TFTP-Server,出現”!”就可以往下進行。

進入到Global Configuration mode,輸入指令 archive。

R1(config)#archive
R1(config-archive)#

這裡對archive其中兩個指令說一下,其他的還好。

path: path tftp://11.12.13.1/$h
這個指令可以把Running-Config用tftp存到11.12.13.1,$h為hostname,進到路徑會看到 R1-0之類的,-0為Config編號。

maximum:預設是10,如果沒有改,最多只會保留10個archive config。

path tftp://11.12.13.1/$h

接著手動保存。

end
archive config

可以看到冒出”!”,config透過TFTP方式成功送到Server。

show archive 

可以看到第一筆已經在出現了,編號為0。

這樣有個狀況,沒有辦法在Config有更動的時候,即時備份出一份。一旦Config被保存的時候,Archive就應該馬上匯出一份。

R1(config-archive)#write-memory

馬上來嘗試有沒有效果。

copy running-config startup-config
write memory

這兩者都會觸發Archive,然後直接輸出一份config。

要是忘記保存呢?是不是就當前Running-Config就不會留下了?可以下指令,每隔一段時間就執行archive,去保存config。

為了區分是Running-config還是Startup-config,所以先做一點變更。

R1(config)#
int loopback 1
ip addr 1.1.1.1 255.255.255.255
exit
archive
time-period 1 !每隔一分鐘就保存Running-config

這裡很明顯了,是保存Running-config。等待一分鐘來看看,確實有收到,裡面也有loopback的設定。

由於有了變動,現在,要去嘗試版本控制最重要的功能:發現各版本區別。

R1#
show archive config differences tftp://11.12.13.1/R1-0

這是比較Running-config跟指定的檔案差別,跟第一個檔案相比,變動的部分都會顯示出來,就能知道兩者差異。

不過,這是還不夠的。這只能看到Config的變動,但是沒有順序,沒有誰下的,這樣對於安全性是不夠的。接下來要啟用log config,這樣一旦對設定有疑問,就能看出要找誰。

R1(config-archive)#log config
R1(config-archive-log-cfg)#logging enable
R1#show archive log config all
 idx   sess           user@line      Logged command
    1     1        console@console  |  logging enable

看到了第一個被記錄的指令是由console連入,下 logging enable。

接著,新增其他的帳號。

R1(config)#
username jn privilege 15 password jn
line vty 0 4
login local
exit
R1#show archive log config all
 idx   sess           user@line      Logged command
    1     1        console@console  |  logging enable
    2     1        console@console  |  username jn privilege 15 password jn
    3     1        console@console  |  !config: USER TABLE MODIFIED
    4     1        console@console  |line vty 0 4
    5     1        console@console  | login local
    6     1        console@console  | exit

這裡可以直接看到,新增使用者jn的密碼是jn。密碼是很敏感的事情,因此需要被隱藏起來。

R1(config)#
archive
log config
hidekeys
exit
exit
username jn2 privilege 15 password jn2
R1#show archive log config all
 idx   sess           user@line      Logged command
    1     1        console@console  |  logging enable
    2     1        console@console  |  username jn privilege 15 password jn
    3     1        console@console  |  !config: USER TABLE MODIFIED
    4     1        console@console  |line vty 0 4
    5     1        console@console  | login local
    6     1        console@console  | exit
    7     2        console@console  |archive
    8     2        console@console  | log config
    9     2        console@console  |  hidekeys
   10     2        console@console  |exit
   11     2        console@console  |  exit
   12     2        console@console  |username jn2 privilege 15 password *****
   13     2        console@console  |!config: USER TABLE MODIFIED

新增的使用者jn2,看到的密碼變成*****。

接著使用telnet登入,然後新增使用者jn3。

R1#

config t
username jn3 privilege 15 password jn3
exit
R1#show archive log config all

   14     3             jn@vty0     |username jn3 privilege 15 password *****
   15     3             jn@vty0     |!config: USER TABLE MODIFIED

看到連入的jn做了那些設定。

不過這裡log config只是暫存的,一旦重新開機,就會全部消失。

這些log config紀錄可以馬上傳到syslog server,讓log可以被保存。

R1(config-archive-log-cfg)#notify syslog !也要另外設定logging server

再下一些指令,從syslog server上看,的確可以看到。

到這裡已經可以把誰下了甚麼指令跟順序都記錄起來,方便日後的管理。

IP SLA – Jitter and Connectivity

Service-level Assurance(SLA)是一個主動偵測的Agent,告訴Agent要做甚麼,安排執行,之後就能收到結果,然後依結果去調整某些設定。

IP SLA在教學上多半使用 ICMP-echo,但Cisco CCNP ENARSI需要還要學會:jitter, tracking objects, delay, connectivity)等的應用。

為此,就簡單來帶過一下IP SLA Jitter and Connectivity。

設定

R1先接NAT,透過電腦可以做NAT然後連上網際網路。

R1為設定IP SLA的設備,然後IP SLA目的端為R2或網際網路。

如果要看IP SLA執行的結果,可以在輸入指令:

show ip sla statistics

Jitter

jitter是甚麼?先來點簡單地介紹相關名詞。以下是關於udp-jitter的相關統計值。

IPSLA operation id: 1
Type of operation: udp-jitter
        Latest RTT: 17 milliseconds
Latest operation start time: *08:04:34.043 UTC Tue Feb 2 2021
Latest operation return code: OK
RTT Values:
        Number Of RTT: 2                RTT Min/Avg/Max: 15/17/20 milliseconds
Latency one-way time:
        Number of Latency one-way Samples: 0
        Source to Destination Latency one way Min/Avg/Max: 0/0/0 milliseconds
        Destination to Source Latency one way Min/Avg/Max: 0/0/0 milliseconds
Jitter Time:
        Number of SD Jitter Samples: 1
        Number of DS Jitter Samples: 1
        Source to Destination Jitter Min/Avg/Max: 7/7/7 milliseconds
        Destination to Source Jitter Min/Avg/Max: 2/2/2 milliseconds
Packet Loss Values:
        Loss Source to Destination: 0           Loss Destination to Source: 0
        Out Of Sequence: 0      Tail Drop: 0
        Packet Late Arrival: 0  Packet Skipped: 18
Voice Score Values:
        Calculated Planning Impairment Factor (ICPIF): 0
        Mean Opinion Score (MOS): 0
Number of successes: 25
Number of failures: 5
Operation time to live: Forever

Jitter跟Voice相關,主要來測量語音封包的品質。 參考

Jitter抖動,為什麼會造成抖動?當語音封包傳遞時,被切成許多片段,而各片段抵達目的所經過的時間不一,抵達時間與平均的差異為Jitter。

目的端會即時解碼播放,這就要會讓還原的聲波跟當初的波型產生不一樣。抖動會很明顯地影響聽者的感受,因為波型不同,聽起來就是不同的聲音。因此jitter得在一定程度以下,才能保證語音品質。

※RTT(Round Trip Time):一來一往的時間。

簡單介紹完Jitter要開始講設定,ip sla的Jitter,除了自身啟用ip sla,還需要目的端成為「ip sla responder」才能正常運作。

語音是一來一往的,目的端收到語音封包,就能計算那些相關數值,然後把數值回應回去。

!R1
ip sla 1
udp-jitter 10.1.12.2 65000
timeout 5000
frequency 20
exit
ip sla schedule 1 start-time now life forever
!R2
ip sla responder
ip sla responder udp-echo ipaddress 10.1.12.1 port 65000

順便補充,ip sla tcp-connect的設定也跟jitter很像,也需要目的端啟用responder。

Connectivity

對一般使用者來說,上網是最常用到的。因此,保證網站能被連線到是非常重要的。

這很有一個很棒的網站:https://jnnetlab.com/
對!就是這個部落格~~

如果哪天不能連到這裡,就要趕快打電話去罵ISP,要他們趕快恢復網路連線!

要怎麼樣去下 IP SLA 呢?

ip sla 30
http get http://jianning0915.wordpress.com/ name-server 168.95.1.1
timeout 5000
frequency 60 !最小值
exit
ip sla schedule 30 start-time now lift forever

心得結論

由於在ENARSI考了一題ip sla http的設定,不會,就只好事後惡補。ip sla搭配tracking object可以達到自動調節網路結構的功能,算是Soft-Defined(SD)系列的一個起步。

測試 -> 結果 -> 調整 -> 測試 -> ……

這要寫起出來,可以變得很複雜。就像Policy-map一樣從ACL一路往上建。善用SLA,就能一路往上蓋,最後變成SD Network。

SLA這章節要瞭解常見的網路服務品質好壞,是取決於甚麼。

uRPF

概念

Reverse Path Forwarding是一個安全機制,它檢查IP來源是否是合法的區域,一般來說都是看目的地然後轉送,因此檢查來源IP便是逆向的。

為了防止甚麼?如果偽冒一個IP去PING目的端,目的端會回給偽冒的IP,然後被偽冒的端就會收到目的端的封包。這是一種攻擊手法。如果做了反向路徑檢查,就會發現偽冒的IP不是來自Routing Table上的方向,然後drop。

找到不錯的影片講解:[Chin] DoS、DDoS攻擊原理說明與Cisco解決方案uRPF(unicast Reverse Path Forwarding)

uRPF有三種設定模式

Strict嚴格:看 來源端的IP 跟 來源端的介面。來源端介面不能到來源端IP則drop。

Loose寬鬆:只看 來源端的IP。

VRF:跟Loose一樣,但只作用於VRF上。

※在Cisco設備上,CEF需要啟用,才能運作uRPF。

一般來說uRPF是不會拿default route做檢查,如果Router從default route來了一個沒有學到網段的封包,就會drop。這裡可以下指令,避免被錯誤drop。

ip verify unicast source reachable-via {rx | any} allow-default

然後uRPF也不能自己ping自己,如從Loopback去ping到Gigabitethernet0/0,在uRPF啟用時,這樣的封包會被drop,但可以下指令避免。

ip verify unicast source reachable-via {rx | any} allow-self-ping

實戰

uRPF – Strict與Loose:比較這兩者的差別,順便帶入allow-default跟allow-self-ping。

uRPF – Strict與Loose

本篇藉由實作去了解uRPF要如何設定,以及實際的運作情形。

Strict跟Loose的共同點是會去查來源端IP是否可經由Routing Table到達,而Strict是多上一個條件:要從來源端的介面去到達。

甚麼時候要用Strict?甚麼時候要用Loose?取決於介面所在的位置。

內部的網路環境都是封閉且已知的,就可以使用Strict。如L2到L3。

如果是開放的且已知路由,收到的封包已經轉了好幾手,就可以設定Loose。如L3到L3。

allow-default適用會用到default route的介面。如L3到ISP。如果內部網路不連外,就不用下這個選項。

設定

R1為目的端,R2跟R3為ISP,R4是攻擊端或是ISP2。

!R1
conf t
int g0/0
ip addr 12.1.2.1 255.255.255.0
no sh
exit
ip route 0.0.0.0 0.0.0.0 12.1.2.2
!R2
conf t
int loopback 1
ip addr 2.2.2.2 255.255.255.255
ip ospf 1 a 0
exit
int g0/0
ip addr 12.1.2.2 255.255.255.0
no sh
ip ospf 1 a 0
int g1/0
ip addr 23.2.3.2 255.255.255.0
no sh
ip ospf 1 a 0
exit
router ospf 1 
exit
ip route 0.0.0.0 0.0.0.0 23.2.3.3
!R3
conf t
int loopback 1
ip addr 3.3.3.3 255.255.255.255
ip ospf 1 a 0
int g0/0
ip addr 23.2.3.3 255.255.255.0
no sh
ip ospf 1 a 0
int g1/0
ip addr 34.3.4.3 255.255.255.0
no sh
ip ospf 1 a 0
exit
router ospf 1

exit
ip route 0.0.0.0 0.0.0.0 34.3.4.4
!R4
conf t
int loopback 1
description Fake_WAN
ip addr 99.99.99.99 255.255.255.255
int loopback 2
description Fake_R2
ip addr 2.2.2.2 255.255.255.255
int loopback 3
description Fake_R2
ip addr 12.1.2.2 255.255.255.255

int g0/0
ip addr 34.3.4.4 255.255.255.0
no sh
exit
ip route 0.0.0.0 0.0.0.0 34.3.4.3

首先要在R1打開debug,方便觀察。

debug ip icmp

接著先在R4用正常ping到R1

R4#ping 12.1.2.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 12.1.2.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/3/4 ms

觀察R1

R1#
*Feb  2 05:58:28.667: ICMP: echo reply sent, src 12.1.2.1, dst 34.3.4.4

可以看到R1有收到ICMP並且成功回覆。

接著用R4的Loopback 1(99.99.99.99)去ping到R1。

R4#ping 12.1.2.1 source loopback 1

R1#
*Feb  2 06:01:22.507: ICMP: echo reply sent, src 12.1.2.1, dst 99.99.99.99
*Feb  2 06:01:22.527: ICMP: dst (12.1.2.1) host unreachable rcv from 12.1.2.2

99.99.99.99並不在R2的RoutingTable裡,不過還是把ICMP傳到R1去了。這是因為轉送時只檢查目的端在不在RoutingTable,這一點,可以被利用去做網路攻擊。

先檢查R2的G1/0是否有啟用 uRPF ,如果沒有就啟用。

R2#show cef interface g1/0

...
  IP unicast RPF check is disabled

在R2的G1/0下指令,將uRPF啟用,由於G1/0是連接L3跟L3,所以使用Loose模式。

ip verify unicast source reachable-via any

any為Loose。rx為Strict。

回頭用R4的Loopback 1(99.99.99.99)去ping到R1,發現R1已經沒有任何log跳出來。

這次改用R4的Loopback 2(2.2.2.2)去ping到R3的Loopback,先在R3打開debug並且用loose的uRPF檢查。

R3#debug ip icmp
ICMP packet debugging is on
R3#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R3(config)#int g1/0
R3(config-if)#ip verify unicast source reachable-via any


2.2.2.2是R2的,現在被R4給冒用,如果在R3的G1/0下Loose模式,會因為在RouteTable中找得到,所以冒用IP的ICMP會被轉送。

現在改下Strict,再PING,由於冒充R2的ICMP來自不是2.2.2.2所屬網段的介面,故直接被drop,R3連log都不會跳出來。

R3(config-if)#ip verify unicast source reachable-via rx

最後一個指令:allow-default。

其實R4的Loopback 1也可以當成是外部合法的IP,但因為Default Route不會被RPF作為檢查,所以在半途就RPF檢查給drop。

Default Route是連接網際網路很重要的Route,如果不能正常轉送,就會不能正常上網。

這次要讓R4的Loopback1(99.99.99.99)跟R1能通,因此要在R2跟R3啟用allow-default。

R2(config)#int g1/0
R2(config-if)#ip verify unicast source reachable-via any allow-default

R3(config)#int g1/0
R3(config-if)#ip verify unicast source reachable-via rx allow-default

結果


R4#ping 12.1.2.1 source loopback 1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 12.1.2.1, timeout is 2 seconds:
Packet sent with a source address of 99.99.99.99
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 12/49/64 ms

結論心得

RPF檢查是很實用的防禦手段,可以盡早阻擋住冒用IP的攻擊。反向檢查也有一點防火牆的味道。

不過想一想,萬一這個沒有下好,就會變成大災難,因此要先很瞭解之後,才建議使用。

為了想出一套清楚的講說跟實際應用,花了不少時間在這之上。能夠想清楚,也是算是有收穫的。

PM – Policing and Shaping

概念

Police是將超過限制值得流量直接drop,非常粗暴但對控制流量非常有效。

Shape則是把超過限制值的用queue存起來,之後讓再將儲存的封包放出,盡可能把流速控制住。

如果你是家庭用戶,ISP用Police會給人非常不爽的體驗,一旦超過流量連線會斷斷續續。Shape只會讓網路變慢,至少還能保持連線。TCP的機制能控制傳輸速度,Shape就可以穩穩路。

設定

這個設定不簡單,但會是很棒的思考Policy-map的過程。

首先Police,設定在R1跟R2的網域,並且限制100KB。
接著Shape,設定在R3的網域,並且限制100KB。

為了更直觀的觀察流量,使用SNMP是很方便了,因此有了Cloud。(設定方法請查SNMP

最後要讓Policy-map用在哪裡?連接SNMP那條嗎?如果ACL沒有只限制ICMP,SNMP就可能被納入ACL,然後SNMP封包被Police或Shape,就會讓我們看不到即時流量圖,圖型會有Gap而不連續。

R5變成了丟流量的目的地,R1、R2、R3皆Ping到R5作觀察。

!R1
conf t
int g0/0
ip addr 10.1.14.1 255.255.255.0
no sh
exit
ip route 0.0.0.0 0.0.0.0 10.1.14.4

!R2
conf t
int g0/0
ip addr 10.1.24.2 255.255.255.0
no sh
exit
ip route 0.0.0.0 0.0.0.0 10.1.24.4
!R3
conf t
int g0/0
ip addr 10.1.34.3 255.255.255.0
no sh
exit
ip route 0.0.0.0 0.0.0.0 10.1.34.4

!R5
conf t
int g0/0
ip addr 10.1.54.5 255.255.255.0
no sh
exit
ip route 0.0.0.0 0.0.0.0 10.1.54.4

!R4
conf t
int g0/0
ip addr 10.1.14.4 255.255.255.0
no sh
exit
int g1/0
ip addr 10.1.24.4 255.255.255.0
no sh
exit
int g2/0
ip addr 10.1.34.4 255.255.255.0
no sh
exit
int g3/0
ip addr 10.1.54.4 255.255.255.0
no sh
exit
int g4/0
ip addr 11.12.13.254 255.255.255.0
no sh
exit
ip route 0.0.0.0 0.0.0.0 11.12.13.1
! snmp
snmp-server community PM-Policing_and_Shaping

要完成Policy-map,得從低階一路組成高階,先下ACL。※這裡指定icmp

! ACL
ip access-list extended R1
permit icmp 10.1.14.0 0.0.0.255 any 
ip access-list extended R2
permit icmp 10.1.24.0 0.0.0.255 any
ip access-list extended R3
permit icmp 10.1.34.0 0.0.0.255 any
exit

ACL下完了,才能下Class-map。

! Class-map R1_or_R2
class-map match-any R1_or_R2
match access-group name R1
match access-group name R2
exit
! Class-map R3
class-map match-any R3
match access-group name R3
exit

有了Class-map,才能下Policy-map。

! Policy-map
policy-map Policing_and_Shaping
class R1_or_R2
police 800000 !800000 bit/sec = 100000 byte/sec = 100KB/sec
exceed-action drop
exit
exit
class R3
shape average 800000
queue-limit 10000 bytes
queue-limit 3000 ms
queue-limit 100 packets
exit
exit

最後一步,就是將Policy-map應用到某處,Policy-map就成為介面的Service-Policy其中一份子。

! Apply => service-policy
int g4/0
service-policy output Policing_and_Shaping
exit

之後分別用R1跟R3去PING到R5,觀察開始!

PING的機制是收到後就會馬上回傳,如果沒收到,等到Timeout就會傳下一次。

這邊流量限制是100KB。

!R1
ping 10.1.54.5 size 1000 repeat 500
ping 10.1.54.5 size 2000 repeat 400
ping 10.1.54.5 size 4000 repeat 300 !開始出現 . 
ping 10.1.54.5 size 8000 repeat 100
ping 10.1.54.5 size 10000 repeat 50
ping 10.1.54.5 size 16000 repeat 20 ! ......

這裡要注意一下MTU,會讓封包被切成片斷。

!R3
ping 10.1.54.5 size 1000 repeat 500
ping 10.1.54.5 size 2000 repeat 400
ping 10.1.54.5 size 4000 repeat 300 
ping 10.1.54.5 size 8000 repeat 100
ping 10.1.54.5 size 10000 repeat 50
ping 10.1.54.5 size 16000 repeat 20 

Shape只會讓速度變慢,加長回應的時間,不至於被判斷成 . 。

結論心得

這也是我第一次使用靠自己去弄出來,雖然課堂有教過。可以搭配MTU去觀察Fragment。之後會運別的PM,達成不同的條件限制,然後用SNMP觀察PBR的應用成果。