sysctl -w net.ipv4.conf.eth0.log_martians=1

sysctl -w net.ipv4.conf.eth0.log_martians=1

我正在尝试使用 iptables 将 eth0 上的传入数据包重定向到在环回接口上侦听的服务。基于此链接我正在尝试制定以下规则:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT -o lo --to-port 80

但我收到以下显示的错误:

Can't use -o with PREROUTING

手册页解释了为什么这不起作用:

   (REDIRECT) redirects the packet to the machine itself by changing the
   destination IP  to  the  primary  address  of  the  incoming  interface

我如何接收传入的数据包并将其传送至环回接口?

答案1

你为什么要添加-o lo?这没有必要,也不起作用,甚至不在你链接的教程中。只需将其删除即可。

答案2

您使用 iptables 的解决方案应该可行,但不幸的是,Linux 内核不允许这样做,因为内核代码将每个目标地址为 127/8 的传入数据包视为“火星人”,并且不会接受它。

你可以通过以下方式看到这一点:

sysctl -w net.ipv4.conf.eth0.log_martians=1

允许其流量到 127/8 子网使用路由本地网络

# sysctl -w net.ipv4.conf.eth0.route_localnet=1

或者

$ echo 1 | sudo tee proc/sys/net/ipv4/conf/eth0/route_localnet

并检查设置。

$ cat /proc/sys/net/ipv4/conf/eth0/route_localnet

设置 /proc/sys/net/ipv4/conf/eth0/route_localnet 后,dnat 为 127.0.0.1 将起作用。

答案3

使用模型演示iptables 及其伪装功能,尝试重定向到 127.0.0.1 这是您的环回,对吗?

相关内容