📜  iptables,无法启用 SKIP DNAT 规则 (1)

📅  最后修改于: 2023-12-03 15:31:26.672000             🧑  作者: Mango

无法启用 SKIP DNAT 规则

当使用iptables配置规则时,有时需要跳过某些规则的DNAT操作。这个过程被称为“SKIP DNAT”。它的目的是在特定情况下允许经过网关的包绕过DNAT操作。

然而,有时在使用iptables跳过DNAT规则时会遇到问题。下面列出了一些原因:

  1. 支持 SKIP DNAT 的内核模块未加载

使用iptables跳过DNAT规则需要一个名为"ipt_REDIRECT"的内核模块。如果该模块未加载,则无法使用SKIP DNAT规则。

可以通过以下命令查看是否加载了该模块:

lsmod | grep ipt_REDIRECT

如果未找到该模块,则可以使用以下命令加载它:

modprobe ipt_REDIRECT

如果该模块已加载,则可能会遇到其他问题。

  1. 跳过 NAT 链时没有-j选项

当使用iptables跳过DNAT规则时,需要指定跳过哪个链。如果没有指定-j选项,则iptables将尝试跳过目标链,而不是要跳过的源链。这可能会导致iptables无法跳过DNAT规则。

例如,以下命令将跳过PREROUTING链中的DNAT规则:

iptables -t nat -A PREROUTING -d 192.168.1.1 -j DNAT --to-destination 10.0.0.1
iptables -t nat -A PREROUTING -d 192.168.1.1 -j SKIPDNAT
  1. 使用了错误的目标链

如果要跳过的链不存在,则iptables无法跳过DNAT规则。例如,以下命令将失败,因为OUTPUT链不存在:

iptables -t nat -A OUTPUT -d 192.168.1.1 -j SKIPDNAT

要跳过的链必须存在,并且它必须是目标DNAT规则所在的链。如果要跳过PREROUTING链中的DNAT规则,则必须使用SKIPDNAT规则。

综上所述,要启用SKIP DNAT规则,请检查内核模块是否加载,使用-j选项指定要跳过的链以及确保使用正确的目标链。

参考链接:https://serverfault.com/questions/541348/iptables-cannot-enable-skip-dnat-rule