问题描述
客户想通过外网地址访问 VPC 内的 Kafka 地址进行程序调试,本文展示如果使用iptables转发请求实现外网访问。
解决方案
1.创建一台与 Kafka 同 VPC 的 ECS 服务器,放开安全组 9093 端口同时绑定公网 IP,具体操作参考 [ECS使用说明]。
2.在部署 Kafka 的机器添加本地解析和修改配置文件如下:
- 添加域名解析
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.254 opendts
- 修改server.properties的配置文件
listener.security.protocol.map=INTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT
listeners=INTERNAL://192.168.1.254:9093
# 配置刚才的域名opendts
advertised.listeners=INTERNAL://opendts:9093
inter.broker.listener.name=INTERNAL
3.在 ECS 配置 iptables 转发规则,持久化需要将 iptables 规则写入到 /etc/rc.local 中。
(base) [root@rudonx ~] iptables -t nat -A PREROUTING -p tcp -m tcp --dport 9093 -j DNAT --to-destination 192.168.1.254:9093
(base) [root@rudonx ~] iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 9093 -j SNAT --to-source 192.168.1.13
(base) [root@rudonx ~] echo 1 > /proc/sys/net/ipv4/ip_forward
地址参数说明:
--192.168.1.254 --- 指定的是 Kafka 服务所在 ECS 的机器地址
--192.168.1.13 --- 指定的是配置 iptables 的 ECS 的本机的地址
3.本地测试访问,使用ECS的公网IP地址
- 本地/etc/hosts文件配置域名解析
180.184.70.* opendts
参数地址说明:
--180.184.70.* --- 指定的是配置 iptables 的 ECS 的外网 EIP 地址。
- 使用脚本生产数据示例如下:
注 此方案只能作为测试和调试方案,因为IP地址在一些特殊情况下会改变,所以不建议作生产使用
如果您有其他问题,欢迎您联系火山引擎技术支持服务