![在将端口从一台主机转发到另一台主机时维护源 IP,但有一个小问题](https://linux22.com/image/1576963/%E5%9C%A8%E5%B0%86%E7%AB%AF%E5%8F%A3%E4%BB%8E%E4%B8%80%E5%8F%B0%E4%B8%BB%E6%9C%BA%E8%BD%AC%E5%8F%91%E5%88%B0%E5%8F%A6%E4%B8%80%E5%8F%B0%E4%B8%BB%E6%9C%BA%E6%97%B6%E7%BB%B4%E6%8A%A4%E6%BA%90%20IP%EF%BC%8C%E4%BD%86%E6%9C%89%E4%B8%80%E4%B8%AA%E5%B0%8F%E9%97%AE%E9%A2%98.png)
我正在使用这种隧道方法:
https://superuser.com/a/1357450/972858
将端口 N 从 xxxx 转发到 yyyy 一切正常,目的地 yyyy 能够看到实际的源 IP 地址。但有一个小问题。xxxx:N 可以从任何地方访问,但不能从 yyyy 本身访问。我不知道为什么,但我无法从 yyyy 远程登录 xxxx:N
请帮忙。
答案1
这不起作用的原因与同一 LAN 内的端口转发通常不起作用的原因完全相同。换句话说,这是一种发夹式 NAT 情况。(想象一下隧道就像是一个本地 LAN 网络。)
隧道本身可能运行正常——数据包到达 X,经过 NAT,然后返回 Y。但是,由于 Y 认为原始发送者是当地的,响应不会经过 X,因此 X 无法撤消 NAT。结果,响应中的地址与原始数据包中的地址不匹配,并且 Y(作为原始发起者)无法为其刚收到的响应找到匹配的连接。
尝试-t nat -I PREROUTING -d x.x.x.x --dport N -j REDIRECT
向 iptables 添加一条规则来处理这种情况 —— 它应该捕获传出的数据包而根本不需要涉及 X。