我的问题可能有点奇怪,但首先介绍一下背景:
我有一个客户端,其设备在自己的网络中具有不同的 IP(大部分是192.168.x.x
)。从外部,我使用 SSH 隧道连接到其中一台机器,并且可以将连接的端口转发到我的 IP,但单个隧道/端口仅适用于指定的 IP,而我正在开发的应用程序必须接受不同的 IP 列表才能使用,如果它们都是 127.0.0.1,即使端口不同也不会起作用(我可以将端口 8000-8005 映射到192.168.0.1
,将 8006-8010 映射到192.168.0.2
,依此类推),因为它不起作用。
所以,我想知道是否有办法在我的本地计算机上创建一个“子网”,比如,10.0.0.x
发往 的数据包10.0.0.2:80
将通过我的 SSH 隧道到达127.0.0.1:8000
,10.0.0.3:80
将到达127.0.0.1:8010
,等等?这就像通过 SSH 隧道在我自己的环境中镜像客户端网络的 IP……就像某种 VPN。(我们讨论过 VPN,但在另一端设置起来很复杂,所以我只能使用 SSH 隧道)。
非常感谢您的任何想法!
注意:这个问题已经在 SuperUser 上被问过了,但我在这里搜索了一下,我觉得这个堆栈更合适,因为我见过这里的人对网络更有经验。我还在寻找类似数据包转发的东西,但 IP 在我的网络中不存在,但我可以模拟(10.0.0.x),例如:
10.0.0.1:80 --> 127.0.0.1:8000
10.0.0.2:80 --> 127.0.0.1:8001
10.0.0.3:80 --> 127.0.0.1:8010
等等...
答案1
好吧,经过长时间的研究和 Michael Hampton 的一些指点,我使用 IPTables 找到了解决方案,我通过这里找到了它:
因此我将来自不存在的虚假 IP 的数据包转发到我自己的计算机的命令是:
iptables -t nat -A OUTPUT -m tcp -p tcp -d 10.0.0.1 --dport 80 -j DNAT --to-destination 127.0.0.1:8000
我不确定所有的参数是什么以及它们究竟如何工作,但这将会重定向10.0.0.1:80 -> 127.0.0.1:8000
。
谢谢!