Маякни мне! (4 части серии)
Обзор
Благодаря AWS сайт на месте VPN Вы можете установить безопасное подключение к небезопасной инфраструктуре (например, общедоступный Интернет) между VPC и вашим локальным центром обработки данных. С таким соединением на месте вы можете общаться с вашими экземплярами EC2, как если бы они были в вашей существующей корпоративной сети.
Это намного дешевле и быстрее устанавливать этот вариант, а не AWS Direct Connect , хотя он менее надежен с точки зрения производительности и имеет нижнюю крышку для пропускной способности. Нередко иметь как на месте, с сайтом AWS на месте VPN является опцией резервной копии.
Кроме того, если у вас есть несколько центров обработки данных, каждый с VPN-соединением сайта AWS к сайту к центральному виртуальному личному шлюзу (это логическая конструкция, на которой подключение VPN закрывается), вы можете обеспечить безопасную связь между теми в концентраторе -Есковая модель, используя то, что AWS рекламирует как Впутник Cloudhub. .
Что касается биллинга, Вы платите за каждый час, в течение которого VPN-соединение находится в Доступно Государство (Таким образом, чтобы избежать ненужных затрат, вы должны прекратить его всякий раз, когда он не используется), Plus Обычная плата за передачу данных Отказ
Реализация и проверка
Как уже упоминалось в разделе Обзор, в большинстве случаев вы будете использовать VPN сайт AWS на сайт для подключения вашего центра обработки данных AWS. Однако ради простоты мы собираемся соединить два VPC вместе с помощью Программное обеспечение VPN-To-AWS Управляемое VPN Подход Отказ
Так как мы повторно используем VpcStack
и Instancestack
классы, которые мы создали в Часть 1 Единственный класс, который мы пропавшим, это один для Устройство шлюза клиентов (CGD) :
➜ ping-me-cdk-example$ touch lib/cgd.ts
Ping-me-cdk-пример/lib/instance.ts
import * as cdk from '@aws-cdk/core'; import * as ec2 from '@aws-cdk/aws-ec2'; import * as iam from '@aws-cdk/aws-iam'; // <--- this module is not available from the start; remember to import it: `npm install @aws-cdk/aws-iam` interface CustomerGatewayDeviceProps extends cdk.StackProps { vpc: ec2.Vpc; // <--- the VPC in which the Customer Gateway Device will be created } export class CustomerGatewayDeviceStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props: CustomerGatewayDeviceProps) { super(scope, id, props); // Prepare the user data to be applied to the Windows EC2 instance on its initial boot-up const userData = ec2.UserData.forWindows(); userData.addCommands( // The below PowerShell commands were taken from here: https://github.com/ACloudGuru-Resources/course-aws-certified-advanced-networking-specialty/blob/3a687ba5c70d507a53743037b8f1c5a52d05d357/SteveResources/OnPremNet.yaml#L126 '', '# Disable Internet Explorer Enhanced Security Configuration for Administrators', 'Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}" -Name "IsInstalled" -Value 0 -Force', 'Stop-Process -Name iexplore -ErrorAction SilentlyContinue', '# Begin configuration for VPN services', 'Set-NetAdapterAdvancedProperty -DisplayName "IPv4 Checksum Offload" -DisplayValue "Disabled"', 'Set-NetAdapterAdvancedProperty -DisplayName "TCP Checksum Offload (IPv4)" -DisplayValue "Disabled"', 'Set-NetAdapterAdvancedProperty -DisplayName "UDP Checksum Offload (IPv4)" -DisplayValue "Disabled"', 'Invoke-WebRequest https://steveatacg.s3-us-west-1.amazonaws.com/advnetspec/Win2019VPNServerConfig.xml -OutFile c:\config.xml', 'Install-WindowsFeature -ConfigurationFilePath c:\config.xml -computername $env:COMPUTERNAME -Restart', 'Install-RemoteAccess -VpnType VpnS2S', ' ', ) // Create an IAM role allowing the instance to be managed by SSM const ssmRoleForEc2 = new iam.Role(this, 'SsmRoleForEc2', { assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'), managedPolicies: [iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMManagedInstanceCore')], }); // Create an EC2 instance to serve as the software VPN const cgd = new ec2.Instance(this, 'CGW', { vpc: props.vpc, instanceType: new ec2.InstanceType('t2.micro'), machineImage: ec2.MachineImage.fromSSMParameter('/aws/service/ami-windows-latest/Windows_Server-2019-English-Full-Base', ec2.OperatingSystemType.WINDOWS, userData), // <--- use the latest Amazon Machine Image for Windows Server 2019 vpcSubnets: { subnetType: ec2.SubnetType.PUBLIC, // <--- place the instance in a public subnet }, role: ssmRoleForEc2, // <--- use the created earlier IAM role as the instance profile sourceDestCheck: false, // <--- make sure the source/destination check is turned off }); // Output the instance's public IP new cdk.CfnOutput(this, 'CustomerGatewayDevicePublicIp', { value: cgd.instancePublicIp, }); } }
С @ AWS-CDK/AWS-IAM
модуль Не был импортирован во время инициализации CDK, давайте установим его сейчас:
➜ ping-me-cdk-example$ npm install @aws-cdk/aws-iam@1.73.0 npm WARN ping-me-cdk-example@0.1.0 No repository field. npm WARN ping-me-cdk-example@0.1.0 No license field. + @aws-cdk/aws-iam@1.73.0 updated 1 package and audited 847 packages in 5.085s 27 packages are looking for funding run `npm fund` for details found 0 vulnerabilities
Мы явно выбрали 1.73.0
Версия (то же самое, что и для нашего @ AWS-CDK/CORE
и @ AWS-CDK/AWS- EC2
модули), чтобы избежать возможности увидеть Аргумент типа «Это» не является назначением параметра типа «строить»
ошибка .
Так как мы получили все куски головоломки, давайте начнем надевать их вместе.
Во-первых, мы инициализируем VPN Source VPC (это тот, который издевается на сеть ON-PREM) и поместите устройство для шлюза клиентов (программное обеспечение VPN в нашем случае) в нем:
Ping-me-cdk-пример/bin/ping-me-cdk-пример.
import * as cdk from '@aws-cdk/core'; import { VpcStack } from '../lib/vpc'; import { InstanceStack } from '../lib/instance'; import { PeeringStack } from '../lib/peering'; import { CustomerGatewayDeviceStack } from '../lib/cgd'; // <--- added in part 2 const app = new cdk.App(); // <--- you can read more about the App construct here: https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.App.html /** * CODE FROM "Ping Me! (Part 1: VPC Peering Using CDK)" WAS REMOVED FOR VISIBILITY */ // Create a VPN source VPC const vpcVpnSource = new VpcStack(app, 'VpcVpnSourceStack', { vpcSetup: { cidrs: ['10.0.2.0/24'], maxAzs: 1, // <--- to keep the costs down, we'll stick to 1 availability zone per VPC (obviously, not something you'd want to do in production) }, }); // Create a Customer Gateway Device in the VPN source VPC new CustomerGatewayDeviceStack(app, 'CustomerGatewayDeviceStack', { vpc: vpcVpnSource.createdVpcs[0], });
Теперь мы можем развернуть эти два стека. А с Vpcvpnsourcestack
это зависимость CustomergatewayDevicestack
Мы можем просто позвонить в последнее в нашей команде, и все равно оба собираются построить:
➜ ping-me-cdk-example$ cdk deploy CustomerGatewayDeviceStack --require-approval never Including dependency stacks: VpcVpnSourceStack VpcVpnSourceStack VpcVpnSourceStack: deploying... VpcVpnSourceStack: creating CloudFormation changeset... [██████████████████████████████████████████████████████████] (16/16) ✅ VpcVpnSourceStack Outputs: VpcVpnSourceStack.ExportsOutputFnGetAttVpc07C831B30CidrBlockB8164F9E = 10.0.2.0/24 VpcVpnSourceStack.ExportsOutputRefVpc07C831B304FE08623 = vpc-0d8d8118923b40b85 VpcVpnSourceStack.ExportsOutputRefVpc0publicSubnet1SubnetB977A71E8C9155C7 = subnet-037467ea871b103c1 Stack ARN: arn:aws:cloudformation:eu-west-1:REDACTED:stack/VpcVpnSourceStack/f9d46c70-3005-11eb-8c3a-06fab0925578 CustomerGatewayDeviceStack CustomerGatewayDeviceStack: deploying... CustomerGatewayDeviceStack: creating CloudFormation changeset... [██████████████████████████████████████████████████████████] (6/6) ✅ CustomerGatewayDeviceStack Outputs: CustomerGatewayDeviceStack.CustomerGatewayDevicePublicIp = 52.51.199.29 # <--- COPY THE PUBLIC IP OF THE CUSTOMER GATEWAY DEVICE (CGD) Stack ARN: arn:aws:cloudformation:eu-west-1:REDACTED:stack/CustomerGatewayDeviceStack/665a19d0-3006-11eb-9492-0a91d0eaa80f
Давайте схватим публику IP CGD с вышеуказанного выхода или с помощью AWS CLI (например, так: AWS CloudFormation Cheception-Stacks --stack-name customergatewaydevicestack - kazeergatewatewedevicestack - query "Stacks []. |) и переходите к созданию VPC VPN-назначения VPN, с подключением VPN сайта к сайту к VPC VPN VPC уже на месте, а также экземпляр EC2, который будет служить нашему пункту назначения Ping.
Ping-me-cdk-пример/bin/ping-me-cdk-пример.
/** * ALL PRECEDING CODE WAS REMOVED FOR VISIBILITY */ const vpcVpnDestination = new VpcStack(app, 'VpcVpnDestinationStack', { vpcSetup: { cidrs: ['10.0.3.0/24'], maxAzs: 1, // <--- to keep the costs down, we'll stick to 1 availability zone per VPC (obviously, not something you'd want to do in production) vpnConnections: { toOnPrem: { ip: '52.51.199.29', // <--- grab this from the outputs of CustomerGatewayDeviceStack, e.g.: aws cloudformation describe-stacks --stack-name CustomerGatewayDeviceStack --query "Stacks[].Outputs[].OutputValue" staticRoutes: [ vpcVpnSource.createdVpcs[0].vpcCidrBlock, ] } } }, }); new InstanceStack(app, 'InstanceVpnDestinationStack', { vpcs: vpcVpnDestination.createdVpcs, });
➜ ping-me-cdk-example$ cdk deploy InstanceVpnDestinationStack --require-approval never Including dependency stacks: VpcVpnDestinationStack, VpcVpnSourceStack VpcVpnSourceStack VpcVpnSourceStack: deploying... ✅ VpcVpnSourceStack (no changes) Outputs: VpcVpnSourceStack.ExportsOutputFnGetAttVpc07C831B30CidrBlockB8164F9E = 10.0.2.0/24 VpcVpnSourceStack.ExportsOutputRefVpc07C831B304FE08623 = vpc-0d8d8118923b40b85 VpcVpnSourceStack.ExportsOutputRefVpc0publicSubnet1SubnetB977A71E8C9155C7 = subnet-037467ea871b103c1 Stack ARN: arn:aws:cloudformation:eu-west-1:REDACTED:stack/VpcVpnSourceStack/f9d46c70-3005-11eb-8c3a-06fab0925578 VpcVpnDestinationStack VpcVpnDestinationStack: deploying... VpcVpnDestinationStack: creating CloudFormation changeset... [██████████████████████████████████████████████████████████] (22/22) ✅ VpcVpnDestinationStack Outputs: VpcVpnDestinationStack.ExportsOutputFnGetAttVpc07C831B30DefaultSecurityGroup52C351BF = sg-0e750a0ff54ed08aa VpcVpnDestinationStack.ExportsOutputRefVpc0privateSubnet1SubnetD6383522ACB05B9B = subnet-0149bc2a09ea2bc34 Stack ARN: arn:aws:cloudformation:eu-west-1:REDACTED:stack/VpcVpnDestinationStack/af2f9e90-3007-11eb-93e5-0a4cff3749d5 InstanceVpnDestinationStack InstanceVpnDestinationStack: deploying... InstanceVpnDestinationStack: creating CloudFormation changeset... [██████████████████████████████████████████████████████████] (6/6) ✅ InstanceVpnDestinationStack Outputs: InstanceVpnDestinationStack.Instance0BastionHostId1959CA92 = i-02e376354bcb4b094 InstanceVpnDestinationStack.Instance0PrivateIp = 10.0.3.49 Stack ARN: arn:aws:cloudformation:eu-west-1:REDACTED:stack/InstanceVpnDestinationStack/c2a92a30-3008-11eb-a26f-0639b3b50e04
Необходимая инфраструктура стоит, но нам все еще нужно настроить CGD. Для достижения того, что мы отправимся на консоль AWS и загрузите файл конфигурации, который был сгенерирован для нас:
- COUSOLE AWS -> VPC -> Соединения VPN сайта на месте -> Выберите наше новое соединение -> нажмите «Загрузить конфигурацию»
В этом текстовом файле мы заинтересованы в строках 111-129, содержащие два сценария, нам нужно будет выполнить на CGD. Они должны выглядеть что-то подобное:
! Script for Tunnel 1: netsh advfirewall consec add rule Name="vgw-0e89a3295d6b100c2 Tunnel 1" ^ Enable=Yes Profile=any Type=Static Mode=Tunnel ^ LocalTunnelEndpoint=[Windows_Server_Private_IP_address] ^ RemoteTunnelEndpoint=34.253.60.42 Endpoint1=[Your_Static_Route_IP_Prefix] ^ Endpoint2=[Your_VPC_CIDR_Block] Protocol=Any Action=RequireInClearOut ^ Auth1=ComputerPSK Auth1PSK=iKV4pvEVAxVk6wKeVma38F8ZDxVfPhNA ^ QMSecMethods=ESP:SHA1-AES128+60min+100000kb ^ ExemptIPsecProtectedConnections=No ApplyAuthz=No QMPFS=dhgroup2 ! Script for Tunnel 2: netsh advfirewall consec add rule Name="vgw-0e89a3295d6b100c2 Tunnel 2" ^ Enable=Yes Profile=any Type=Static Mode=Tunnel ^ LocalTunnelEndpoint=[Windows_Server_Private_IP_address] ^ RemoteTunnelEndpoint=52.50.166.48 Endpoint1=[Your_Static_Route_IP_Prefix] ^ Endpoint2=[Your_VPC_CIDR_Block] Protocol=Any Action=RequireInClearOut ^ Auth1=ComputerPSK Auth1PSK=PAoYUDzM_V93hRcJxvVkMCV6VjpWFtKt ^ QMSecMethods=ESP:SHA1-AES128+60min+100000kb ^ ExemptIPsecProtectedConnections=No ApplyAuthz=No QMPFS=dhgroup2
Своп [Windows_server_private_ip_address]
Для частного IP-адреса вашего CGD (вы можете получить его с помощью AWS CLI: AWS EC2 Описание-экземпляры --filters/cgw "- Quare" Бронирование []. Экземпляры []. PrivateiPaddress "
), . [Your_static_route_ip_prefix]
Для CIDR VPN Source VPC ( 10.0.2.0/24
), [Your_vpc_cidr_block]
Для CIDR VPN-назначения VPC CIDR ( 10.0.3.0/24
), избегайте кавычек ( «
), предшествующие им обратной косой черты ( \
) и удалите все колючие ( ^
) И следуя новым линиям, чтобы оба скрипты в одноиналры, например:
netsh advfirewall consec add rule Name=\"vgw-06fab417114297dd1 Tunnel 1\" Enable=Yes Profile=any Type=Static Mode=Tunnel LocalTunnelEndpoint=10.0.2.18 RemoteTunnelEndpoint=34.249.222.228 Endpoint1=10.0.2.0/24 Endpoint2=10.0.3.0/24 Protocol=Any Action=RequireInClearOut Auth1=ComputerPSK Auth1PSK=F_BjSjPg8ctE6XeX183INrtAPxkaktXm QMSecMethods=ESP:SHA1-AES128+60min+100000kb ExemptIPsecProtectedConnections=No ApplyAuthz=No QMPFS=dhgroup2
Мы запустим их в экземпляре Windows удаленно с помощью SSM.
Если вы следуете, найдите время, обязательно поменяйте идентификатор экземпляра Windows ( I-03DD90E66A0E6A145
) для соответствующего значения перед запуском ниже:
➜ ping-me-cdk-example$ aws ssm send-command --document-name "AWS-RunPowerShellScript" \ --document-version "1" \ --targets '[{"Key":"InstanceIds","Values":["i-03dd90e66a0e6a145"]}]' \ --parameters '{"workingDirectory":[""],"executionTimeout":["3600"],"commands":["netsh advfirewall consec add rule Name=\"vgw-06fab417114297dd1 Tunnel 1\" Enable=Yes Profile=any Type=Static Mode=Tunnel LocalTunnelEndpoint=10.0.2.18 RemoteTunnelEndpoint=34.249.222.228 Endpoint1=10.0.2.0/24 Endpoint2=10.0.3.0/24 Protocol=Any Action=RequireInClearOut Auth1=ComputerPSK Auth1PSK=F_BjSjPg8ctE6XeX183INrtAPxkaktXm QMSecMethods=ESP:SHA1-AES128+60min+100000kb ExemptIPsecProtectedConnections=No ApplyAuthz=No QMPFS=dhgroup2"]}' \ --timeout-seconds 600 \ --max-concurrency "50" \ --max-errors "0" { "Command": { "CommandId": "ab32f5e8-78c9-4e5b-95d4-944e02814682", "DocumentName": "AWS-RunPowerShellScript", "DocumentVersion": "1", "Comment": "", "ExpiresAfter": "2020-11-26T19:27:48.114000+01:00", "Parameters": { "commands": [ "netsh advfirewall consec add rule Name=\"vgw-06fab417114297dd1 Tunnel 1\" Enable=Yes Profile=any Type=Static Mode=Tunnel LocalTunnelEndpoint=10.0.2.18 RemoteTunnelEndpoint=34.249.222.228 Endpoint1=10.0.2.0/24 Endpoint2=10.0.3.0/24 Protocol=Any Action=RequireInClearOut Auth1=ComputerPSK Auth1PSK=F_BjSjPg8ctE6XeX183INrtAPxkaktXm QMSecMethods=ESP:SHA1-AES128+60min+100000kb ExemptIPsecProtectedConnections=No ApplyAuthz=No QMPFS=dhgroup2" ], "executionTimeout": [ "3600" ], "workingDirectory": [ "" ] }, "InstanceIds": [], "Targets": [ { "Key": "InstanceIds", "Values": [ "i-03dd90e66a0e6a145" ] } ], "RequestedDateTime": "2020-11-26T18:17:48.114000+01:00", "Status": "Pending", "StatusDetails": "Pending", "OutputS3BucketName": "", "OutputS3KeyPrefix": "", "MaxConcurrency": "50", "MaxErrors": "0", "TargetCount": 0, "CompletedCount": 0, "ErrorCount": 0, "DeliveryTimedOutCount": 0, "ServiceRole": "", "NotificationConfig": { "NotificationArn": "", "NotificationEvents": [], "NotificationType": "" }, "CloudWatchOutputConfig": { "CloudWatchLogGroupName": "", "CloudWatchOutputEnabled": false }, "TimeoutSeconds": 600 } }
Теперь давайте проверим, это удалось использовать AWS CLI’s AWS SSM Get-Command-Command
команда Отказ
Опять же, если вы следуете, обязательно поменяйте идентификатор команды ( AB32F5E8-78C9-4E5B-95D4-944E02814682-944E02814682
) и ID экземпляра Windows ( I-03DD90E66A0E6A145
) для соответствующих значений Перед запуском ниже:
➜ ping-me-cdk-example$ aws ssm get-command-invocation --command-id ab32f5e8-78c9-4e5b-95d4-944e02814682 --instance-id i-03dd90e66a0e6a145 { "CommandId": "ab32f5e8-78c9-4e5b-95d4-944e02814682", "InstanceId": "i-03dd90e66a0e6a145", "Comment": "", "DocumentName": "AWS-RunPowerShellScript", "DocumentVersion": "1", "PluginName": "aws:runPowerShellScript", "ResponseCode": 0, "ExecutionStartDateTime": "2020-11-26T17:17:49.795Z", "ExecutionElapsedTime": "PT1.96S", "ExecutionEndDateTime": "2020-11-26T17:17:50.795Z", "Status": "Success", "StatusDetails": "Success", "StandardOutputContent": "Ok.\r\n\r\n", "StandardOutputUrl": "", "StandardErrorContent": "", "StandardErrorUrl": "", "CloudWatchOutputConfig": { "CloudWatchLogGroupName": "", "CloudWatchOutputEnabled": false } }
Все это хорошо, так что давайте повторим эти два шага для второго сценария:
➜ ping-me-cdk-example$ aws ssm send-command --document-name "AWS-RunPowerShellScript" \ --document-version "1" \ --targets '[{"Key":"InstanceIds","Values":["i-03dd90e66a0e6a145"]}]' \ --parameters '{"workingDirectory":[""],"executionTimeout":["3600"],"commands":["netsh advfirewall consec add rule Name=\"vgw-06fab417114297dd1 Tunnel 2\" Enable=Yes Profile=any Type=Static Mode=Tunnel LocalTunnelEndpoint=10.0.2.18 RemoteTunnelEndpoint=54.77.85.166 Endpoint1=10.0.2.0/24 Endpoint2=10.0.3.0/24 Protocol=Any Action=RequireInClearOut Auth1=ComputerPSK Auth1PSK=sPGbITqCkW.PSrwuhlycnn6CgFFbjS0w QMSecMethods=ESP:SHA1-AES128+60min+100000kb ExemptIPsecProtectedConnections=No ApplyAuthz=No QMPFS=dhgroup2"]}' \ --timeout-seconds 600 \ --max-concurrency "50" \ --max-errors "0" { "Command": { "CommandId": "dd7bb695-51e2-41eb-a898-eec8fc4562f4", "DocumentName": "AWS-RunPowerShellScript", "DocumentVersion": "1", "Comment": "", "ExpiresAfter": "2020-11-26T19:30:10.955000+01:00", "Parameters": { "commands": [ "netsh advfirewall consec add rule Name=\"vgw-06fab417114297dd1 Tunnel 2\" Enable=Yes Profile=any Type=Static Mode=Tunnel LocalTunnelEndpoint=10.0.2.18 RemoteTunnelEndpoint=54.77.85.166 Endpoint1=10.0.2.0/24 Endpoint2=10.0.3.0/24 Protocol=Any Action=RequireInClearOut Auth1=ComputerPSK Auth1PSK=sPGbITqCkW.PSrwuhlycnn6CgFFbjS0w QMSecMethods=ESP:SHA1-AES128+60min+100000kb ExemptIPsecProtectedConnections=No ApplyAuthz=No QMPFS=dhgroup2" ], "executionTimeout": [ "3600" ], "workingDirectory": [ "" ] }, "InstanceIds": [], "Targets": [ { "Key": "InstanceIds", "Values": [ "i-03dd90e66a0e6a145" ] } ], "RequestedDateTime": "2020-11-26T18:20:10.955000+01:00", "Status": "Pending", "StatusDetails": "Pending", "OutputS3BucketName": "", "OutputS3KeyPrefix": "", "MaxConcurrency": "50", "MaxErrors": "0", "TargetCount": 0, "CompletedCount": 0, "ErrorCount": 0, "DeliveryTimedOutCount": 0, "ServiceRole": "", "NotificationConfig": { "NotificationArn": "", "NotificationEvents": [], "NotificationType": "" }, "CloudWatchOutputConfig": { "CloudWatchLogGroupName": "", "CloudWatchOutputEnabled": false }, "TimeoutSeconds": 600 } }
➜ ping-me-cdk-example$ aws ssm get-command-invocation --command-id dd7bb695-51e2-41eb-a898-eec8fc4562f4 --instance-id i-03dd90e66a0e6a145 { "CommandId": "dd7bb695-51e2-41eb-a898-eec8fc4562f4", "InstanceId": "i-03dd90e66a0e6a145", "Comment": "", "DocumentName": "AWS-RunPowerShellScript", "DocumentVersion": "1", "PluginName": "aws:runPowerShellScript", "ResponseCode": 0, "ExecutionStartDateTime": "2020-11-26T17:20:11.557Z", "ExecutionElapsedTime": "PT0.647S", "ExecutionEndDateTime": "2020-11-26T17:20:11.557Z", "Status": "Success", "StatusDetails": "Success", "StandardOutputContent": "Ok.\r\n\r\n", "StandardOutputUrl": "", "StandardErrorContent": "", "StandardErrorUrl": "", "CloudWatchOutputConfig": { "CloudWatchLogGroupName": "", "CloudWatchOutputEnabled": false } }
Другое a-хорошо, поэтому давайте пингом экземпляром EC2 в VPC VPN VPC от экземпляра Windows в VPN VPC VPN, чтобы убедиться, что подключение VPN сайта работает как ожидается.
Опять же, если вы следуете, обязательно поменяйте идентификатор экземпляра Windows ( I-03DD90E66A0E6A145
) и частный IP экземпляра Linux для соответствующих значений перед запуском ниже:
aws ssm send-command --document-name "AWS-RunPowerShellScript" --document-version "1" --targets '[{"Key":"InstanceIds","Values":["i-03dd90e66a0e6a145"]}]' --parameters '{"workingDirectory":[""],"executionTimeout":["3600"],"commands":["ping 10.0.3.49"]}' --timeout-seconds 600 --max-concurrency "50" --max-errors "0" { "Command": { "CommandId": "09785d32-8b7e-4f24-9581-90aed774aa7d", "DocumentName": "AWS-RunPowerShellScript", "DocumentVersion": "1", "Comment": "", "ExpiresAfter": "2020-11-26T20:16:40.640000+01:00", "Parameters": { "commands": [ "ping 10.0.3.49" ], "executionTimeout": [ "3600" ], "workingDirectory": [ "" ] }, "InstanceIds": [], "Targets": [ { "Key": "InstanceIds", "Values": [ "i-03dd90e66a0e6a145" ] } ], "RequestedDateTime": "2020-11-26T19:06:40.640000+01:00", "Status": "Pending", "StatusDetails": "Pending", "OutputS3BucketName": "", "OutputS3KeyPrefix": "", "MaxConcurrency": "50", "MaxErrors": "0", "TargetCount": 0, "CompletedCount": 0, "ErrorCount": 0, "DeliveryTimedOutCount": 0, "ServiceRole": "", "NotificationConfig": { "NotificationArn": "", "NotificationEvents": [], "NotificationType": "" }, "CloudWatchOutputConfig": { "CloudWatchLogGroupName": "", "CloudWatchOutputEnabled": false }, "TimeoutSeconds": 600 } }
Давайте посмотрим на результат вывода:
➜ ping-me-cdk-example$ aws ssm get-command-invocation --command-id 09785d32-8b7e-4f24-9581-90aed774aa7d --instance-id i-03dd90e66a0e6a145 { "CommandId": "09785d32-8b7e-4f24-9581-90aed774aa7d", "InstanceId": "i-03dd90e66a0e6a145", "Comment": "", "DocumentName": "AWS-RunPowerShellScript", "DocumentVersion": "1", "PluginName": "aws:runPowerShellScript", "ResponseCode": 0, "ExecutionStartDateTime": "2020-11-26T18:06:41.265Z", "ExecutionElapsedTime": "PT7.529S", "ExecutionEndDateTime": "2020-11-26T18:06:48.265Z", "Status": "Success", "StatusDetails": "Success", "StandardOutputContent": "\r\nPinging 10.0.3.49 with 32 bytes of data:\r\nRequest timed out.\r\nReply from 10.0.3.49: bytes=32 time=1ms TTL=254\r\nReply from 10.0.3.49: bytes=32 time<1ms TTL=254\r\nReply from 10.0.3.49: bytes=32 time<1ms TTL=254\r\n\r\nPing statistics for 10.0.3.49:\r\n Packets: Sent = 4, Received = 3, Lost = 1 (25% loss),\r\nApproximate round trip times in milli-seconds:\r\n Minimum = 0ms, Maximum = 1ms, Average = 0ms\r\n", "StandardOutputUrl": "", "StandardErrorContent": "", "StandardErrorUrl": "", "CloudWatchOutputConfig": { "CloudWatchLogGroupName": "", "CloudWatchOutputEnabled": false } }
Первый пинг был потерян, остальные три вернулись. Это совершенно действительное поведение, поскольку по умолчанию Устройство шлюза клиентов должно поднять VPN-туннели, создавая трафик в AWS Отказ
Подожди, туннели? Да, AWS сайт к сайту VPN создает два туннеля из устройства для шлюза клиентов, и они работают в конфигурации Active/Passive Failover. Вы можете проверить свой статус в консоли AWS:
- до пинга
- После пинга
Очистка
Ради наших кошельков, давайте быстро уничтожим нынешнюю инфраструктуру, прежде чем двигаться дальше. При появлении запроса типа у
Для да:
➜ ping-me-cdk-example$ cdk destroy --all Are you sure you want to delete: InstanceVpnDestinationStack, VpcVpnDestinationStack, PeeringStack, InstancePeersStack, CustomerGatewayDeviceStack, VpcVpnSourceStack, VpcPeersStack (y/n)? y InstanceVpnDestinationStack: destroying... 19:15:58 | DELETE_IN_PROGRESS | AWS::CloudFormation::Stack | InstanceVpnDestinationStack ✅ InstanceVpnDestinationStack: destroyed VpcVpnDestinationStack: destroying... 19:16:55 | DELETE_IN_PROGRESS | AWS::CloudFormation::Stack | VpcVpnDestinationStack 19:18:39 | DELETE_IN_PROGRESS | AWS::EC2::InternetGateway | Vpc0/IGW 19:18:39 | DELETE_IN_PROGRESS | AWS::EC2::VPC | Vpc0 ✅ VpcVpnDestinationStack: destroyed PeeringStack: destroying... ✅ PeeringStack: destroyed InstancePeersStack: destroying... ✅ InstancePeersStack: destroyed CustomerGatewayDeviceStack: destroying... 19:19:00 | DELETE_IN_PROGRESS | AWS::CloudFormation::Stack | CustomerGatewayDeviceStack 19:19:52 | DELETE_IN_PROGRESS | AWS::IAM::Role | SsmRoleForEc2 ✅ CustomerGatewayDeviceStack: destroyed VpcVpnSourceStack: destroying... 19:19:58 | DELETE_IN_PROGRESS | AWS::CloudFormation::Stack | VpcVpnSourceStack ✅ VpcVpnSourceStack: destroyed VpcPeersStack: destroying... ✅ VpcPeersStack: destroyed
Ну тогда мы уже выпущены по поводу виргирования VPC и просто минуты назад, мы видели AWS-сайт на месте VPN в действии. Следовательно, что осталось, это принимает AWS Transit Gateway для спина!
Маякни мне! (4 части серии)
Оригинал: «https://dev.to/aws-builders/ping-me-part-2-site-to-site-vpn-using-cdk-236h»