无法从Lambda连接到EC2实例问题排查求助
排查Lambda连接EC2内网IP出现
ECONNREFUSED的问题 以下是针对你场景的具体排查方向:
检查SSH隧道的监听地址
确认EC2上的SSH隧道本地监听端口是绑定到0.0.0.0(允许所有IP访问)还是127.0.0.1(仅本地访问)。执行命令netstat -tulpn | grep <隧道转发的本地端口>,如果结果里的监听地址是127.0.0.1,Lambda作为同VPC的外部节点无法访问,需要修改SSH隧道命令,加上-g参数(允许远程主机连接本地转发端口),或者在建立隧道时指定绑定地址为0.0.0.0,比如:ssh -L 0.0.0.0:<本地端口>:<数据库地址>:<数据库端口> <SSH用户>@<数据库主机>验证EC2安全组入站规则
虽然你已开放所有入站,但需确认规则是否覆盖Lambda的访问来源:- 入站规则的源需设置为Lambda所在安全组ID,或者当前VPC的CIDR段(如
10.0.0.0/16) - 确保规则开放的是SSH隧道的本地端口(不是22端口),协议为TCP
- 入站规则的源需设置为Lambda所在安全组ID,或者当前VPC的CIDR段(如
检查EC2本地防火墙
EC2实例可能自带iptables、ufw等本地防火墙,禁止了目标端口的入站流量。执行iptables -L -n查看规则,若存在拒绝该端口的规则,需添加允许策略;也可临时关闭防火墙测试(sudo systemctl stop iptables或sudo ufw disable),若测试能连接,再针对性调整防火墙规则。确认Lambda网络配置
- 检查Lambda是否确实关联了目标VPC及正确的子网(需是能访问EC2内网IP的子网,若为私有子网,需确保路由表包含VPC内网路由,默认配置通常已包含)
- 确认Lambda的安全组出站规则允许访问EC2的目标端口(你已开放所有出站,这一步可快速验证)
测试端口可达性
在Lambda中添加简单的端口连通性测试代码,比如Node.js环境:const net = require('net'); const client = new net.Socket(); client.connect(<隧道端口>, '<EC2内网IP>', () => { console.log('端口连通成功'); client.destroy(); }); client.on('error', (err) => { console.log('端口连通失败:', err.message); });通过日志确认是端口不可达还是其他问题。
检查SSH隧道状态
确认EC2上的SSH隧道进程未异常终止,执行ps aux | grep ssh查看进程是否存在;同时可在建立隧道时添加-o ServerAliveInterval=60 -o ServerAliveCountMax=3参数,防止隧道因超时断开。
内容的提问来源于stack exchange,提问作者jkode
相关产品推荐
相关产品推荐

