![如何转发端口以通过堡垒连接多个 MSK Kafka 代理?](https://linux22.com/image/781836/%E5%A6%82%E4%BD%95%E8%BD%AC%E5%8F%91%E7%AB%AF%E5%8F%A3%E4%BB%A5%E9%80%9A%E8%BF%87%E5%A0%A1%E5%9E%92%E8%BF%9E%E6%8E%A5%E5%A4%9A%E4%B8%AA%20MSK%20Kafka%20%E4%BB%A3%E7%90%86%EF%BC%9F.png)
我在 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