我有一台有 3 个 ip 的服务器,我们称它们为 A、B 和 C。
我需要通过 ip A 端口 5000 连接到该服务器,并通过 ip B 代理我的流量。
并且,当使用 IP A 端口 5001 时,我的流量将通过 C 进行代理。
是否可以只使用 iptables 或者我需要像鱿鱼这样的东西?
我尝试过一些 nat 规则但没有成功。
谢谢!
答案1
我认为这是一个好问题。您可以通过多种方式实现这一目标。但我现在只提供一种解决方案。您可以使用 SSH 隧道,然后让您的应用程序使用 SOCKS 代理。
假设您的流量是 HTTP。从您的客户端计算机(本例中为笔记本电脑)创建两个 SSH 隧道,其本地侦听端口为5001和5002分别。一条隧道即将贯通服务器-B另一个将突破服务器-C到互联网。流程是这样的:
(笔记本电脑)--->服务器-A---->服务器-B----->互联网
(笔记本电脑)--->服务器-A---->服务器-C----->互联网
从互联网的角度来看,您的流量将来自服务器-B如果应用程序正在使用端口5001作为 SOCKS 代理,以及服务器-C如果应用程序正在使用端口5002作为 SOCKS 代理,同时服务器-A保持透明。
在您的笔记本电脑上,执行以下两个命令来创建两个 SSH 隧道,分别绑定到localhost:5001
和localhost:5002
ssh -f -N -D 5001 -oProxyCommand="ssh -W %h:%p user@server-A" user@server-B
ssh -f -N -D 5002 -oProxyCommand="ssh -W %h:%p user@server-A" user@server-C
在您的笔记本电脑上,将您的应用程序(例如 Firefox 浏览器)指向127.0.0.1:5001
或127.0.0.1:5002
相应地使用 SOCKS 代理
参考:OpenSSH 维基