通过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集群:
如图,已经连接成功。