两个应用程序之间的透明代理

两个应用程序之间的透明代理

我有以下设置:

应用 A- 对某些 API 发出 HTTP 请求,运行于http://本地主机:8090

应用 B- 拦截来自 A 的 HTTP 请求,A 是运行在http://本地主机:8080

是否可以强制 HTTP 流量从一个应用程序传输到在同一主机上运行的另一个应用程序?

我一直在尝试类似的事情:

iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080

但似乎只有当 HTTP 请求的目标是一些外部 API 时它才有效,如果 API 资源服务器也部署在本地主机上,它就不起作用(我怀疑这是由于--dport 80)。我对 iptables 了解不多,但这样的事情真的可能吗?如果可以,我该如何实现?

答案1

iptables 规则可以工作,但是你必须激活路由在机器上,这才能在本地传送的数据包上工作。还要注意,在较新的机器上,“localhost”通常解析为 IPv6 环回 (::1),因此您需要相应的 ip6tables 规则。IPv6 上的初始连接失败可能会被屏蔽,并在测试客户端中自动回退到 IPv4 后再次困扰您(例如,如果您未在命令行上指定 -6,则 curl 会执行此操作)

如果数据包来自外部,则需要在PREROUTING链中设置相同的规则。

# Activate forwarding
# Note: These forward settings are not reboot persistent
# Note: Putting your machine in router mode resets a lot of IP stack parameters
sysctl -w net.ipv6.conf.all.forwarding=1
sysctl -w net.ipv4.ip_forward=1

相关内容