@@ -53,6 +53,11 @@ variable "short_env_id" {
53
53
type = string
54
54
}
55
55
56
+ variable "dualstack" {
57
+ type = bool
58
+ default = false
59
+ }
60
+
56
61
variable "vpc_cidr" {
57
62
type = string
58
63
default = " 10.0.0.0/16"
@@ -95,6 +100,7 @@ resource "aws_security_group_rule" "nat_to_internet_rule" {
95
100
to_port = 0
96
101
protocol = " -1"
97
102
cidr_blocks = [" 0.0.0.0/0" ]
103
+ ipv6_cidr_blocks = var. dualstack ? [" ::/0" ] : null
98
104
}
99
105
100
106
resource "aws_security_group_rule" "nat_icmp_rule" {
@@ -105,6 +111,7 @@ resource "aws_security_group_rule" "nat_icmp_rule" {
105
111
from_port = - 1
106
112
to_port = - 1
107
113
cidr_blocks = [" 0.0.0.0/0" ]
114
+ ipv6_cidr_blocks = var. dualstack ? [" ::/0" ] : null
108
115
}
109
116
110
117
resource "aws_security_group_rule" "nat_tcp_rule" {
@@ -189,6 +196,7 @@ resource "aws_security_group_rule" "internal_security_group_rule_icmp" {
189
196
from_port = - 1
190
197
to_port = - 1
191
198
cidr_blocks = [" 0.0.0.0/0" ]
199
+ ipv6_cidr_blocks = var. dualstack ? [" ::/0" ] : null
192
200
}
193
201
194
202
resource "aws_security_group_rule" "internal_security_group_rule_allow_internet" {
@@ -198,6 +206,7 @@ resource "aws_security_group_rule" "internal_security_group_rule_allow_internet"
198
206
from_port = 0
199
207
to_port = 0
200
208
cidr_blocks = [" 0.0.0.0/0" ]
209
+ ipv6_cidr_blocks = var. dualstack ? [" ::/0" ] : null
201
210
}
202
211
203
212
resource "aws_security_group_rule" "internal_security_group_rule_ssh" {
@@ -293,6 +302,7 @@ resource "aws_security_group_rule" "bosh_security_group_rule_allow_internet" {
293
302
from_port = 0
294
303
to_port = 0
295
304
cidr_blocks = [" 0.0.0.0/0" ]
305
+ ipv6_cidr_blocks = var. dualstack ? [" ::/0" ] : null
296
306
}
297
307
298
308
resource "aws_security_group" "jumpbox" {
@@ -316,6 +326,7 @@ resource "aws_security_group_rule" "jumpbox_ssh" {
316
326
from_port = 22
317
327
to_port = 22
318
328
cidr_blocks = [" ${ var . bosh_inbound_cidr } " ]
329
+ ipv6_cidr_blocks = var. dualstack ? [" ::/0" ] : null
319
330
}
320
331
321
332
resource "aws_security_group_rule" "jumpbox_rdp" {
@@ -325,6 +336,7 @@ resource "aws_security_group_rule" "jumpbox_rdp" {
325
336
from_port = 3389
326
337
to_port = 3389
327
338
cidr_blocks = [" ${ var . bosh_inbound_cidr } " ]
339
+ ipv6_cidr_blocks = var. dualstack ? [" ::/0" ] : null
328
340
}
329
341
330
342
resource "aws_security_group_rule" "jumpbox_agent" {
@@ -334,6 +346,7 @@ resource "aws_security_group_rule" "jumpbox_agent" {
334
346
from_port = 6868
335
347
to_port = 6868
336
348
cidr_blocks = [" ${ var . bosh_inbound_cidr } " ]
349
+ ipv6_cidr_blocks = var. dualstack ? [" ::/0" ] : null
337
350
}
338
351
339
352
resource "aws_security_group_rule" "jumpbox_director" {
@@ -343,6 +356,7 @@ resource "aws_security_group_rule" "jumpbox_director" {
343
356
from_port = 25555
344
357
to_port = 25555
345
358
cidr_blocks = [" ${ var . bosh_inbound_cidr } " ]
359
+ ipv6_cidr_blocks = var. dualstack ? [" ::/0" ] : null
346
360
}
347
361
348
362
resource "aws_security_group_rule" "jumpbox_egress" {
@@ -352,6 +366,7 @@ resource "aws_security_group_rule" "jumpbox_egress" {
352
366
from_port = 0
353
367
to_port = 0
354
368
cidr_blocks = [" 0.0.0.0/0" ]
369
+ ipv6_cidr_blocks = var. dualstack ? [" ::/0" ] : null
355
370
}
356
371
357
372
resource "aws_security_group_rule" "bosh_internal_security_rule_tcp" {
@@ -375,6 +390,10 @@ resource "aws_security_group_rule" "bosh_internal_security_rule_udp" {
375
390
resource "aws_subnet" "bosh_subnet" {
376
391
vpc_id = " ${ local . vpc_id } "
377
392
cidr_block = " ${ cidrsubnet (var. vpc_cidr , 8 , 0 )} "
393
+ ipv6_cidr_block = var. dualstack ? " ${ cidrsubnet (aws_vpc. vpc [0 ]. ipv6_cidr_block , 8 , 0 )} " : null
394
+
395
+ assign_ipv6_address_on_creation = var. dualstack
396
+ enable_dns64 = var. dualstack
378
397
379
398
tags = {
380
399
Name = " ${ var . env_id } -bosh-subnet"
@@ -391,6 +410,13 @@ resource "aws_route" "bosh_route_table" {
391
410
route_table_id = " ${ aws_route_table . bosh_route_table . id } "
392
411
}
393
412
413
+ resource "aws_route" "bosh_route_table_ipv6" {
414
+ count = var. dualstack ? 1 : 0
415
+ route_table_id = " ${ aws_route_table . bosh_route_table . id } "
416
+ destination_ipv6_cidr_block = " ::/0"
417
+ egress_only_gateway_id = aws_egress_only_internet_gateway. egress_ipv6 [0 ]. id
418
+ }
419
+
394
420
resource "aws_route_table_association" "route_bosh_subnets" {
395
421
subnet_id = " ${ aws_subnet . bosh_subnet . id } "
396
422
route_table_id = " ${ aws_route_table . bosh_route_table . id } "
@@ -401,6 +427,10 @@ resource "aws_subnet" "internal_subnets" {
401
427
vpc_id = " ${ local . vpc_id } "
402
428
cidr_block = " ${ cidrsubnet (var. vpc_cidr , 4 , count. index + 1 )} "
403
429
availability_zone = " ${ element (var. availability_zones , count. index )} "
430
+ ipv6_cidr_block = var. dualstack ? " ${ cidrsubnet (aws_vpc. vpc [0 ]. ipv6_cidr_block , 8 , count. index + 1 )} " : null
431
+
432
+ assign_ipv6_address_on_creation = var. dualstack
433
+ enable_dns64 = var. dualstack
404
434
405
435
tags = {
406
436
Name = " ${ var . env_id } -internal-subnet${ count . index } "
@@ -420,6 +450,13 @@ resource "aws_route_table" "nated_route_table" {
420
450
}
421
451
}
422
452
453
+ resource "aws_route" "internal_subnets_route_table_ipv6" {
454
+ count = var. dualstack ? 1 : 0
455
+ route_table_id = " ${ aws_route_table . nated_route_table . id } "
456
+ destination_ipv6_cidr_block = " ::/0"
457
+ egress_only_gateway_id = aws_egress_only_internet_gateway. egress_ipv6 [0 ]. id
458
+ }
459
+
423
460
resource "aws_route_table_association" "route_internal_subnets" {
424
461
count = " ${ length (var. availability_zones )} "
425
462
subnet_id = " ${ element (aws_subnet. internal_subnets . * . id , count. index )} "
@@ -428,6 +465,19 @@ resource "aws_route_table_association" "route_internal_subnets" {
428
465
429
466
resource "aws_internet_gateway" "ig" {
430
467
vpc_id = " ${ local . vpc_id } "
468
+
469
+ tags = {
470
+ Name = " ${ var . env_id } "
471
+ }
472
+ }
473
+
474
+ resource "aws_egress_only_internet_gateway" "egress_ipv6" {
475
+ count = var. dualstack ? 1 : 0
476
+ vpc_id = " ${ local . vpc_id } "
477
+
478
+ tags = {
479
+ Name = " ${ var . env_id } "
480
+ }
431
481
}
432
482
433
483
locals {
0 commit comments