pfSense:可以流量擷取實際的 WAN 埠嗎?
pfSense 路由器似乎無法連接到網際網路。我的調製解調器和我的 ISP 確認我有同步,但同時 pfSense 有時只是無法連接(使用PPPoE)。
我想通過觀察試圖建立的PPPoE連接來嘗試調試問題,這通常是以下形式:
- 米飯
pfSense 向我的 ISP 廣播 PPPoE Active Discovery Initiation (PADI) 數據包:
DESTINATION_ADDR: ff:ff:ff:ff:ff:ff ;broadcast mac address SOURCE_ADDR: 00:01:02:3d:71:85 ;pfSense WAN adapter mac address ETHER_TYPE: 8863 ;PPPoE Discovery stage PAYLOAD: 11090000 1 ;Version always 0x1 1 ;Type always 0x1 09 ;Code: 0x09 = PADI 0000 ;Session ID: 0x0000
- 帕多
然後 ISP 使用 PPPoE Active Discovery Offer (PADO) 數據包進行響應:
DESTINATION_ADDR: 00:01:02:3d:71:85 ;pfSense WAN adapter mac address SOURCE_ADDR: 00:90:1a:a0:a1:f4 ;ISP's PPPoE server mac address ETHER_TYPE: 8863 ;PPPoE Discovery stage PAYLOAD: 11070000 1 ;Version always 0x1 1 ;Type always 0x1 07 ;Code: 0x07 = PADO 0000 ;Session ID: 0x0000
- 標準
pfSense 然後請求通過向他們發送 PPPoE 主動發現請求 (PADR) 數據包來響應廣播的人開始 PPPoE 會話:
DESTINATION_ADDR: 00:90:1a:a0:a1:f4 ;ISP's PPPoE server mac address SOURCE_ADDR: 00:01:02:3d:71:85 ;pfSense WAN adapter mac address ETHER_TYPE: 8863 ;PPPoE Discovery stage PAYLOAD: 11190000 1 ;Version always 0x1 1 ;Type always 0x1 19 ;Code: 0x19 = PADR 0000 ;Session ID: 0x0000
4.墊
然後,我的 ISP 在 PPPoE 主動發現會話確認 (PADS) 數據包中使用會話 ID 進行響應:
DESTINATION_ADDR: 00:01:02:3d:71:85 ;pfSense WAN adapter mac address SOURCE_ADDR: 00:90:1a:a0:a1:f4 ;ISP's PPPoE server mac address ETHER_TYPE: 8863 ;PPPoE Discovery stage PAYLOAD: 11651234 1 ;Version always 0x1 1 ;Type always 0x1 65 ;Code: 0x65 = PADS 1234 ;Session ID: 0x1234
…然後繼續。
我想監控PPPoE會話的創建。我想看看pfSense是否/何時廣播
PADI
啟動數據包。我想看看我的 ISP是否沒有以PADO
. 我想在WAN介面上擷取數據包。你們這些敏銳的人會意識到這個問題。我想在電腦的實際WAN 介面上擷取數據包,而不是尚未啟動的 PPPoE“WAN”介面。它尚未啟動,因為 PPPoE 連接尚未啟動。
我想擷取網路上的數據包,而不是從 PPPoE 虛擬連接發出的數據包。
是否可以在 WAN 埠上擷取數據包,使用 PPPoE 作為連接網際網路的方法,使用 pfSense?
是的,您必須通過 SSH 而不是 GUI 診斷>數據包擷取螢幕來完成,因為它將在 ng0 PPPoE 介面上擷取。只需在用於 PPPoE 連接的實際乙太網介面上正常進行 tcpdump 即可。將其發送到文件並使用 Wireshark 將其拉到機器上,以便於分析。就像是:
tcpdump -i em0 -s 0 -w /tmp/pppoe.pcap
抓取 em0 上的所有內容到文件 /tmp/pppoe.pcap
為了擴展克里斯的回答,我使用的實際命令是:
>tcpdump -i xl0 -e 'not (pppoes and ip)'
在哪裡
-i [interface]
指定我的 WAN 介面,對我來說是
xl0
-e
包括源 MAC 地址和目標 MAC 地址,這樣我就可以看到誰在向誰發送什麼數據包
'not (pppoes and ip)'
是一個表達式,表示我想在 ession 數據包中排除 ip數據
PPPoE S
包。注意: tcpdump 具有僅監視 PPPoE“發現”數據包(PADI、PADO、PADR、PADS)的選項:
>tcpdump -i xl0 -e pppoed
這將只顯示PPPoE 發現數據包。我更喜歡其他語法,因為一旦建立了 PPPoE 會話,我就可以看到我的 ISP 的登錄名/密碼驗證,以及 IP/DNS/路由/MTU 資訊。
這讓我發現 pfSense 突然發送了一個PPPoE 主動發現終止(PADT) 數據包。這就是我的連結斷開的原因 - pfSense 隨機掛斷。
PADT 標記表示會話結束,並且不允許任何人在該會話上再發送數據包。來自RFC2516 - A Method for Transmitting PPP Over Ethernet (PPPoE):
5.5 PPPoE 主動發現終止 (PADT) 數據包
該數據包可以在會話建立後的任何時間發送,以
指示 PPPoE 會話已終止。它可以由
主機或訪問集中器發送。DESTINATION_ADDR
欄位是一個單播乙太網地址,CODE 欄位設置為 0xa7,SESSION_ID 必須設置為指示要終止哪個會話。不需要任何標籤。
當接收到 PADT 時,不允許
使用該會話發送進一步的 PPP 流量。即使是正常的 PPP 終止數據包也不能
在發送或接收 PADT 之後發送。PPP 對等體應該使用
PPP 協議本身來關閉 PPPoE 會話,但是當 PPP 不能使用時,可以使用 PADT。
我的下一個問題當然是
為什麼 pfSense 會隨機掛斷?
答案是 Bell Canada 集中器內的 ATM 交換機出現故障。卡會隨機重置,失去我的 PPPoE 會話的任何記憶。
同時,我的路由器不知道它的 PPPoE 會話不再有效,並繼續嘗試通過相同的SessionID進行通信。集中器無法辨識該會話,忽略來自我的任何數據包。
pfSense 在檢測到 10 秒沒有流量後,開始以 10 秒的間隔向遠端網路發送**LCP Echo-Requests 。**在沒有收到任何響應的 40 秒後,pfSense 關閉 PPPoE 會話並開始一個新會話:
PADI
集中器看到請求開始會話的廣播,作出響應;不久之後,新的 PPPoE 會話建立。
目前(故障)ATM交換機MAC:
00:90:1a:a0:a1:f4
Unisphere Solutions(原:紅石通信)新的 ATM 交換機 MAC:
2010 年 8 月 6 日安裝