iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
DevOps

為你自己架 Server系列 第 7

D7 各種網路工具

  • 分享至 

  • xImage
  •  

在架服務的過程中,我們不可避免的一定會遇到一些問題。很多問題可能只需要看看 log 就可以解決,但也有些問題看了 log 之後還是毫無頭緒。
在這種情況下,有一些工具也許派得上用場,這篇文章會介紹一些自己常用的網路相關小工具,在 debug 的時候會更方便。

pingnctracert

自己平常的第一步都是先使用 ping (或是 nctracert,用來看網路本身是不是好的),沒成功再去看 log,最後再去用其他工具看。
有很多時候問題根本就不是服務死掉了,而是中間的路根本就不通,所以封包到不了。
這幾個工具很簡單,通常也不太會找到什麼問題,畢竟網路就是 infra 在那邊,你沒有去動他他也算是穩定。但如果真的遇到這種狀況,等你看 log 看半天,結果最後發現根本是封包到不了,那真的很嘔。

lsof

這個指令本身的功能是看檔案被哪個 process 占用。但我們知道,在 Linux 的世界裡萬物都是檔案,所以我們也可以用它來看網路的使用情況。
我最常使用的 case 是拿來看 port 被誰佔用了,例如說今天我想要用 nginx listen 8080 port,但發現他已經被佔用了。這時候你可以使用 lsof 來看是誰佔用了 8080 port:

$ sudo lsof -i :8080

當然他還有一些其他的用法,但我自己不常用,例如:

  • sudo lsof -i
    • 可以看全部的網路流量
  • sudo lsof -i tcp -s TCP:LISTEN
    • 可以看現在在 listen 的 process 和他在 listen 的 port。
  • sudo lsof -i tcp -s TCP:ESTABLISHED
    • 可以看現在連線已經建立的 process 和 port,例如 VPN

tcpdump

我覺得這是最好用的工具之一,他可以直接攔截封包,讓你看到每個封包的內容,可以直接理解成 CLI 版的 wireshark。
但也因為他可以看到每個封包的內容,使用上應該要注意隱私的問題,而且一個一個封包看其實有點累,不到最後我基本上不會用。
建議使用的時候要想清楚自己要攔截什麼,然後把運算式下清楚一點,不然會截到一堆莫名其妙的東西,妨礙自己判斷。

以下是幾個我自己常用的寫法以及參數:

  • tcpdump -i [interface]
    • 監聽指定的 interface 所有的流量
  • sudo tcpdump -i [interface] icmp
    • 監聽指定的 interface 的 ICMP 流量
  • tcpdump tcp port 80
    • 監聽 HTTP 的流量
  • tcpdump tcp port 22 and src net 10.1.1.0/24
    • 監聽從 10.1.1.0/24 網段來的 ssh 流量

上述幾個指令可以讓管理者看到流量到底有沒有進出,但如果現在問題是出在封包內容的話,可以考慮多加一些參數:

  • -v / -vvv
    • 不會有封包內容,但會有更多的封包資訊,建議就順手開起來
  • -X
    • 顯示出 hex & ASCII 的封包內容,非常好用
  • -A
    • 顯示出封包的 ASCII 內容
    • 平常不太會用到,但如果是看網頁流量很好用
  • -w
    • 可以把擷取的封包內容存在檔案裏面,之後再分析
    • 例如封包真的很多,用 CLI 看起來很痛苦,我會把它存起來然後用 wireshark 開起來慢慢看

結語

使用這些小工具可以節省大量的時間,幫助我們更快速地找到並解決問題,確保服務的穩定運作。希望本文介紹的工具能對你的網路 debug 有所幫助。

Ref.


上一篇
D6 Ansible
下一篇
D8 憑證 - Certbot & Let's Encrypt
系列文
為你自己架 Server8
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言