0%

最近在實做 LTE 網路 Attach 流程 Non-access Stratum (NAS) 層加密及 MAC 值計算時,重新看了一次 \(K_{NASint}\)\(K_{NASenc}\) 的計算方式,因此寫一篇文章紀錄以供日後參考。

計算 \(K_{NASint}\)\(K_{NASenc}\) 需要 \(K_{asme}\) 及 Key derivation function (\(KDF\))。 \(K_{asme}\) 可以透過 LTE 鑒權的流程取得。

閱讀全文 »

最近想分析 Nginx 的 Log,最後自己寫了一個 regex,記錄一下。在 IP 部分省麻煩沒有做任何驗證,IPv4 或 IPv6 皆可。

1
(?P<ip>[^\s]+)\s-\s(?P<remote_user>[^\s])\s\[(?P<time_local>[^]]*)\]\s\"(?P<request>(?P<method>[A-Z]{3,7})\s(?<uri>.*)\s(?<http_version>HTTP\/[^"]+))\"\s(?P<status>\d{3})\s(?P<body_bytes_sent>\d+)\s\"(?P<referer>[^\"]*)\"\s\"(?P<http_user_agent>[^\"]+)\"\s\"(?P<http_x_forwarded_for>[^\"]+)\"

這個正規表達式對應的是預設的 Nginx main log 格式:

1
2
3
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
閱讀全文 »

前幾天花了一些時間將 Raspberry Pi 接上 Cat-M1/NB-IoT,過程中遇到一些障礙,決定寫一篇文章將完整的過程記錄下來。

實驗設備

  1. Raspberry Pi 3B+
  2. Waveshare SIM7000C NB-IoT HAT
  3. 中華電信 NB-IoT SIM 卡一張

SIM7000 能夠支援 CAT-M1 與 NB-IoT,依據支援的頻段有分為四個不同的版本:SIM7000A, SIM7000C, SIM7000E, SIM7000G,其中 A 代表 America,C 代表 Chinese,E 代表 Europe,而 G 則代表 Global。選購時須要依據所在的地區及當地 ISP 所支援的頻段來購買,否則 SIM 卡插上去可是找不到基地台的。在台灣我選擇的是 SIM7000C,聽說 SIM7000E 也能通。而 SIM7000G 是全頻段支援,因此如果買的到這張應該是最方便,但是在我寫這篇的時候還找不到 SIM7000G 版本的 HAT,所以最後買了 SIM7000C。

除此之外還需要一張 NB-IoT SIM 卡,目前中華電信的方案每月最低只要 10 元,有 5 MB 的傳輸量,不過似乎是企業方案,只能透過公司行號來申請,如果有個人想要申請可能還是打個電話去問問。

目前我附近掃到 NB-IoT/CAT-M1 基地台只有中華電信,其餘的可能是在其他頻段。

閱讀全文 »

一條 TCP 連線的建立傳統上少不了的就是三相交握的過程,執行三項交握有許多優點,包括增加連線的可靠性、同時也允許連線的雙方協調連線的設定,例如是否使用 Window-scaling 等等,也能避免一些常見的攻擊模式,像是 IP Spoofing 或是被用來當作反射攻擊、放大攻擊的節點。但是三項交握同時也伴隨 overhead,這些成本在區域網路中因為延遲低 (小於 0.1ms) 並不明顯,但如果將場景搬到跨洲的網路時,這些成本就變得無法忽視。

舉個例子,當你在利用 FTP 把 10000 個檔案從美國傳回台灣,因為 FTP 的特性會為每一個檔案建立一條新的連線。考慮美國到台灣的 RTT 大概是 200ms,每建立一個連線就要花掉 2*RTT 的時間,等於是 0.4 秒鐘,而這只是一個檔案。10000 個檔案光連線建立就要花費 4000 秒,一個多小時就這樣過去了,還不包括實際傳輸檔案的時間。要解決這樣的問題,一般來說就是盡量使用 persistent connection 或是口語一點的 long-lived connection,避免建立新的連線、重複使用舊的連線,事實上這種作法還有一個好處就是避免 TCP Slow-start,不用每條連線都等待 congestion window ramp-up。然而像 FTP 這種早就該放進博物館卻還是有一堆人在使用。

另一個例子則是之前我有特別寫文章介紹的 DNS-over-HTTPS,用 TCP 來做 DNS Server 就是典型的 short-lived connection 的例子,想像你要解個 domain 要至少花上 2*RTT 的時間 (當然這邊還有其他議題,例如 TLS Handshake 本身就要花上 2*RTT,當然有些解法,像是 TLS False-start 及 TLS 1.3 的 Session resumption,等哪天有空再補上)。為此 RFC 7413 就在 TCP 中延伸了一個 Fastopen 的方法來加快連線建立的速度。

閱讀全文 »

透過 DNS-over-HTTPS 實現 DNS Request 加密,Mozilla 對此提出新標準

閱讀全文 »

Nginx 1.12 加入了 Dynamic module 的功能,可以動態載入想要的功能。在 FreeBSD Package 中,預設的 nginx 不知道為何將 HTTP/2 的選項關掉了,因此要開啟 HTTP/2 只能選擇安裝 nginx-full。然而安裝完後卻會發現 nginx 開起來卻看不到熟悉的 "Welcome to nginx!" 畫面。 查了一下在 error.log 出現資訊

閱讀全文 »

