SSH 隧道访问 AWS 中的双栈资源(IPv4 + IPv6)

SSH 隧道访问 AWS 中的双栈资源(IPv4 + IPv6)

我正在尝试设置一个 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 记录发生变化,最终会中断。

相关内容