我正在尝试设置 iptables 以镜像进入 eth2 的流量并发送到 10.1.4.4。我阅读了大量有关此内容的文档,但遇到了一些问题。
这是我正在尝试使用的命令:
[root@test]# iptables -t mangle -A PREROUTING -i eth2 -j TEE -gateway 10.1.4.4
iptables v1.4.7: multiple -j flags not allowed
我目前正在 CentOS 6.5 上测试此方法,并使用 iptables v1.4.7。您知道为什么它不起作用吗?
答案1
您有一个语法错误,您应该使用两个破折号作为网关选项,如下所示:
iptables -t mangle -A PREROUTING -i eth2 -j TEE --gateway 10.1.4.4
编辑:在 CentOS 6.x 上,iptables 用户空间未正确修补。TEE 是在 1.4.8 中添加的,而 CentOS 6 运行 1.4.7,我想您需要修补并重建 RPM。如果您愿意,我可以检查代码并提供解决方案。
编辑:问题有点复杂。我尝试反向移植各种版本的 iptables 以使其正常工作,但这不仅仅是 iptables 本身的问题。这也是内核问题。来自 EL7 的 CentOS 版本(1.4.21)和一些 Fedora 版本运行正常。因此,您可以执行以下操作:
# rpm -Uvh http://mirrors.nic.cz/fedora-archive/fedora/linux/releases/14/Everything/x86_64/os/Packages/iptables-1.4.9-1.fc14.x86_64.rpm
Retrieving http://mirrors.nic.cz/fedora-archive/fedora/linux/releases/14/Everything/x86_64/os/Packages/iptables-1.4.9-1.fc14.x86_64.rpm
warning: /var/tmp/rpm-tmp.NDCBn2: Header V3 RSA/SHA256 Signature, key ID 97a1071f: NOKEY
error: Failed dependencies:
libxtables.so.4()(64bit) is needed by (installed) iproute-2.6.32-32.el6_5.x86_64
现在,如果您想安装它,您需要添加 --force --nodeps,这将导致 iproute 因缺少依赖项而无法运行。然后您必须从原始 iptables rpm 中提取 libxtables.so.4 并将其手动保留在系统上以修复 iproute :)
完成所有这些后,您将收到以下错误:
# /sbin/iptables -t mangle -A PREROUTING -i eth2 -j TEE --gateway 10.1.4.4
iptables: No chain/target/match by that name.
这是一个内核问题 - 标准 CentOS/RHEL EL6 内核缺少模块 xt_TEE.ko:
# rpm -ql kernel | grep xt_TEE
您可以使用 ELrepo 内核解决这个问题:
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
# yum --enablerepo=elrepo-kernel install kernel-lt
# rpm -ql kernel-lt | grep xt_TEE
/lib/modules/3.10.69-1.el6.elrepo.x86_64/kernel/net/netfilter/xt_TEE.ko
要了解有关 kernel-lt(LongTerm)软件包的更多信息以及它们的局限性/优点,请访问:http://elrepo.org/tiki/kernel-lt。
如果您打算在生产中使用它,请尝试并彻底测试它,并尝试将其反向移植到 EL 标准内核和标准 iptables 1.4.7 中:)
这是可以做到的,但这是一个棘手的问题,我不确定你是否愿意去解决。这值得吗?