如果有人想要買網管型 Switch,跑來問我該買哪一台比較適合,我一定唯一推薦買二手 Cisco Switch,不但功能多、穩定,而且最重要的,價格非常的實惠。以目前在沒屋頂的售價來說,一台 48 port 1Gbps C2960 只要 3000 元以內就搞定,你想要的 dhcp snooping, mac binding, vlan 一應俱全。如果你想要找基本的 L3 Switch,可以找看看 C3560e,帶兩個 10G X2 接口 (可以轉成 TwinGig 接四個 1G SFP),價格約落在 4000 以內就有了,還支援 PoE。如果需要比較完整的 L3 功能可以考慮 C3560G/C3750G。目前全新的 D-Link 或是 TP-Link 用這樣的價格都買不到,而且界面也不好用。

但是使用 Cisco 的設備會遇到一個麻煩,就是它會鎖 Mini-GBIC vendor code;因此如果插上第三方的 SFP/SFP+,該 port 就會直接進入 err-disabled 的狀態,完全無法使用。一般的作法是請對方燒 ID (掏寶上的廠商多半會配合),另一種更簡單的方法就是直接在交換器上關閉這個檢查。

閱讀全文 »

在我使用 DPDK 的經驗裡,要分配空間通常都是直接利用 rte_pktmbuf_pool_create() 函式來建立。這個函式會建立一個專門用於存放 packet buffer (struct rte_mbuf) 的儲存池。完整的函式 prototype 如下:

閱讀全文 »

前鎮子申請了中華電信的 PPPoE IPv6 Dual Stack 服務,在我的 Linux Router 上只需要在 /etc/ppp/options 中加入

/etc/ppp/option
1
+ipv6 ipv6cp-use-ipaddr

接著 poff/pon 之後就能夠正確取得 IPv6,router 也能夠正確連上 IPv6 網站,但麻煩的是中華電信只配了一段 prefix 64 的 subnet,如果要把這段 IP 分配給其他台電腦使用,就要花費一些功夫。索性就把它寫成一個 script,並且讓它在連上 PPPoE 後自動執行。

閱讀全文 »

VirtualBox 中網路卡預設的 BootROM 是使用 iPXE,但是這個預設的 iPXE 只有少少的功能,例如在無碟開機所需要的 iSCSI 功能沒有編進去。當然我們可以利用 DHCP + TFTP 送 iPXE Image 做 PXE chainloading,但是實務上就會遇到一些問題,最主要是無法確定現在用的究竟是哪個 iPXE,因為 user-class 通通都是 "iPXE"。

我的解決方案就是回歸使用 Intel PXE BootROM 這樣就能正常使用 PXE Chainloading 的功能導入功能完整的 iPXE。在 VirtualBox 的 Extension Pack 裡面就有提供 Intel 的 PXE BootROM。在安裝完 VirtualBox Extension Pack 之後,找找看 /usr/local/lib/lib 有沒有 virtualbox 資料夾。我使用 Archlinux,就可以找到 /lib/virtualbox/ExtensionPacks/Oracle_VM_VirtualBox_Extension_Pack 這個目錄,在裡面有個 PXE-Intel.rom 檔案,這就是 Intel 的 PXE BootROM,接著我們要設定 Guest 的網卡改用這個 PXE Image 開機。

設定的方式是透過 VBoxManage 這個指令:

1
vboxmanage setextradata Diskless10 VBoxInternal/Devices/pcbios/0/Config/LanBootRom /lib/virtualbox/ExtensionPacks/Oracle_VM_VirtualBox_Extension_PackPXE-Intel.rom
其中 Diskless10 是 Guest 的名稱,如果換成 global 那麼所有的 Guest 都會使用 Intel PXE BootROM。

最近在 Taobao 上找到一個相當不錯的東西: Mellanox Connect-X2 10G NIC (MNPA19-XTR)。這張卡在淘寶上的價格是 150 人民幣,換算成台幣之後 700 元有找,相較於 Intel x520 價格只要大概 1/10 不到,作為入門的 10G 網卡來說真的相當划算,我又挑了幾款 Cisco 的 SFP+ DAC 線之後,就交由集貨運來台灣。10G 網卡目前對我最重要的用途就是作為 iSCSI Storage 的介面卡,FreeBSD 搭配 ZFS 在加上 kernel-level 的 iSCSI target 相當適合作為日常 Storage 、VM storage 或是教室、辦公室無碟系統使用。

閱讀全文 »

深夜看到 Facebook 上有人分享這個西打燉肉的食譜,那個油亮油亮的質感實在是太犯規了,看完口水差點滴在鍵盤上Orz,只好決定隔天立馬到買材料自幹一下蘋果西打燉肉;附上正版的西打燉肉參考影片:

閱讀全文 »

在最近發布的 FreeBSD 11.0-Release 多了一個新功能 - blacklistd,這個功能最早是設計在 NetBSD 7 中,用來阻擋暴力破解 (Brute-force) 或者阻斷服務 (Denial of Service) 等攻擊。blacklistd 提供了一個界面讓服務 daemon 遭遇攻擊時能夠發出通知,當攻擊次數達到某個自訂的門檻之後,blacklistd 能夠搭配防火牆來阻斷惡意攻擊。

閱讀全文 »

最近碰的東西有點雜,需要一個地方好好把他們寫下來,Survey 了一下發現台灣人寫的 Hexo 是一個很不錯的選擇;Hexo 的架構很簡單且易於維護,使用 markdown 語言來寫作,並透過指令產生靜態頁面,不需要 cgi 的支援,也不需額外的資料庫,不僅速度快,更重要的是不用擔心被人輕易的打下來 (想想 WordPress)。

目前選用的佈景主題是 NexT,這個佈景主題配色上以黑白為主,介面看起來相當的簡潔,適合像我一樣有潔癖的人 (?

未來會在這邊新增一些關於 FreeBSD/Linux 伺服器管理的相關的心得,以及一些書籍的閱讀心得。