iptables 没有记录 WAN 流量?

iptables 没有记录 WAN 流量?

首先我要说明我的最终目标:当流量来自特定 IP 地址时,如果服务器未开启,则使用局域网唤醒将其开启。我使用的是 TP-Link Archer C7 v2 路由器,安装了 DD-WRT,版本号为 r30709。

  • WOL 有效
  • 记录端口上的 LAN 流量(通过 iptables 规则)
  • 从脚本中 ping 服务器,查看自定义日志条目解析后是否有效
  • 通过脚本发送 WOL 有效
  • 记录 WAN 流量不是工作(通过 iptables 规则)

现在,从我所看到的关于 DD-WRT 的情况来看,很多人在做类似的事情时似乎会创建 VLAN。我的路由器是基于 Atheros 的,DD-WRT 据说不支持 Atheros 路由器的 VLAN,尽管很多人似乎已经让它在这个路由器上运行起来(他们没有在网上发布说明)。

因此,我目前正在研究一种方法来在服务器插入其自己的 VLAN 的路由器上设置端口,但到目前为止还没有成功。

以下是我的两个 iptables 规则:

#this works
iptables -I FORWARD -i br0 -p tcp --dport 32400 -m state --state NEW -j LOG --log-prefix "PLEX LAN Connection "

# this does not work 
iptables -I FORWARD -i eth0 -p tcp --dport 32400 -m state --state NEW -j LOG --log-prefix "PLEX WAN Connection "

# this does not work either (dd-wrt.com says vlan2 is the WAN interface)
iptables -I FORWARD -i vlan2 -p tcp --dport 32400 -m state --state NEW -j LOG --log-prefix "PLEX WAN Connection "

这是仅使用 iptables 就能纠正的问题吗?因为我无法让 iptables 将该端口上的传入 WAN 连接记录到 /var/log/messages。我假设它没有写入日志,因为它不在自己的 VLAN 上。

更新 1

请注意,我尝试使用eth0而不是vlan2,但结果相同:日志中没有任何内容。我甚至-i <interface>在两个规则中都删除了所有内容,但 WAN 流量中没有任何内容。

root@DD-WRT:~# ip a
root@DD-WRT:~# ip ro
default via pu.bl.ic.1 dev eth0
pu.bl.ic.0/24 dev eth0  proto kernel  scope link  src pu.bl.ic.ip
127.0.0.0/8 dev lo  scope link
169.254.0.0/16 dev br0  proto kernel  scope link  src 169.254.255.1
192.168.1.0/24 dev br0  proto kernel  scope link  src 192.168.1.1

根据 DD-WRT 网站,vlan2应该代表 WAN 的逻辑接口。

更新 2

我注意到目标 IP 不正确。应该转到 192.168.1.2,但它转到了 192.168.0.10。这根本不是一个有效的 LAN:

Oct  4 20:47:35 DD-WRT kern.warn kernel: [114429.460000] PLEX LAN Connection IN=br0 OUT=eth0 MAC=XXXXXXXXXXXXXXXXXXX SRC=192.168.1.133 DST=192.168.0.10 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=45163 DF PROTO=TCP SPT=4644

尝试将此作为以下建议的唯一规则:

iptables -A FORWARD -p tcp --dport 32400 -m limit --limit 50/min -j LOG --log-prefix "CHECK INTERFACES"

日志中仍然没有任何内容;也停止记录 LAN 连接。

更新 3

root@DD-WRT:/tmp/var/log# iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 2742 packets, 395K bytes)
 pkts bytes target     prot opt in     out     source               destination
   13   764 DNAT       tcp  --  *      *       0.0.0.0/0            pu.bl.ic.ip       tcp dpt:14619 to:192.168.1.2:32400
    0     0 DNAT       icmp --  *      *       0.0.0.0/0            pu.bl.ic.ip       to:192.168.1.1
    4   232 DNAT       tcp  --  *      *       0.0.0.0/0            pu.bl.ic.ip       tcp dpt:22709 to:192.168.1.2:32400
  220 19942 TRIGGER    0    --  *      *       0.0.0.0/0            pu.bl.ic.ip       TRIGGER type:dnat match:0 relate:0

Chain INPUT (policy ACCEPT 30145 packets, 2802K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 253 packets, 21491 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 260 packets, 21863 bytes)
 pkts bytes target     prot opt in     out     source               destination
 1065 67674 SNAT       0    --  *      eth0    192.168.1.0/24       0.0.0.0/0           to:pu.bl.ic.ip
   10   624 MASQUERADE  0    --  *      *       0.0.0.0/0            0.0.0.0/0           mark match 0x80000000/0x80000000

答案1

我无法添加对超级用户的评论,所以这是一个答案。无论您从 LAN 还是 WAN 访问该服务,您都能确认该服务正常运行吗?

您是否使用 iptables 脚本,还是仅在 bash 中单独执行命令? 如果您没有 iptables 脚本,正如 Cyber​​nard 所说,您必须确保您的 LOG 行位于 ACCEPT 行之前。

一旦数据包被接受或丢弃,它就会离开链,因此永远不会匹配链中后面的日志规则。

例如,将 LOG 规则插入为 FORWARD 链中的第一个规则:

iptables -I FORWARD 1 -p tcp --dport 32400 -m limit --limit 50/min -j LOG --log-prefix "CHECK INTERFACES"

答案2

请注意,WAN 接口上的 IP 将是预产期因此即使数据包被转发,路由器也可能是目标。这是我要做的事情:

iptables -I INPUT -p any -i <wan interface> -j LOG --log-prefix "FIREWALL-WAN"
iptables -I FORWARD -p any -i <wan interface> -j LOG --log-prefix "FIREWALL-WAN"

具有 wan ip 的接口在哪里。通常我只是丢弃 wan 流量然后允许我想要的,所以事实上我不会这样做。

相关内容