Skip to content

Commit 91645b6

Browse files
sir-sigurdclaude
andcommitted
Reframe IPv6-egress docs: explain the real fast/slow mechanism
The previous wording implied IPv6 "falls back to IPv4" cleanly. Correct it: with transit_gateway_ipv6_egress off there is no IPv6 default route, so an IPv6 connection attempt fails immediately (ENETUNREACH) and the client uses IPv4 with no delay. The slow case is the opposite — enabling it against a TGW that does not carry IPv6 points ::/0 at a black hole, and clients without Happy Eyeballs (e.g. Python requests/urllib3) stall on the connection timeout. So the warning belongs on enabling it, not on the (safe) default-off path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 8ac2910 commit 91645b6

3 files changed

Lines changed: 9 additions & 5 deletions

File tree

README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -812,9 +812,13 @@ accordingly if more than one Quilt stack shares a TGW (the default is
812812
`10.0.0.0/16`).
813813

814814
**IPv6** egress through the TGW is opt-in (`transit_gateway_ipv6_egress`,
815-
default `false`). Enable it only if your TGW actually carries IPv6 egress;
816-
otherwise leave it off — IPv6 then has no default route and falls back to IPv4,
817-
rather than being black-holed at a TGW that can't route it.
815+
default `false`). The VPC is dual-stack, so set this `true` **only if your TGW
816+
actually carries IPv6 egress**: pointing `::/0` at a TGW that can't route IPv6
817+
black-holes those packets, and clients without Happy Eyeballs (e.g. Python's
818+
`requests`/`urllib3`) then stall on the connection timeout before falling back
819+
to IPv4. Left `false`, the new VPC has no IPv6 default route, so an IPv6
820+
attempt fails immediately (`ENETUNREACH`) and the client uses IPv4 with no
821+
delay.
818822

819823
**Reversibility:** removing `enable_transit_gateway` (or setting it `false`)
820824
restores the NAT gateways and IPv6 egress-only IGW. Toggling it on or off for an

modules/quilt/variables.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ variable "transit_gateway_id" {
4848
variable "transit_gateway_ipv6_egress" {
4949
type = bool
5050
default = false
51-
description = "When enable_transit_gateway is true, also route the private subnets' IPv6 default route (::/0) through the Transit Gateway. Leave false unless the Transit Gateway is configured for IPv6 egress; otherwise IPv6 traffic would be black-holed (with no route, IPv4 still falls back cleanly). No effect when enable_transit_gateway is false."
51+
description = "When enable_transit_gateway is true, also route IPv6 (::/0) egress through the Transit Gateway. Set true only if the Transit Gateway carries IPv6 egress: pointing ::/0 at a TGW that can't route IPv6 black-holes the traffic and stalls clients without Happy Eyeballs (e.g. Python requests/urllib3) on the connection timeout. Left false (default), the VPC has no IPv6 default route, so IPv6 attempts fail immediately and clients use IPv4 with no delay. No effect when enable_transit_gateway is false."
5252
}
5353

5454
variable "db_snapshot_identifier" {

modules/vpc/variables.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ variable "transit_gateway_id" {
4242
variable "transit_gateway_ipv6_egress" {
4343
type = bool
4444
default = false
45-
description = "When enable_transit_gateway is true, also route the private subnets' IPv6 default route (::/0) through the Transit Gateway. Leave false unless the Transit Gateway is configured for IPv6 egress; otherwise IPv6 traffic would be black-holed (with no route, IPv4 still falls back cleanly). No effect when enable_transit_gateway is false."
45+
description = "When enable_transit_gateway is true, also route IPv6 (::/0) egress through the Transit Gateway. Set true only if the Transit Gateway carries IPv6 egress: pointing ::/0 at a TGW that can't route IPv6 black-holes the traffic and stalls clients without Happy Eyeballs (e.g. Python requests/urllib3) on the connection timeout. Left false (default), the VPC has no IPv6 default route, so IPv6 attempts fail immediately and clients use IPv4 with no delay. No effect when enable_transit_gateway is false."
4646
}
4747

4848
variable "existing_vpc_id" {

0 commit comments

Comments
 (0)