Linux 网关在 AT&T 上使用双重数据,我的 iptables 有错吗?

Linux 网关在 AT&T 上使用双重数据,我的 iptables 有错吗?

我使用 AT&T 的蜂窝互联网连接。每个人都连接到 Wi-Fi 接入点,我将 Raspberry Pi 连接到该接入点作为 DNS/DCHP/网关服务器。

在我的 Pi 上,我使用 dnsmasq 为每个设备(如果在列表中)分配一个静态 IP 地址。然后我使用 iptables 为每个设备设置规则(计算带宽,如果超出则限制)这是两个设备的示例。

Chain FORWARD (policy ACCEPT)
target     prot opt source             destination
usb-w      all  --  0.0.0.0/0          192.168.1.3
usb-w      all  --  192.168.1.3        0.0.0.0/0       MAC 00:11:22:33:44:55
tab        all  --  0.0.0.0/0          192.168.1.4
tab        all  --  192.168.1.4        0.0.0.0/0       MAC 66:77:88:99:AA:BB
Local      all  --  0.0.0.0/0          0.0.0.0/0

Chain Local (2 references)
target     prot opt source               destination
ACCEPT     all  --  192.168.1.0/24       192.168.1.0/24
REJECT     all  --  192.168.1.0/24       0.0.0.0       reject-with icmp-port-unreachable

Chain usb-w (2 references)
target     prot opt source               destination
Local      all  --  0.0.0.0/0            0.0.0.0/0

Chain tab (2 references)
target     prot opt source               destination
ACCEPT      all  --  0.0.0.0/0            0.0.0.0/

在 PHP 脚本中,我记录用户表的字节数并将其清零。如果设备超出了预设上限,则用户表将更改为本地表。它一直有效好的一阵子。

两个月前,我们开始讨论 AT&T 的上限很多。在故障排除阶段,我发现,例如,我记录了 10GB 的使用量,但 AT&T 和他们的互联网设备显示我用了 20GB。

与他们通完电话后(他们说是我),我进行了下载测试。我从 Debian 的站点下载了文件 debian-live-8.4.0-i386-cinnamon-desktop.iso,直接连接到 AT&T 设备,然后再次连接到 pi。我发现我的 Pi 使用了两倍的数据。

那么我该如何解决这个问题?超额收费很昂贵,这个月的账单超过了 600 美元。

答案1

在我看来,你的规则没有什么明显的错误。我本来想以评论的形式发布,但它太长了。

我会采用不同的方法来解决这个问题 - 尝试在连接到手机的 NIC 上使用 wireshark。

关闭所有使用网络的设备,然后从单个数据包开始发送/接收。我建议使用 Linux 上的 -s 标志对设置的有效负载进行 ping;我不记得 Windows 标志了。发送一个已知数据包,接收数据包,然后检查您的脚本和 wireshark 以查找差异。如果有任何差异,您将能够在 wireshark 中看到您是否正在传输 2x、接收 2x 或您的 php 脚本有问题。如果需要,将传输大小增加到更大但已知的值。如果需要,请从 ping 切换到 ftp 或 http,因为问题可能与协议有关。例如,ICMP 和 UDP 是无连接的,而 TCP 不是 - TCP 可以在协议级别请求重新传输,其他两个则不会(UDP 可以,但在应用程序级别)

除非手机本身在重新传输时出现问题,否则 Wireshark 应该会给出“正确”答案。您可能在手机上安装了数据测量工具,请在测试之前重置该工具,看看它是否开始与您的 wireshark 和 php 计数明显不同。

基本上,我建议您确认这是一个真正的问题,并在深入进行低级调试之前开始描述问题。实际上,这可能是 iptables 的问题,但我不会从那里开始。完成这些测试后,尝试在没有自定义 iptables 规则的情况下再次运行它们,并检查行为是否有变化。

如果您收集这些数据,那么答案很可能会自行出现,但如果没有,则会发布结果。

如果结果是手机问题,您可以进行环回测试(将某些内容传输到外部服务器并将其重定向回给您),但设置起来会有点麻烦。

相关内容