我有两台机器:机器A和机器B。A机通过机器B的所有流量。在机器A上,我设置了这些iptable规则:
iptables -t nat -A PREROUTING -i wlan0 -j DNAT --to-destination 172.16.250.128
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
其中,tun0
是在其IP范围内包含ip地址172.16.250.128
的接口。现在,在机器A上接收的所有数据包都被路由到机器B,而不改变端口。
在机器B上,我在端口8080上设置了透明代理(mitmproxy、burpsuite等)和iptables规则:
iptables -t nat -A PREROUTING -i ens33 -p tcp -j REDIRECT --to-ports 8080
其中,ens33
(ip 172.16.250.128
)是连接到机器A上的接口tun0
的接口。上面的规则将所有tcp数据包从该接口重定向到端口8080 --透明代理侦听的端口。所有操作都很好,所有TCP数据包都是通过透明代理路由的。
但我不确定透明代理如何知道数据包的原始目的地(地址和端口)?我发现了一个问题:链接,它说iptables在修改目标之前保存了原始目的地。现在,我了解透明代理是如何知道原始端口的。但是目的地地址呢?由于目标地址是在机器A上修改的,我认为机器B和它的内部不应该知道原来的目的地地址,因为机器B没有修改它,对吗?但是,它仍然能够以某种方式获得发送到wlan0
接口的数据包的原始目的地地址,该接口被路由到透明代理。我之所以知道,是因为透明的代理显然正确地将数据包路由到原始目的地(Internet上的目的地)。
机器B如何知道DNATed (修改的目的地)数据包的原始目的地?原始目的地是否也通过网络发送?我在wireshark没有看到它。1:透明短袜代理如何知道要使用哪个目标IP?
发布于 2022-09-10 17:40:15
您很想知道“透明代理在服务器B上如何知道数据包的原始目的地”。它不能,因为您在服务器A上重写了源(MASQUERADE
)和目标(DNAT
)。就服务器B而言,流量起源于服务器A,为服务器B寻址。
当通信量回复被发送回服务器A时,它知道如何撤消DNAT/伪装,以便将它们发送到原始的真实源。
https://unix.stackexchange.com/questions/716832
复制相似问题