pfSense 路由器似乎无法连接到互联网。我的调制解调器和 ISP 确认我已同步,但与此同时,pfSense 有时无法连接(使用点对点连接)。
我想尝试通过观察来调试这个问题点对点连接试图建立的连接,通常具有以下形式:
1. PADI
pfSense 向我的 ISP 广播 PPPoE 主动发现启动(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
2. 帕多
然后,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. 私人争议解决
然后,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
...并且它继续下去。
我想监控点对点连接会话创建。我想看看如果/当pfSense 正在广播PADI
启动数据包。我想看看如果我的 ISP不是回应PADO
。我想捕获广域网界面。
你们中那些聪明的人会意识到这个问题。我想在实际的电脑的 WAN 接口,而不是 PPPoE“WAN”接口,该接口尚未启动。尚未启动是因为 PPPoE 连接尚未启动。
我想要捕获线路上的数据包,而不是传出 PPPoE 虚拟连接的数据包。
是否可以使用 pfSense 捕获使用 PPPoE 作为互联网连接方式的 WAN 端口上的数据包?
答案1
是的,您必须通过 SSH 而不是 GUI 诊断>数据包捕获屏幕执行此操作,因为它将在 ng0 PPPoE 接口上捕获。只需在用于 PPPoE 连接的实际以太网接口上正常执行 tcpdump 即可。将其发送到文件并将其拉到带有 Wireshark 的机器上,以便于分析。类似于:
tcpdump -i em0 -s 0 -w /tmp/pppoe.pcap
将 em0 上的所有内容抓取到文件 /tmp/pppoe.pcap 中
答案2
为了扩展克里斯的回答,我实际使用的命令是:
>tcpdump -i xl0 -e 'not (pppoes and ip)'
在哪里
-i [interface]
指定我的 WAN 接口,对我来说xl0
-e
包括源和目标 MAC 地址,这样我就可以看到谁向谁发送了什么数据包
'not (pppoes and 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 - 一种通过以太网传输 PPP(PPPoE)的方法:
5.5 PPPoE 主动发现终止 (PADT) 数据包
此数据包可以在会话建立后的任何时间发送,以
指示 PPPoE 会话已终止。它可以由
主机或访问集中器发送。DESTINATION_ADDR
字段是单播以太网地址,CODE 字段设置为 0xa7,并且必须设置 SESSION_ID 以指示要终止哪个会话。不需要 TAG。收到 PADT 后,不允许使用该会话发送任何 PPP 流量 。在发送或接收 PADT 后,
甚至不得发送正常的 PPP 终止数据包。PPP 对等体应该使用 PPP 协议本身来关闭 PPPoE 会话,但当无法使用 PPP 时,可以使用 PADT。
我的下一个问题当然是
为什么 pfSense 会随机挂断?
答案是贝尔加拿大集中器内的 ATM 交换机出现故障。卡会随机重置,丢失我的 PPPoE 会话的任何记忆。
与此同时,我的路由器不知道其 PPPoE 会话不再有效,并继续尝试通过相同的会话ID。集中器无法识别该会话,因此忽略了来自我方的任何数据包。
pfSense 在检测到 10 秒无流量后,开始发送LCP 回应请求每隔 10 秒向远程网络发送一次响应。如果 40 秒内没有收到任何响应,pfSense 将关闭 PPPoE 会话并启动一个新会话:
PADI
集中器看到请求开始会话的广播,便做出响应;此后不久,新的 PPPoE 会话就建立了。
当前的 (有缺陷的)ATM交换机MAC:
00:90:1a:a0:a1:f4
Unisphere 解决方案(原为红石通讯)
新的 ATM 交换机 MAC:
将于 2010 年 8 月 6 日安装