ਮੇਲ ਖਾਂਦੇ ਰੂਟ ਤੋਂ ਬਿਨਾਂ AWS Client VPN ਟ੍ਰੈਫਿਕ ਕਿਉਂ ਸੁੱਟ ਦਿੰਦਾ ਹੈ
ਐਂਡਪੌਇੰਟ ਪੈਕਟ ਅੱਗੇ ਭੇਜਦਾ ਹੈ ਸਿਰਫ਼ ਤਦ ਜਦੋਂ ਉਸਦੀ ਰੂਟ ਸਾਰਣੀ ਮੰਜ਼ਿਲ ਨੂੰ ਢਕਦੀ ਹੈ। ਰੂਟ ਪੜ੍ਹੋ, for_each ਨਾਲ ਪ੍ਰੀਫਿਕਸ ਐਲਾਨੋ, ਵਾਪਸੀ ਮਾਰਗ ਜਾਂਚੋ।
Client VPN ਕਲਾਇੰਟ ਨੂੰ ਪਤਾ ਦਿੰਦਾ ਹੈ, ਹੈਂਡਸ਼ੇਕ ਪੂਰਾ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਕਨੈਕਸ਼ਨ ਫਿਰ ਵੀ ਕਿਤੇ ਨਹੀਂ ਪਹੁੰਚਦਾ। ਸਰਟੀਫਿਕੇਟ ਜਾਂ ਕਲਾਇੰਟ ਸੰਸਕਰਣਾਂ ਨੂੰ ਛੂਹਣ ਤੋਂ ਪਹਿਲਾਂ ਐਂਡਪੌਇੰਟ ਦੀ ਆਪਣੀ ਰੂਟ ਸਾਰਣੀ ਵੇਖੋ। AWS Client VPN ਐਂਡਪੌਇੰਟ ਪੈਕਟ ਅੱਗੇ ਭੇਜਦਾ ਹੈ ਸਿਰਫ਼ ਤਦ ਜਦੋਂ ਉਸਦੇ ਰੂਟਾਂ ਵਿੱਚੋਂ ਇੱਕ ਮੰਜ਼ਿਲ ਪ੍ਰੀਫਿਕਸ ਨੂੰ ਢਕਦਾ ਹੈ; ਜੇ ਕੁਝ ਵੀ ਨਹੀਂ ਮਿਲਦਾ, ਪੈਕਟ ਐਂਡਪੌਇੰਟ ਉੱਤੇ ਹੀ ਸੁੱਟ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਟਾਰਗਿਟ ਹੋਸਟ ਨੂੰ ਕਦੇ SYN ਨਹੀਂ ਦਿਸਦਾ।
ਇਹ ਫਾਰਵਰਡਿੰਗ ਦਾ ਫੈਸਲਾ ਹੈ, ਪ੍ਰਮਾਣਿਕਤਾ ਦਾ ਨਹੀਂ। ਇਹ ਟਨਲ ਉੱਠਣ ਤੋਂ ਬਾਅਦ ਅਤੇ ਅਧਿਕਾਰ ਨਿਯਮਾਂ ਦੇ ਮੁਲਾਂਕਣ ਤੋਂ ਬਾਅਦ ਹੁੰਦਾ ਹੈ, ਇਸ ਲਈ ਵੈਧ ਸਰਟੀਫਿਕੇਟ ਅਤੇ ਵੈਧ ਸਮੂਹ ਫਿਰ ਵੀ ਮਰਿਆ ਕਨੈਕਸ਼ਨ ਦੇ ਸਕਦੇ ਹਨ।
ਐਂਡਪੌਇੰਟ ਸਿਰਫ਼ ਉਹੀ ਅੱਗੇ ਭੇਜਦਾ ਹੈ ਜੋ ਉਸਦੀ ਰੂਟ ਸਾਰਣੀ ਢਕਦੀ ਹੈ
ਹਰ ਰੂਟ ਇੱਕ ਮੰਜ਼ਿਲ CIDR ਅਤੇ ਉਹ ਸਬਨੈੱਟ ਹੈ ਜਿਸਨੂੰ ਟ੍ਰੈਫਿਕ ਮਿਲਣਾ ਚਾਹੀਦਾ ਹੈ। ਐਂਡਪੌਇੰਟ ਕਲਾਇੰਟ ਦੀ ਮੰਜ਼ਿਲ ਦੀ ਉਸ ਸੂਚੀ ਨਾਲ ਤੁਲਨਾ ਕਰਦਾ ਹੈ, ਮੇਲ ਖਾਂਦੀ ਐਂਟਰੀ ਚੁਣਦਾ ਹੈ ਅਤੇ ਪੈਕਟ ਸੰਬੰਧਿਤ ਸਬਨੈੱਟ ਵਿੱਚ ਭੇਜਦਾ ਹੈ। ਐਂਟਰੀ ਨਾ ਹੋਵੇ ਤਾਂ ਅਗਲਾ ਹੌਪ ਨਹੀਂ.
ਧਿਆਨ ਦਿਓ ਕਿ ਰੂਟ ਕੀ ਨਹੀਂ ਹੈ। ਇਹ VPC ਰੂਟ ਸਾਰਣੀ ਦੀ ਐਂਟਰੀ ਨਹੀਂ ਹੈ, ਅਤੇ ਇਹ ਕਿਸੇ ਚੀਜ਼ ਨੂੰ ਅਧਿਕਾਰ ਨਹੀਂ ਦਿੰਦਾ। ਅਧਿਕਾਰ ਨਿਯਮ ਤੈਅ ਕਰਦੇ ਹਨ ਕਿ ਸਮੂਹ ਮੰਜ਼ਿਲ ਤੱਕ ਪਹੁੰਚ ਸਕਦਾ ਹੈ ਜਾਂ ਨਹੀਂ; ਰੂਟ ਤੈਅ ਕਰਦੇ ਹਨ ਕਿ ਐਂਡਪੌਇੰਟ ਕੋਲ ਪੈਕਟ ਭੇਜਣ ਦੀ ਥਾਂ ਹੈ ਜਾਂ ਨਹੀਂ। ਦੋਵੇਂ ਮੇਲ ਖਾਣੇ ਚਾਹੀਦੇ ਹਨ, ਅਤੇ ਉਹ ਵੱਖਰੇ ਲੱਛਣਾਂ ਨਾਲ ਫੇਲ ਹੁੰਦੇ ਹਨ, ਇਸ ਲਈ ਕਿਹੜਾ ਟੁੱਟਿਆ ਹੈ ਦਾ ਅੰਦਾਜ਼ਾ ਲਾਉਣਾ ਪੂਰੀ ਦੁਪਹਿਰ ਬਰਬਾਦ ਕਰਦਾ ਹੈ।
ਆਮ ਅਸੰਗਤੀ ਪੀਅਰ ਕੀਤਾ VPC ਹੈ। ਕੋਈ 10.20.0.0/24 ਲਈ ਰੂਟ ਜੋੜਦਾ ਹੈ ਜਦੋਂ ਕਿ ਹੋਸਟ 10.20.4.0/24 ਵਿੱਚ ਰਹਿੰਦਾ ਹੈ, ਇਸ ਲਈ ਪਤਾ ਹਰ ਐਂਟਰੀ ਤੋਂ ਬਾਹਰ ਰਹਿ ਜਾਂਦਾ ਹੈ। ਕਲਾਇੰਟ ਪਾਸੇ ਦਾ ਕੈਪਚਰ ਬਿਨਾਂ ਜਵਾਬ ਦੇ ਵਾਰ-ਵਾਰ SYN ਦਿਖਾਉਂਦਾ ਹੈ, ਅਤੇ ਟਾਰਗਿਟ ਦੇ ਲੌਗ ਕੁਝ ਵੀ ਨਹੀਂ ਦਿਖਾਉਂਦੇ।
ਸਰਟੀਫਿਕੇਟ ਤੋਂ ਪਹਿਲਾਂ ਰੂਟ ਸੂਚੀ ਪੜ੍ਹੋ
ਐਂਡਪੌਇੰਟ ਦੇ ਰੂਟ ਆਪਣੀ ਵੱਖਰੀ ਆਬਜੈਕਟ ਹਨ, ਇਸ ਲਈ VPC ਸਾਰਣੀ ਪੜ੍ਹਨ ਦੀ ਥਾਂ ਉਹਨਾਂ ਨੂੰ ਸਿੱਧਾ ਪੁੱਛੋ:
aws ec2 describe-client-vpn-routes --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 --query 'Routes[].{Dest:DestinationCidr,Target:TargetSubnet,Origin:Origin}'ਫੇਲ ਹੋ ਰਹੇ ਕਲਾਇੰਟ ਤੋਂ ਸਹੀ ਪਤਾ ਅਤੇ ਪ੍ਰੀਫਿਕਸ ਲੰਬਾਈ ਲਓ, ਫਿਰ ਕਵਰੇਜ ਅੱਖਰ-ਦਰ-ਅੱਖਰ ਜਾਂਚੋ। ਸਭ ਤੋਂ ਲੰਬੇ ਪ੍ਰੀਫਿਕਸ ਦਾ ਮੇਲ ਲਾਗੂ ਹੁੰਦਾ ਹੈ, ਇਸ ਲਈ ਤੰਗ ਰੂਟ ਕਿਤੇ ਹੋਰ ਇਸ਼ਾਰਾ ਕਰੇ ਤਾਂ ਚੌੜਾ ਰੂਟ ਤੁਹਾਨੂੰ ਨਹੀਂ ਬਚਾਉਂਦਾ।
for_each ਨਾਲ ਹਰ ਮੰਜ਼ਿਲ ਲਈ ਇੱਕ ਸਰੋਤ
ਹੱਥ ਨਾਲ ਲਿਖੇ ਰੂਟ ਬਲਾਕ ਉਸੇ ਪਲ ਖਿਸਕ ਜਾਂਦੇ ਹਨ ਜਦੋਂ ਕੋਈ ਕੰਸੋਲ ਵਿੱਚ ਪ੍ਰੀਫਿਕਸ ਜੋੜਦਾ ਹੈ। ਮੰਜ਼ਿਲਾਂ ਨੂੰ ਨਕਸ਼ੇ ਵਿੱਚ ਰੱਖੋ ਅਤੇ ਹਰ ਕੁੰਜੀ ਲਈ ਇੱਕ ਸਰੋਤ ਬਣਾਓ, ਤਾਂ ਜੋ ਹਰ ਜੋੜ ਜਾਂ ਹਟਾਉ ਵੱਖਰਾ ਰਹੇ।
variable "client_vpn_routes" {
type = map(string)
default = {
"10.20.0.0/16" = "subnet-0aa11bb22cc33dd44"
"172.31.0.0/20" = "subnet-0aa11bb22cc33dd44"
}
}
resource "aws_ec2_client_vpn_route" "this" {
for_each = var.client_vpn_routes
client_vpn_endpoint_id = var.client_vpn_endpoint_id
destination_cidr_block = each.key
target_vpc_subnet_id = each.value
depends_on = [aws_ec2_client_vpn_network_association.this]
}ਨੈੱਟਵਰਕ ਸੰਬੰਧ ਉੱਤੇ ਨਿਰਭਰਤਾ ਰੱਖੋ। ਰੂਟ ਨੂੰ ਜੁੜਿਆ ਸਬਨੈੱਟ ਚਾਹੀਦਾ ਹੈ, ਇਸ ਲਈ ਦੋਵੇਂ ਬਣਾਉਣ ਵਾਲਾ apply ਪਹਿਲਾਂ ਸੰਬੰਧ ਨੂੰ ਕ੍ਰਮ ਵਿੱਚ ਰੱਖੇ, ਅਤੇ ਉਸ ਹਵਾਲੇ ਤੋਂ ਬਿਨਾਂ Terraform ਰੂਟ ਨੂੰ ਪਹਿਲਾਂ ਅਜ਼ਮਾਉਣ ਲਈ ਆਜ਼ਾਦ ਹੈ। ਫਿਰ ਯੋਜਨਾ ਪੜ੍ਹੋ: ਰੂਟ ਜੋੜਾਂ ਦੀ ਗਿਣਤੀ ਤੁਹਾਡੇ ਜੋੜੇ ਪ੍ਰੀਫਿਕਸ ਦੇ ਬਰਾਬਰ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ। ਜੇ ਯੋਜਨਾ ਐਂਡਪੌਇੰਟ ਵੀ ਬਦਲਦੀ ਹੈ, ਤਾਂ ਐਂਡਪੌਇੰਟ ਸਰੋਤ ਗਲਤ ਲਿਖਿਆ ਹੈ, ਅਤੇ ਉਸਨੂੰ ਲਾਗੂ ਕਰਨ ਨਾਲ ਹਰ ਜੁੜਿਆ ਕਲਾਇੰਟ ਡਿਸਕਨੈਕਟ ਹੋ ਜਾਂਦਾ ਹੈ।
ਉਹ ਐਂਡਪੌਇੰਟ ਅਪਣਾਉਣਾ ਜੋ ਤੁਸੀਂ ਨਹੀਂ ਬਣਾਇਆ
ਬਹੁਤੀਆਂ ਟੀਮਾਂ ਕੰਸੋਲ ਵਿੱਚ ਬਣਿਆ ਐਂਡਪੌਇੰਟ ਵਿਰਾਸਤ ਵਿੱਚ ਪਾਉਂਦੀਆਂ ਹਨ, ਇਸ ਲਈ ਰੂਟ ਕੋਡ ਨਹੀਂ ਹੁੰਦਾ। ਸਿਰਫ਼ ਰੂਟ Terraform ਵਿੱਚ ਲਿਆਉਣ ਲਈ ਦੂਜਾ ਐਂਡਪੌਇੰਟ ਨਾ ਖੜ੍ਹਾ ਕਰੋ।
ਇਸਦੀ ਥਾਂ ਇੰਪੋਰਟ ਕਰੋ, ਜਾਂ ids ਨੂੰ ਵੇਰੀਏਬਲ ਵਜੋਂ ਭੇਜੋ ਅਤੇ ਵਿਰਾਸਤੀ ਆਬਜੈਕਟਾਂ ਨੂੰ ਪ੍ਰਬੰਧਨ ਤੋਂ ਬਿਨਾਂ ਛੱਡ ਦਿਓ। ਇੰਪੋਰਟ ਲਈ ਹਰ ਸਰੋਤ ਕਿਸਮ ਲਈ ਪ੍ਰਦਾਤਾ ਵੱਲੋਂ ਦਸਤਾਵੇਜ਼ਿਤ ਪਛਾਣ ਫਾਰਮੈਟ ਚਾਹੀਦਾ ਹੈ; ਇਹ ਐਂਡਪੌਇੰਟ, ਮੰਜ਼ਿਲ ਪ੍ਰੀਫਿਕਸ ਅਤੇ ਟਾਰਗਿਟ ਸਬਨੈੱਟ ਨੂੰ ਏਨਕੋਡ ਕਰਦਾ ਹੈ। ਉਹ ਸਟ੍ਰਿੰਗ ਯਾਦ ਤੋਂ ਬਣਾਉਣ ਦੀ ਥਾਂ ਸਰੋਤ ਦਸਤਾਵੇਜ਼ ਤੋਂ ਕਾਪੀ ਕਰੋ, ਯੋਜਨਾ ਚਲਾਓ, ਅਤੇ ਕੁਝ ਨਵਾਂ ਜੋੜਨ ਤੋਂ ਪਹਿਲਾਂ ਕੋਈ ਬਦਲਾਅ ਨਾ ਹੋਣ ਦੀ ਆਸ ਰੱਖੋ।
ਪੈਕਟ ਦਾ ਉਸੇ ਕ੍ਰਮ ਵਿੱਚ ਪਿੱਛਾ ਕਰੋ ਜਿਸ ਵਿੱਚ ਇਹ ਸਫ਼ਰ ਕਰਦਾ ਹੈ
ਜਦੋਂ ਰੂਟ ਮੌਜੂਦ ਹੈ ਅਤੇ ਕਨੈਕਸ਼ਨ ਫਿਰ ਵੀ ਫੇਲ ਹੈ, ਤਾਂ ਉੱਪਰਲੀ ਪਰਤ ਉੱਤੇ ਅੰਦਾਜ਼ਾ ਲਾਉਣ ਦੀ ਥਾਂ ਮਾਰਗ ਕ੍ਰਮ ਵਿੱਚ ਤੁਰੋ।
- ਰੂਟ: ਪ੍ਰੀਫਿਕਸ ਮੰਜ਼ਿਲ ਨੂੰ ਢਕਦਾ ਹੈ ਅਤੇ ਐਂਡਪੌਇੰਟ ਨਾਲ ਜੁੜੇ ਸਬਨੈੱਟ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਹੈ।
- ਅਧਿਕਾਰ: ਅਧਿਕਾਰ ਨਿਯਮ ਵਰਤੋਂਕਾਰ ਦੇ ਸਮੂਹ ਲਈ ਉਸ ਮੰਜ਼ਿਲ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਸਿਰਫ਼ ਰੂਟ ਕਦੇ ਪਹੁੰਚ ਨਹੀਂ ਦਿੰਦਾ।
- ਵਾਪਸੀ ਮਾਰਗ: ਟਾਰਗਿਟ ਸਬਨੈੱਟ ਦੀ ਰੂਟ ਸਾਰਣੀ ਜਵਾਬ ਐਂਡਪੌਇੰਟ ਵੱਲ ਵਾਪਸ ਭੇਜਦੀ ਹੈ, ਅਤੇ ਸੁਰੱਖਿਆ ਸਮੂਹ ਕਲਾਇੰਟ ਪਤਾ ਪੂਲ ਤੋਂ ਪੋਰਟ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।
- ਐਪਲੀਕੇਸ਼ਨ: ਕਲਾਇੰਟ ਤੋਂ ਅਸਲੀ TCP ਕਨੈਕਸ਼ਨ ਖੋਲ੍ਹੋ, ਫਿਰ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਟਾਰਗਿਟ ਦੇ ਲੌਗ ਪੂਲ ਤੋਂ ਉਮੀਦ ਕੀਤਾ ਸਰੋਤ ਪਤਾ ਦਿਖਾਉਂਦੇ ਹਨ।
ਹਰ apply ਵਿੱਚ ਇੱਕ ਪ੍ਰੀਫਿਕਸ ਬਦਲੋ, ਫਿਰ ਰੂਟ ਸੂਚੀ ਦੁਬਾਰਾ ਪੜ੍ਹੋ, ਅਤੇ ਮੰਜ਼ਿਲ, ਅਧਿਕਾਰ ਦੇਣ ਵਾਲਾ ਨਿਯਮ ਅਤੇ ਵਾਪਸੀ ਮਾਰਗ ਇਕੱਠੇ ਦਰਜ ਕਰੋ। ਅਗਲੀ ਵਿਅਕਤੀ ਜੋ ਰੱਦ ਕੀਤਾ ਕਨੈਕਸ਼ਨ ਡੀਬੱਗ ਕਰੇ, ਉਸਨੂੰ ਸਰਟੀਫਿਕੇਟ ਸਿਧਾਂਤ ਤੋਂ ਨਹੀਂ, ਇਸ ਸੂਚੀ ਤੋਂ ਸ਼ੁਰੂ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ।