我正在尝试设置一个 Bastion 并将其用作 SSH 代理来访问 AWS 中我的所有私有资源。
我很难调试为什么到具有双栈(IPv4 + IPv6)的特定主机(如 RDS/PostgreSQL 或 EKS)的 SSH 隧道无法立即连接,而是挂起。我尝试使用选项强制仅使用 IPv4 或 IPv6,-4
但-6
没有成功。详细日志没有显示任何有趣的内容。
SSH 隧道:
ssh -i ~/.ssh/digitalasset-sandbox -L 5432:<db_identifier>.<uid>.<aws_region>.rds.amazonaws.com:5432 <username>@<bastion_ip> -p <port>
PostgreSQL 交互式终端:
psql 'host=localhost port=5432 ...'
我看到的一个潜在问题是主机名具有包含 A 和 AAAA 条目的 DNS 记录:
$ nslookup <db_identifier>.<uid>.<aws_region>.rds.amazonaws.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: <db_identifier>.<uid>.<aws_region>.rds.amazonaws.com
Address: <ipv4>
Name: <db_identifier>.<uid>.<aws_region>.rds.amazonaws.com
Address: <ipv6>
$ nslookup <id>.<???>.<aws_region>.eks.amazonaws.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: <id>.<???>.<aws_region>.eks.amazonaws.com
Address: <ipv4>
Name: <id>.<???>.<aws_region>.eks.amazonaws.com
Address: <ipv4>
Name: <id>.<???>.<aws_region>.eks.amazonaws.com
Address: <ipv6>
Name: <id>.<???>.<aws_region>.eks.amazonaws.com
Address: <ipv6>
一种解决方法是在 DNS 解析中仅使用 IPv4,方法是手动添加以下条目/etc/hosts
:
<ipv4> <db_identifier>.<uid>.<aws_region>.rds.amazonaws.com
但这并不合适,它不适用于 IPv6,并且如果 DNS 记录发生变化,最终会中断。