如何通过Tailscale子网路由器将BI平台连接至数据库并配置公网IP白名单?
解决Tailscale配置公网IP白名单访问子网数据库的问题
问题核心
你当前的配置错误在于:Tailscale的host:标识仅用于指代Tailnet内部节点(自定义hosts里也只能填Tailscale分配的内网IP或节点名),不能直接映射公网IP。把公网IP放到hosts里再用host:xxx作为ACL的src,Tailscale无法识别这些外部IP,导致白名单不生效。
正确配置步骤
1. 移除无效的hosts配置
删掉hosts里的公网IP条目,因为这些不属于Tailnet内部节点:
{ "hosts": {} }
2. 修改ACL,直接允许目标公网IP访问子网
在ACL的src数组里直接添加公网IP的CIDR格式(单个IP用/32后缀),不需要通过hosts中转:
{ "action": "accept", "src": [ "group:engineering", "group:analysis", "52.203.193.180/32", "52.0.63.147/32", "18.209.80.4/32", "13.42.173.220/32" ], "dst": ["X.X.X.0/20:*"] }
3. 确保子网路由器的公网可达性
- 如果子网路由器本身有公网IP:确认服务器防火墙(比如iptables、ufw)允许上述公网IP访问数据库对应的端口(如MySQL的3306、PostgreSQL的5432)。
- 如果子网路由器在NAT网关后:在网关设备上配置端口转发,将数据库端口映射到子网路由器的内网IP对应端口,同时网关防火墙允许目标公网IP访问该转发端口。
4. 验证配置
- 推送更新后的ACL到Tailnet:在Tailscale管理后台保存ACL配置,等待节点同步。
- 从BI平台所在的公网IP发起连接测试,访问子网路由器公网IP(或网关转发后的IP)的数据库端口,确认是否能正常连接。
额外注意事项
- 若BI平台的公网IP是动态的,可将其所在的公网CIDR段添加到ACL的
src中(比如52.203.0.0/16),但需确保该CIDR范围足够精准,避免安全风险。 - 确认子网路由器已正确宣告目标子网
X.X.X.0/20,可通过tailscale status命令查看子网宣告状态。
内容的提问来源于stack exchange,提问作者Doug Niccum
相关产品推荐
相关产品推荐

