我放置了一个充当路由器的 Raspberry Pi,放在我的 DSL 调制解调器和我的内部 Netgear 无线路由器之间。我的想法是,我可以使用 iptables 来记录进出我的 LAN 的连接。它似乎对互联网上的地址很有效,但客户端地址显示为位于我的 Raspberry Pi 路由器和 LAN 上的客户端之间的 Netgear 路由器。以下显示了从我的 LAN 上的客户端到 www.cnn.com 的网络和连接。没有办法查看传入流量的真实源 IP 地址,还是您总是只看到运行 iptables 的路由器的最后一跳?
LAN 客户端
10.0.100.17
Netgear 路由器
eth0 10.0.100.1 (LAN)
eth1 10.0.200.1 (WAN)
Raspberry Pi 路由器
eth0 10.0.200.10 (LAN)
eth1 192.168.0.3 (WAN)
DSL 网关
eth0 192.168.0.1 (LAN)
eth1 13.10.1.39 (WAN)
www.cnn.com
151.101.189.67
我正在使用以下 iptables 规则:
-A PREROUTING -m limit --limit 3/min -j LOG --log-prefix "PreRouting: "
-A POSTROUTING -m limit --limit 3/min -j LOG --log-prefix "PostRouting: "
-A POSTROUTING -o eth1 -j MASQUERADE
-A INPUT -m limit --limit 3/min -j LOG --log-prefix "Input: "
-A FORWARD -m limit --limit 3/min -j LOG --log-prefix "Forward: "
-A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j ACCEPT
-A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "Output: "
在上面的例子中,我永远不会看到 LAN 上客户端的 IP 地址。相反,我只会看到客户端和 raspberry pi 之间的路由器地址 (10.0.200.1),永远不会看到 www.cnn.com 的 IP 地址 (151.101.1.67)。
答案1
路由器使用网络地址转换 (NAT) 将其客户端的 IP 地址映射到其自身的 IP 地址(即,将 10.0.100.17 映射到 10.0.100.1)。Raspberry Pi 无法访问此信息,因此所有流量似乎都来自路由器。在此配置中无法查看客户端的 IP 地址,请参阅这个问题了解更多信息。
但是,如果 Raspberry Pi 和路由器位于同一子网中,Pi 将能够看到 LAN 客户端的 IP 地址。为此,您可以在 Raspberry Pi 上安装 DHCP 服务器(例如 dnsmasq),并将路由器设置为“桥接”模式(禁用 NAT 和 DHCP)。以下是一个在 Linux 上设置 dnsmasq 的很好的教程。
答案2
Linux 上有一个类似于 netstat 的工具,叫做 netstat-nat,应该可以帮你解决这个问题。安装方法(在 Raspberry Pi 上):
apt-get 安装 netstat-nat
读取活动的 NAT 连接:
netstat-nat
我不知道如何将它与某种日志系统集成,也许有一个每隔几分钟激活一次并将该命令的输出写入文件的脚本?
遗憾的是,在您的配置中,它不起作用。您必须交换 Netgear 路由器和 Raspberry Pi 路由器的位置才能使其工作。NAT 专门修改任何传入数据包的源 IP 地址,使 NAT 路由器看起来好像它们来自它。除非您可以使用数据包中的另一个字段(可能是用户代理?)来识别客户端