如何从接口传入多个内容

如何从接口传入多个内容

我有 3 个接口(2 个 wan,1 个本地)并启用了转发,但只有一个传入接口(ppp0)可以到达本地目的地,以下是我的 iptable 命令:

iptables -t nat -A PREROUTING -i ppp0 -p tcp -m multiport --destination-ports 80,443 -j DNAT --to 10.66.66.253
iptables -t nat -A PREROUTING -i eth1 -p tcp -m multiport --destination-ports 80,443 -j DNAT --to 10.66.66.253


############

我怎样才能让 eth1 进入目的地?

这是我的 IP 规则和 rt_tables:

root@net:~# ip rule
0:  from all lookup local
32762:  from all fwmark 0x2 lookup int0.out
32763:  from all fwmark 0x1 lookup ext0.out
32764:  from all to 61.x.x.x lookup ext0.out
32765:  from 61.x.x.x lookup ext0.out
32766:  from all lookup main
32767:  from all lookup default

root@net:~# ip route show table int0.out
default via 168.x.x.254 dev ppp0
10.66.66.0/24 dev eth2 scope link src 10.66.66.254

root@net:~# ip route show table ext0.out
default via 61.x.x.254 dev eth1
10.66.66.0/24 dev eth2 scope link src 10.66.66.254

我错过了什么(明白吗)?

谢谢你的帮助!

答案1

您应该在防火墙规则集中使用 connmark 目标,使回复通过与接收原始数据包相同的接口。在当前配置中,即使数据包已在接口上接收eth1并进行了 DNAT,回复也会通过默认路由进行路由,因为尚未设置防火墙标记。

我明白了,您已经为防火墙标记的路由创建了附加规则。那么让我们使用它:

# set mark of the original redirected packets
iptables -t mangle -A PREROUTING -i eth1 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -i ppp0 -j MARK --set-mark 0x2

# save the firewall mark inside the conntrack entry (once for new connection)
iptables -t mangle -A POSTROUTING \
         -o eth2 -m conntrack --ctstate NEW \
    -j CONNMARK --save-mark

# for replies restore the firewall mark from conntrack entry
# to route replies through right interface
iptables -t mangle -A PREROUTING -i eth2 \
    -j CONNMARK --restore-mark

您可以使用附加匹配来改进这些规则。您甚至可以避免使用 CONNMARK 而仅使用-m conntrack --ctstate DNAT --ctdir REPLY --ctorigdst ...匹配。

还要检查 rp 过滤器并将其设置为loose模式sysctl

要解决问题,请检查规则计数器(iptables-save -c命令)、列出 conntrack 表(conntrack -L命令)并运行 tcpdump。

相关内容