漂J
@floatj
覺得
Sat, Feb 22, 2020 4:04 AM
昨天跟大神顧問學了一招不錯的解法
漂J
@floatj
說
Sat, Feb 22, 2020 4:07 AM
情境是這樣,某客戶使用某種公有雲的認證服務 (該認證服務的封包走 UDP)
然後這個服務時不時就連不上,導致認證失敗,但不知道是中間路由的問題,還是那個服務真的不穩定。
漂J
@floatj
說
Sat, Feb 22, 2020 4:09 AM
但是因為這個認證服務有鎖連入 IP,只能走客戶的 WAN IP 過去連,所以也無法從蔽社的 DC(機房)直接丟 UDP 封包測試這個服務
漂J
@floatj
說
Sat, Feb 22, 2020 4:11 AM
本來我想到的方法是,從 AP Controller 使用 Proxy 的認證測試功能,走客戶的 WAN IP 到那個公有雲的認證服務測試。然後再用 API 去呼叫 AP Controller 的這個功能,可是問了一些人都說 AP Controller 沒有這個功能,實際上也測不出來。
漂J
@floatj
說
Sat, Feb 22, 2020 4:13 AM
加上客戶端也沒有放多餘的機器可以跑測試的程式,只有放網路設備,所以也沒辦法將測試用的 Node.js 程式 丟到客戶端的機器定時測試。
(其實有 cli 的指令可以測,但我不知道哪個參數弄錯了還是怎樣,變成只有 Node.js 跑的程式產生 UDP 封包會有回應
)
漂J
@floatj
說
Sat, Feb 22, 2020 4:15 AM
後來用的笨方法是,用某種 VPN 服務從 DC 的監控容器連 VPN 到客戶端,然後那個監控容器去跑 Node.js 的測試程式,走客戶的 WAN IP 出去測那個公有雲的認證服務。
這個方法雖然可行,不過 VPN 的穩定性卻是一個問題。
漂J
@floatj
說
Sat, Feb 22, 2020 4:16 AM
然後昨天顧問剛好在辦公室,資深的同事建議我提出來跟顧問討論,然後我們幾個人就在討論這件事情,顧問就提出了可以用 NAT 解決這個問題的做法。
漂J
@floatj
說
Sat, Feb 22, 2020 4:19 AM
顧問的解法是:用 NAT 修改封包的 Src, Dst
把原本 DC 端 → 客戶端網路設備的 UDP 封包
修改為 客戶端 →某公有雲認證服務的 UDP 封包
l• ܫ•) Davyキュルッ
@david50407
Sat, Feb 22, 2020 5:46 AM
那就順便 mtr 看看是哪裡壞掉了吧
漂J
@floatj
說
Sat, Feb 22, 2020 5:49 AM
l• ܫ•) Davyキュルッ
: 有啊公司某老闆希望順便把 mtr 做起來,但前幾個節點都沒回應 ICMP 的話好像也無法...
l• ܫ•) Davyキュルッ
@david50407
Sat, Feb 22, 2020 5:51 AM
無法什麼
漂J
@floatj
說
Sat, Feb 22, 2020 5:57 AM
l• ܫ•) Davyキュルッ
: 他不回應 ICMP 的話妳根本無法知道他那個節點的死活吧
漂J
@floatj
說
Sat, Feb 22, 2020 5:57 AM
漂J
@floatj
說
Sat, Feb 22, 2020 5:58 AM
Sat, Feb 22, 2020 6:02 AM
像這樣中間節點死活根本無從得知
l• ܫ•) Davyキュルッ
@david50407
Sat, Feb 22, 2020 6:02 AM
但你可以先確定是不是有回的那幾個的問題啊
漂J
@floatj
說
Sat, Feb 22, 2020 6:02 AM
l• ܫ•) Davyキュルッ
:
仔細看了一下發現他前一個節點有回
不過節點隔太遠就沒有意義了吧
l• ܫ•) Davyキュルッ
@david50407
Sat, Feb 22, 2020 6:03 AM
然後試試看 mtr -u ?
漂J
@floatj
說
Sat, Feb 22, 2020 6:07 AM
l• ܫ•) Davyキュルッ
: 對欸 怎麼沒想到用 UDP
漂J
@floatj
說
Sat, Feb 22, 2020 6:07 AM
不過我不懂,UDP 可以單方向打過去然後做 Echo ...?
漂J
@floatj
說
Sat, Feb 22, 2020 6:16 AM
看來該認真研讀網路了
l• ܫ•) Davyキュルッ
@david50407
Sat, Feb 22, 2020 6:25 AM
用謎之技巧啊
UDP Service 只能開在 < 30000 port 的地方
所以打一個 > 30000 的 udp 必定會被回 unreachable
漂J
@floatj
說
Sat, Feb 22, 2020 6:30 AM
可是這樣你怎麼知道是真的 unreachable 還是那台機器回應的 unreachable
l• ܫ•) Davyキュルッ
@david50407
Sat, Feb 22, 2020 6:46 AM
北七哦 udp 被回的訊息是走 ICMP 看得出來好ㄇ 你的網路概論呢
漂J
@floatj
說
Sat, Feb 22, 2020 6:47 AM
l• ܫ•) Davyキュルッ
: 我的網路概論 6X 分過的吧
載入新的回覆
然後這個服務時不時就連不上,導致認證失敗,但不知道是中間路由的問題,還是那個服務真的不穩定。
(其實有 cli 的指令可以測,但我不知道哪個參數弄錯了還是怎樣,變成只有 Node.js 跑的程式產生 UDP 封包會有回應 )
這個方法雖然可行,不過 VPN 的穩定性卻是一個問題。
把原本 DC 端 → 客戶端網路設備的 UDP 封包
修改為 客戶端 →某公有雲認證服務的 UDP 封包
不過節點隔太遠就沒有意義了吧
UDP Service 只能開在 < 30000 port 的地方
所以打一個 > 30000 的 udp 必定會被回 unreachable