当我试图理解在这种情况下的DNAT机制时,我感到困惑。
我的理解是:
DNAT =目标网络地址转换:将传入数据包的目标地址转换为目的地x的功能。
我在理解DNAT回复路径方面面临困难。
例如:我有一台IP为x1的机器(A),并希望进入这台机器(dest y1)的所有连接/数据包都被重路由到另一台具有IP地址为z1的机器(B)。
因此,我添加了一个新的NAT规则如下:
iptables -t nat -A PREROUTING -s x1 -d y1 -j DNAT --to-destination z1.在A机上的试验:ping -I x1 y1
如果我在机器A上运行tcpdump -i eth6 icmp,那么我会得到IP y1而不是z1的回复吗?或者是基于子网掩码来执行subnet?
当我监视tcpdump -i eth6 host z1时,没有任何传入的ping或数据包。有人能澄清这种情况和我的理解吗?
另外,如果包是本地翻译的,那么我们是否可以制作这个tcpdump?
发布于 2021-12-02 15:30:53
为了转发ping请求,您需要显式地指定ICMP协议,如下所示:
iptables -t nat -I PREROUTING -d <ip y1> -p icmp -j DNAT --to-destination <ip z1>然而,PREROUTING本身不会在机器上工作--为了使机器工作,机器A必须介于您和pinged机器B之间。
YOU(ip x1) <---internet---> (ip y1) Machine A(ip z0) <---NATed LAN---> (ip z1)Machine B这样就会很有魅力了。
下面是在机器A上使用IP地址y1 (10.0.0.1)和z0 (10.10.0.73)的方式,当我从机器(10.0.0.32)点击y1时。机器B具有IP地址10.10.0.1 (z1):
16:23:54.181828 IP 10.0.0.32 > 10.0.0.1: ICMP echo request, id 25492, seq 0, length 64
16:23:54.181860 IP 10.10.0.73 > 10.10.0.1: ICMP echo request, id 25492, seq 0, length 64
16:23:54.182788 IP 10.10.0.1 > 10.10.0.73: ICMP echo reply, id 25492, seq 0, length 64
16:23:54.182806 IP 10.0.0.1 > 10.0.0.32: ICMP echo reply, id 25492, seq 0, length 64发布于 2015-01-01 01:31:32
您的错误在于,您需要三个系统才能做到这一点:
A -----> B应改为
A -----> B -----> C在这种情况下,您将需要PREROUTING链在B上,因为包将从外部传递到系统。
但是,如果您在创建数据包的同一个系统上使用iptables,那么它们是本地生成的数据包,而这些数据包根本不通过PREROUTING。通过两种系统,您可以做到这一点:
A -----> B应改为
A -----> C(如果测试DNAT不需要答复,C就不存在了。)
在这种情况下,您需要这样一条规则:
iptables -t nat -A OUTPUT -d y1 -j DNAT --to-destination z1但是,如果您将目标地址更改为自己的地址,则数据包根本无法到达eth6。你需要tcpdump -i lo -n来看它。
https://unix.stackexchange.com/questions/176877
复制相似问题