数据包未进入 FORWARD 链

数据包未进入 FORWARD 链

首先,这不是日常路由问题。设置相当复杂,所以我先说一下。

我有一个路由器,简单来说,有 3 个接口。eth0、eth1、eth2。eth2 用于 pppoe。eth0 和 eth1 有客户端。

好的,到目前为止一切都很好,所有基础...现在出现了一个棘手的事情:我在 eth0 和 eth1 之上创建了一堆 macvlan 接口,名称模式是:

g1eth0 : g1 for gate1, eth0 indicates on what physical interface its laying on

我提供的每个上行链路都获得此信息,假设有 3 个,1 个 pppoe 和 2 个 VPN。然后将它们合并到以门命名的桥中。

到目前为止我们得到了这些接口:

<iface>:<description>
eth0   : our 1st subnet is here
eth1   : our 2nd subnet is here
eth2   : our pppoe is hooked here
ppp0   : our pppoe uplink
tap0   : our vpn1 uplink
tap1   : our vpn2 uplink
g1eth0 : advertised gate over uplink1 on clients in eth0
g1eth1 : advertised gate over uplink1 on clients in eth1
g2eth0 : advertised gate over uplink2 on clients in eth0
g3eth1 : advertised gate over uplink3 on clients in eth1
gate1  : bridge containing g1eth0 and g1eth1
gate2  : bridge containing g2eth0
gate3  : bridge containing g3eth1

正如我所说的,一堆接口......请注意,上行链路可以通过多个物理接口进行宣传,这就是我们获得网桥的原因。

好的,现在让我们看一下路由规则:

32763:  from all fwmark 0x3 lookup 202
32764:  from all fwmark 0x2 lookup 201
32765:  from all fwmark 0x1 lookup 200

好吧,这并不是那么引人注目,显然,它只检查 pkg 有什么 FWMARK 并将其推送到相应的表中。

路由表:

200: default via 1.2.3.4 dev ppp0 src 4.3.2.1

201: default via 5.6.7.8 dev tap0 src 8.7.6.5

202: default via 9.10.11.12 dev tap1 src 12.11.10.9

好的,IP 只是为了填补空白,你应该熟悉语法;)

现在我们有了路由表、路由规则和接口 - 但我们缺少 pkg 标记,因此这是在 iptables 中完成的:

iptables -t mangle -A PREROUTING -i gate1 -s 10.0.0.0/16 -j MARK --set-xmark 0x1/0xffffffff
iptables -t mangle -A PREROUTING -i gate2 -s 10.0.0.0/16 -j MARK --set-xmark 0x2/0xffffffff
iptables -t mangle -A PREROUTING -i gate3 -s 10.0.0.0/16 -j MARK --set-xmark 0x3/0xffffffff

好的,为了解释清楚,我们用适合路由规则的正确值标记进入网桥的所有包。

现在我还必须对arp_announce和进行一些调整arp_ignore,以便为 -interfaces 宣传正确的 MAC g*eth*。这篇文章已经很满了,所以我将跳过描述它,两者都设置为2

filter:FORWARD链目前是空的,它仅记录所获取的包。

现在正在进行 NAT: iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -j MASQUERADE

iptables 的所有默认策略都是ACCEPT

tcpdump显示传入的数据包根据g*eth*接口定向到正确的 MAC。

mangle:PREROUTING规则的计数器按应有的方式增加。

ip_forward已证实1

filter:FORWARD计数器未增加。

LOG在每个链中都获得了规则,但是一旦通过,pkg 似乎就会消失mangle:PREROUTING

知道原因吗?

附加项 I:我TRACE按照评论的建议在 PREROUTING 中放置了一条规则,但讽刺的是,它没有显示我的客户端正在运行的任何 ping。

附加部分 II:在尝试了规则、跟踪、promisc 等之后,我发现数据进入了 ,ethX但没有进入gateX。似乎 brigde 接口只是丢弃了它,难怪内核无法将其转发。

为什么我的桥接接口会这样?

bridge name     bridge id               STP enabled     interfaces
gate1           8000.dead000200b5       no              g1eth0
                                                        g1eth1

答案1

它可能由于反向路径过滤而被阻止。

尝试将其关闭: http://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.kernel.rpf.html

相关内容