路由

路由

我想环回接口上所有收到的流量。这相当于线路/设施环回。继一个类似的问题,我这样做了:

iptables -t nat -A POSTROUTING --out-interface eth0 -j MASQUERADE
iptables -A FORWARD --in-interface eth0 -j ACCEPT

但发件人没有收到任何信息。数据包在传入接口上被丢弃。我的里面没有net.ipv4.ip_forward = 1线/etc/sysctl.conf

答案1

路由

决定内核数据包在哪里的主要方法是路由表(ip route和朋友),而不是防火墙规则(iptablesnftables)。一旦您使用 启用了 IP 转发net.ipv4.ip_forward = 1,内核将通过路由表处理传入的数据包并将它们发送回去。因此,如果您希望 10.0.0.2 的流量通过 eth0,无论其来自何处:

ip route add 10.0.0.2/32 dev eth0

现在,默认情况下,当内核看到流量进入 eth0 并立即返回时,它会发送 ICMP 重定向来告诉源计算机“嘿,这效率很低!直接发送!”您需要将其关闭(net.ipv4.conf.eth0.send_redirects = 0)。它还会检查源地址以确保它来自预期的位置;您可能还需要将其关闭 ( net.ipv4.conf.eth0.rp_filter = 0)。

由于这要经过内核路由机制,因此将完成诸如减少 IP TTL 之类的所需操作。但诸如源和目标 IP 地址之类的内容不会更改。

路由+NAT

如果您还需要更改源或目标 IP 地址,则可以在顶部添加 NAT。例如,如果您需要源 IP 地址为本机,您可以添加:

iptables -t nat -A POSTROUTING --out-interface eth0 -j MASQUERADE

请注意,除非您更改了默认值,否则 FORWARD 应该已经接受。如果没有,您可以添加规则(或者更改默认规则)。

网络地址转换+路由

您还可以在数据包进入时更改目标 IP 地址,这将更改其路由方式(因为此更改是在路由看到它之前完成的)。这看起来像:

iptables -t nat -A PREROUTING -s 10.0.0.1 -j DNAT --to-dest 10.0.0.2

请注意,您不能--out-interface在此处使用,因为只有在路由之后才知道输出接口。--in-interface不过你可以用。

现有工具

你还应该看看iperf3数据包生成器

相关内容