我在 AWS 上有一个 MSK Kafka 集群,其中有 3 个代理:b1.amazonaws.com:9092、b2.amazonaws.com:9092、b3.amazonaws.com:9092。代理不是公开的,所以我通过堡垒打开了 3 个隧道:
ssh -L 9092:b1.amazonaws.com:9092 -L 9093:b2.amazonaws.com:9092 -L 9094:b3.amazonaws.com:9092
但是我无法设置我的 Kafka 客户端来连接到 localhost:9092、localhost:9093、localhost:9094 - 我必须保留原始设置。
我在 /etc/host 中定义
127.0.0.1 b1.amazonaws.com
127.0.0.2 b2.amazonaws.com
127.0.0.3 b3.amazonaws.com
但我仍然有问题,本地端口是 9092、9093 和 9094,但远程端口是 3x9092
我尝试了很多变体,iptable
例如
iptables -A OUTPUT -t nat -d 127.0.0.2 -p tcp --dport 9092 -j REDIRECT --to-port 9093
但它不起作用。应用程序仅连接到端口 9092 上的隧道,无法到达端口 9093 和 9094。
如何解决这个问题?
答案1
我漏掉了一件重要的事情:我的应用程序在 Windows 上运行,隧道在 WLS2 上打开。Iptables 仅在 WSL2 内映射端口。我在 Windows 上启用了端口映射(powershell/admin)
和 Kafka 连接工作正常
netsh interface portproxy add v4tov4 listenaddress=127.0.0.2 listenport=9092 connectaddress=127.0.0.1 connectport=9093
netsh interface portproxy add v4tov4 listenaddress=127.0.0.3 listenport=9092 connectaddress=127.0.0.1 connectport=9094