漂J
昨天跟大神顧問學了一招不錯的解法
漂J
情境是這樣,某客戶使用某種公有雲的認證服務 (該認證服務的封包走 UDP)
然後這個服務時不時就連不上,導致認證失敗,但不知道是中間路由的問題,還是那個服務真的不穩定。
漂J
但是因為這個認證服務有鎖連入 IP,只能走客戶的 WAN IP 過去連,所以也無法從蔽社的 DC(機房)直接丟 UDP 封包測試這個服務
漂J
本來我想到的方法是,從 AP Controller 使用 Proxy 的認證測試功能,走客戶的 WAN IP 到那個公有雲的認證服務測試。然後再用 API 去呼叫 AP Controller 的這個功能,可是問了一些人都說 AP Controller 沒有這個功能,實際上也測不出來。
漂J
加上客戶端也沒有放多餘的機器可以跑測試的程式,只有放網路設備,所以也沒辦法將測試用的 Node.js 程式 丟到客戶端的機器定時測試。

(其實有 cli 的指令可以測,但我不知道哪個參數弄錯了還是怎樣,變成只有 Node.js 跑的程式產生 UDP 封包會有回應 )
漂J
後來用的笨方法是,用某種 VPN 服務從 DC 的監控容器連 VPN 到客戶端,然後那個監控容器去跑 Node.js 的測試程式,走客戶的 WAN IP 出去測那個公有雲的認證服務。
這個方法雖然可行,不過 VPN 的穩定性卻是一個問題。
漂J
然後昨天顧問剛好在辦公室,資深的同事建議我提出來跟顧問討論,然後我們幾個人就在討論這件事情,顧問就提出了可以用 NAT 解決這個問題的做法。
漂J
顧問的解法是:用 NAT 修改封包的 Src, Dst
把原本 DC 端 → 客戶端網路設備的 UDP 封包
修改為 客戶端 →某公有雲認證服務的 UDP 封包
l• ܫ•) Davyキュルッ
那就順便 mtr 看看是哪裡壞掉了吧
漂J
l• ܫ•) Davyキュルッ : 有啊公司某老闆希望順便把 mtr 做起來,但前幾個節點都沒回應 ICMP 的話好像也無法...
l• ܫ•) Davyキュルッ
無法什麼
漂J
l• ܫ•) Davyキュルッ : 他不回應 ICMP 的話妳根本無法知道他那個節點的死活吧
漂J
https://images.plurk.com/1pDVYeNsvCjGipEvONcp7M.png
漂J
像這樣中間節點死活根本無從得知
l• ܫ•) Davyキュルッ
但你可以先確定是不是有回的那幾個的問題啊
漂J
l• ܫ•) Davyキュルッ : 仔細看了一下發現他前一個節點有回
不過節點隔太遠就沒有意義了吧
l• ܫ•) Davyキュルッ
然後試試看 mtr -u ?
漂J
l• ܫ•) Davyキュルッ : 對欸 怎麼沒想到用 UDP
漂J
不過我不懂,UDP 可以單方向打過去然後做 Echo ...?
漂J
看來該認真研讀網路了
l• ܫ•) Davyキュルッ
用謎之技巧啊
UDP Service 只能開在 < 30000 port 的地方
所以打一個 > 30000 的 udp 必定會被回 unreachable
漂J
可是這樣你怎麼知道是真的 unreachable 還是那台機器回應的 unreachable
l• ܫ•) Davyキュルッ
北七哦 udp 被回的訊息是走 ICMP 看得出來好ㄇ 你的網路概論呢
漂J
l• ܫ•) Davyキュルッ : 我的網路概論 6X 分過的吧
載入新的回覆