pfSense:可能通过stream量捕获实际的WAN端口?

pfSense路由器似乎有连接到互联网的问题。 我的调制解调器,和我的ISP,确认我有同步,但同时pfSense有时只是不会连接(使用PPPoE )。

我想通过观察PPPoE连接尝试进行debugging来尝试debugging问题,这通常是以下forms:

1. PADI

pfSense将PPPoE Active Discovery Initiation(PADI)数据包广播到我的ISP:

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 

2. PADO

ISP然后用PPPoE主动发现提供(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 

3. PADR

然后,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. PADS

然后,我的ISP在PPPoE Active Discovery会话确认(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会话的创build。 我想看看是否/何时 pfSense广播PADI启动数据包。 我想看看我的ISP 是否没有响应PADO 。 我想捕获WAN接口上的数据包。

那些锋利的人会意识到这个问题。 我想捕获在计算机的实际广域网接口上的数据包,而不是PPPoE“WAN”接口,它还没有结束。 它还没有起来,因为PPPoE连接还没有结束。

我想捕捉有线数据包,而不是数据包走出PPPoE虚拟连接。

是否有可能用PPPoE作为连接到互联网的方法来捕获WAN端口上的数据包,使用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)' 

是一个expression式 ,说我想排除一个PPPoE S协议包内的IP数据包。

注意: tcpdump有监视PPPoE“发现”数据包(PADI,PADO,PADR,PADS)的选项:

 >tcpdump -i xl0 -e pppoed 

这将显示PPPoE发现数据包。 我更喜欢其他语法,因为一旦PPPoE会话build立,我就可以看到我的ISP的login/密码authentication,以及IP / DNS /路由/ MTU信息。


这使我发现pfSense正在发送一个PPPoE主动发现终止 (PADT)数据包。 这就是为什么我的链接正在下降 – pfSense随机挂起。

PADT标签指示会话结束,并且没有人允许在该会话上发送更多的分组。 从RFC2516 – 以太网PPP传输方法(PPPoE) :

5.5 PPPoE主动发现终止(PADT)数据包

这个数据包可以在会话build立之后随时发送
表示PPPoE会话已经终止。 它可能被发送
主机或接入集中器。 DESTINATION_ADDR
字段是单播以太网地址,CODE字段设置为0xa7,SESSION_ID务必设置为指示哪个会话将被终止。 没有TAG是必需的。

收到PADT时,不允许发送更多的PPPstream量
使用该会话。 即使正常的PPP终止数据包也不能
发送或接收PADT后发送。 一个PPP对等方应该使用
PPP协议本身会导致一个PPPoE会话,但是当PPP不能使用时可以使用PADT。

当然,我的下一个问题是

为什么pfSense随机挂起?


答案是加拿大贝尔集中器内的ATM交换机发生故障。 卡会随机重置,丢失我的PPPoE会话的任何内存。

同时,我的路由器不知道它的PPPoE会话不再有效,并继续尝试通过相同的SessionID进行通信。 集中器不识别会话,忽略来自我的任何数据包。

pfSense在感知到10秒没有stream量后,开始以10秒为间隔向远程networking发送LCP回声请求 。 在没有得到任何回应的40秒后,pfSenseclosuresPPPoE会话,并启动一个新的会话:

 PADI 

看到广播请求开始会话的集中器响应; 此后不久,新的PPPoE会话就build立起来了。

当前( 故障 )ATM交换机MAC:

00:90:1a:a0:a1:f4 Unisphere Solutions (获得红石通讯)

新的ATM交换机MAC:

将于2010年8月6日安装