我遇到一种情况,需要与只允许来自一个特定 IP 的连接的 API 进行通信。
因此 api.example.com 接受来自 whitelisted-ip 的端口 443 上的连接
我希望能够从任何地方连接到白名单 IP 端口 443,并让其将数据包转发到端口 443 上的 api.example.com,并将响应发送回连接的机器。
我认为有某种方法可以实现类似于透明鱿鱼代理的功能,但我无法弄清楚。
我尝试按照这里的例子(http://www.tldp.org/HOWTO/TransparentProxy-6.html) 使用下面的语句,但没有成功。
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j DNAT --to api.example.com:443
iptables -t nat -A POSTROUTING -o eth1 -d api.example.com -j SNAT --to whitelisted-ip
任何帮助,将不胜感激。
更新:
我也尝试了以下方法,但无济于事:
iptables -t nat -A PREROUTING -p tcp -d whitelisted-ip --dport 443 -j DNAT --to api.example.com:443
iptables -t nat -A POSTROUTING -p tcp -s api.example.com --sport 443 -j SNAT --to whitelisted-ip:443
谢谢
答案1
据我所知,您想从任何地方使用一个 IP(白名单 IP)访问服务器,但该 IP 不是您正在使用的客户端 IP。您无法做到这一点,因为您可能能够使用白名单 IP 访问服务器,但服务器无法响应,因为它不是您在网络中的 IP 地址
答案2
在 whitelisted-ip shell 上,你可以尝试使用网猫完成此类任务。
通过在 whitelisted-ip shell 上发出以下命令,您将绑定端口 4443 并将连接转发到 api.example.com:443。
nc -l -p 4443 -c "nc api.example.com 443"
因此您可以从任何其他端点连接到 whitelisted-ip:4443。
提醒:我不建议将其绑定到任何可公开访问的接口上而没有任何保护,您可以将端口绑定到环回接口并添加-s 127.0.0.1
参数。
答案3
我刚刚意识到这是另一个问题的重复:
我让它工作了:
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination api.example.com:443
iptables -t nat -A POSTROUTING -p tcp -d api.example.com --dport 443 -j SNAT --to-source whitelisted-ip
与 ip 转发 sysctl 一起:
echo 1 > /proc/sys/net/ipv4/ip_forward