我尝试从 PC 3 远程登录到 PC 1,结果重定向到 PC 2
电脑1:192.168.0.1
电脑2:192.168.0.2
电脑3:192.168.0.3
我在 PC 1 中有这样的命令:
iptables -t nat -A PREROUTING -p tcp -d 192.168.0.1 --dport 23 -j DNAT --to-destination 192.168.0.2:23
iptables -t nat -A POSTROUTING -j MASQUARADE
如果我只执行命令 1,则 PC 2 显示(日志文件)telnet 是 PC 3(成功),但无法 telnet(无法 telnet),只能发送连接。但是当我结合命令 2 时,telnet 可以完成(telnet 成功),但在文件日志(在 PC 2 中)中显示 telnet 的 ip 是 PC 1,但实际上执行 telnet 的是 PC 3。
我该如何解决这个问题?
答案1
如果您配置了第一个命令,那么到达 PC1 的连接将被重定向到 PC2,而 PC2 会将该连接视为源自 PC3(因为 PC1 只更改了目标,而未更改源)。现在 PC2 响应连接 (SYN) 并向 PC3 发送回 SYN、ACK。但 PC3 将丢弃它(原因是 PC3 打开了到 192.168.0.1 的 telnet 连接,因此它期望从该 IP 获得响应,但由于连接被重定向,源 IP 将是 PC2 的 IP)
在第二种情况下,由于您已将源 IP 伪装为 PC1 的 IP,因此 PC2 将会把 PC1 视为所有连接的源。
你需要做的就是将PC2上发出的数据包的源IP地址改为PC2上的192.168.0.1。
(注意:不要在PC1上使用第二条命令,即MASQUERADE)
在 PC2 上进行配置
iptables -A POSTROUTING -t nat -p tcp --sport 23 -d 192.168.0.3 -j SNAT --to-source 192.168.0.1