通过windows ip转发连接redis集群,随时都可以删库跑路
背景
假设redis集群部署地址如下,从本地pc只能访问公网地址,内网地址不通。
公网地址 | 内网地址 | 端口 |
---|---|---|
114.252.41.111 | 192.168.0.184 | 8001 |
114.252.41.111 | 192.168.0.184 | 8002 |
114.252.41.135 | 192.168.0.182 | 8001 |
114.252.41.135 | 192.168.0.182 | 8002 |
114.252.41.241 | 192.168.0.59 | 8001 |
114.252.41.241 | 192.168.0.59 | 8002 |
而由于redis集群的机制,通过hash算法得出slot和节点后,会直接通过节点的内网地址进行重定向,内网地址不通导致我没法从pc直接连接集群。给我删除跑路造成了很大的不便。于是我决定解决这个问题。
总体方案
- 把所有内网地址都添加到本地,此时本机具有多个内网ip;
- 利用windows ip转发,把内网tcp地址上的请求,转发到公网地址。
实施过程
添加内网地址
- 更改网络适配器设置 -> TCP/IPv4
- 使用静态ip地址,然后选择“高级”
- 添加更多ip地址
- 使用ipconfig查看
添加ip转发规则
以管理员身份运行:
netsh interface portproxy add v4tov4 listenaddress=192.168.0.184 listenport=8001 connectaddress=114.252.41.111 connectport=8001
netsh interface portproxy add v4tov4 listenaddress=192.168.0.184 listenport=8002 connectaddress=114.252.41.111 connectport=8002
netsh interface portproxy add v4tov4 listenaddress=192.168.0.182 listenport=8001 connectaddress=114.252.41.135 connectport=8001
netsh interface portproxy add v4tov4 listenaddress=192.168.0.182 listenport=8002 connectaddress=114.252.41.135 connectport=8002
netsh interface portproxy add v4tov4 listenaddress=192.168.0.59 listenport=8001 connectaddress=114.252.41.241 connectport=8001
netsh interface portproxy add v4tov4 listenaddress=192.168.0.59 listenport=8002 connectaddress=114.252.41.241 connectport=8002
查看:
netsh interface portproxy show all
输出如下:
侦听 ipv4: 连接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
192.168.0.184 8001 114.252.41.111 8001
192.168.0.59 8001 114.252.41.241 8001
192.168.0.59 8002 114.252.41.241 8002
192.168.0.184 8002 114.252.41.111 8002
192.168.0.182 8001 114.252.41.135 8001
192.168.0.182 8002 114.252.41.135 8002
验证
以任意redis客户端(如redis-cli
, RedisInsight
, Another Redis Desktop Manager
)连接redis集群:
如图,已经连接成功。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了