- Вопрос или проблема
- Команды Gcloud
- Наблюдения:
- Виртуальная машина
- Шаги отладки:
- Ответ или решение
- Как разрешить тайм-аут соединения Telnet в настройке IPSec VPN на GCP
- 1. Проверка конфигурации брандмауэра
- 2. Проверьте настройки VPN и маршрутизации
- 3. Тестирование доступа
- 4. Общие рекомендации по настройке IPSec VPN
- 5. Логи и отладка
- Заключение
Вопрос или проблема
Мы пытаемся подключиться к внешнему сервису, используя IPSec, и VPN хорошо установлен. Однако, когда мы пытаемся запустить telnet, мы всегда получаем следующую ошибку:
telnet: Невозможно подключиться к удаленному хосту: время подключения истекло
Мы используем команды gcloud от GCP для настройки сети, VPN и межсетевого экрана. Соответствующие команды, использованные для настройки VPN и межсетевого экрана, следующие:
Команды Gcloud
gcloud compute networks create sandbox-network \
--subnet-mode custom
gcloud compute networks subnets create sandbox-network-subnet \
--network sandbox-network \
--region us-central1 \
--range 10.0.0.0/24 \
--enable-flow-logs
gcloud compute addresses create sandbox-ip \
--region us-central1
gcloud compute addresses create sandbox-nat-ip \
--region us-central1
gcloud compute target-vpn-gateways create sandbox-vpn-gateway \
--network sandbox-network \
--region us-central1
gcloud compute firewall-rules create sandbox-allow-vpn-traffic \
--network sandbox-network \
--allow tcp,udp,icmp,esp \
--direction INGRESS \
--enable-logging
gcloud compute forwarding-rules create sandbox-rule-esp \
--region us-central1 \
--ip-protocol ESP \
--target-vpn-gateway sandbox-vpn-gateway \
--address $(gcloud compute addresses describe sandbox-ip --region us-central1 --format "get(address)")
gcloud compute forwarding-rules create sandbox-rule-udp500 \
--region us-central1 \
--ip-protocol UDP \
--ports 500 \
--target-vpn-gateway sandbox-vpn-gateway \
--address $(gcloud compute addresses describe sandbox-ip --region us-central1 --format "get(address)")
gcloud compute forwarding-rules create sandbox-rule-udp4500 \
--region us-central1 \
--ip-protocol UDP \
--ports 4500 \
--target-vpn-gateway sandbox-vpn-gateway \
--address $(gcloud compute addresses describe sandbox-ip --region us-central1 --format "get(address)")
gcloud compute firewall-rules create sandbox-allow-ingress \
--network sandbox-network \
--allow all \
--direction INGRESS \
--priority 1000 \
--enable-logging
gcloud compute firewall-rules create sandbox-allow-egress \
--network sandbox-network \
--allow all \
--direction EGRESS \
--priority 1000 \
--enable-logging
gcloud compute vpn-tunnels create sandbox-vpn-tunnel \
--region us-central1 \
--peer-address SERVICE_PEER_IP \
--ike-version 2 \
--shared-secret YOUR_SHARED_SECRET \
--target-vpn-gateway sandbox-vpn-gateway \
--local-traffic-selector 0.0.0.0/0 \
--remote-traffic-selector SERVICE_SNAT_IP
gcloud compute routes create sandbox-vpn-route \
--network sandbox-network \
--next-hop-vpn-tunnel sandbox-vpn-tunnel \
--next-hop-vpn-tunnel-region us-central1 \
--destination-range SERVICE_SNAT_IP
gcloud compute routers create sandbox-router \
--region us-central1 \
--network sandbox-network
gcloud compute routers nats create sandbox-router-nat-config \
--router sandbox-router \
--region us-central1 \
--nat-all-subnet-ip-ranges \
--enable-endpoint-independent-mapping \
--nat-external-ip-pool sandbox-nat-ip \
--log-filter ALL \
--enable-logging
Наблюдения:
- Мы можем видеть, что правила межсетевого экрана позволяют трафик, но telnet все равно истекает по времени.
- Исходящий межсетевой экран, похоже, позволяет трафик согласно логам:
{
"insertId": "INSERT_ID",
"jsonPayload": {
"instance": {
"zone": "us-central1-a",
"project_id": "OUR_PROJECT",
"vm_name": "sandbox-test-vm",
"region": "us-central1"
},
"vpc": {
"project_id": "OUR_PROJECT",
"vpc_name": "sandbox-network",
"subnetwork_name": "sandbox-network-subnet"
},
"remote_instance": {
"project_id": "OUR_PROJECT"
},
"connection": {
"src_ip": "10.0.0.7",
"protocol": 17,
"dest_ip": "SERVICE_SNAT_IP",
"src_port": 60248,
"dest_port": 33523
},
"remote_vpc": {
"vpc_name": "sandbox-network",
"project_id": "OUR_PROJECT"
},
"rule_details": {
"action": "ALLOW",
"direction": "EGRESS",
"priority": 1000,
"ip_port_info": [
{
"ip_protocol": "ALL"
}
],
"destination_range": [
"SERVICE_SNAT_IP/32"
],
"reference": "network:sandbox-network/firewall:sandbox-allow-egress"
},
"disposition": "ALLOWED"
},
"resource": {
"type": "gce_subnetwork",
"labels": {
"subnetwork_name": "sandbox-network-subnet",
"project_id": "OUR_PROJECT",
"subnetwork_id": "4135552741745782047",
"location": "us-central1"
}
},
"timestamp": "2024-10-20T16:16:20.745323759Z",
"logName": "projects/OUR_PROJECT/logs/compute.googleapis.com%2Ffirewall",
"receiveTimestamp": "2024-10-20T16:16:29.827308188Z"
}
Виртуальная машина
gcloud compute instances create sandbox-test-vm \
--zone=us-central1-a \
--machine-type=e2-medium \
--network=sandbox-network \
--subnet=sandbox-network-subnet \
--image-family=debian-12 \
--image-project=debian-cloud \
--can-ip-forward \
--no-restart-on-failure \
--no-address \
--maintenance-policy=MIGRATE \
--tags=sandbox-test-vm \
--boot-disk-size=10GB
gcloud compute firewall-rules create sandbox-allow-icmp-ssh \
--network=sandbox-network \
--allow=tcp:22,icmp \
--source-ranges=0.0.0.0/0 \
--target-tags=sandbox-test-vm
Шаги отладки:
- Мы попытались отладить соединение, используя
telnet
:
sudo telnet SERVICE_SNAT_IP 443 --debug
Попытка SERVICE_SNAT_IP...
telnet: Невозможно подключиться к удаленному хосту: время подключения истекло
traceroute
также не показывает ответа:
traceroute SERVICE_SNAT_IP
traceroute to SERVICE_SNAT_IP (SERVICE_SNAT_IP), 30 hops max, 60 byte packets
1 * * *
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
Что может быть причиной истечения времени соединения telnet
, несмотря на то, что межсетевой экран позволяет трафик? Необходимы ли дополнительные правила межсетевого экрана или настройки сети при настройке IPSec VPN с GCP, чтобы разрешить трафик?
Будем признательны за любые рекомендации по изменению правил межсетевого экрана или настройки сети для разрешения этой проблемы!
Ответ или решение
Как разрешить тайм-аут соединения Telnet в настройке IPSec VPN на GCP
Ваша проблема с тайм-аутом соединения Telnet, несмотря на успешную установку IPSec VPN, может быть связана с несколькими аспектами настройки, включая правила брандмауэра, конфигурацию маршрутизации и настройки самого VPN. Давайте детально рассмотрим возможные причины и способы их устранения.
1. Проверка конфигурации брандмауэра
Первым шагом в устранении проблемы является проверка правил брандмауэра, поскольку именно они контролируют доступ к вашим ресурсам и могут блокировать исходящие или входящие соединения.
Проверка правил брандмауэра:
- Убедитесь, что у вас есть правильные входящие и исходящие правила брандмауэра. Ваши команды создания правил показывают, что вы разрешили трафик TCP и UDP:
gcloud compute firewall-rules create sandbox-allow-vpn-traffic \
--network sandbox-network \
--allow tcp,udp,icmp,esp \
--direction INGRESS \
--enable-logging
- Кроме того, правила
sandbox-allow-ingress
иsandbox-allow-egress
, которые разрешают все протоколы и порты, могут быть настроены правильно, но также необходимо добавить явные разрешения для целевого порта (например, 443) и треф юнитов, если они используются.
2. Проверьте настройки VPN и маршрутизации
Следующим шагом проверьте конфигурацию VPN и маршрутизации:
- Убедитесь, что маршруты корректно настроены для направления трафика к SNAT IP-адресу вашего внешнего сервиса. Попробуйте выполнить команду для отображения маршрутов в вашей сети и убедитесь, что трафик направляется правильно:
gcloud compute routes list --filter="network:sandbox-network"
- Ваша команда для создания маршрута выглядит правильно, однако проверьте, действительно ли
SERVICE_SNAT_IP
совпадает с IP-адресом, к которому вы пытаетесь подключиться.
3. Тестирование доступа
Для тестирования подключения вы правильно использовали команды telnet
и traceroute
. Если никаких ответов не поступает, это указывает на проблемы либо с маршрутизацией, либо на стороне сервиса:
-
Убедитесь, что внешний сервис действительно доступен и принимает соединения на порту 443. Это можно проверить, попытавшись установить соединение из другого окружения.
-
Попробуйте выполнить тестовые команды с других машин или из других сетей, чтобы исключить возможность локальной проблемы.
4. Общие рекомендации по настройке IPSec VPN
- Проверьте наличие необходимых протоколов и настройте соответствующие правила для ESP и IKE (UDP 500 и 4500). Подобная настройка уже присутствует в ваших командах для создания правила пересылки, но убедитесь, что они активно обрабатываются на стороне внешнего сервиса.
5. Логи и отладка
Если ни одно из вышеуказанных решений не помогло, следующим шагом может быть прослушивание логов:
-
Включите дополнительные логи для брандмауэра и VPN, чтобы выяснить, блокируются ли пакеты при маршрутизации через IPSec.
-
Используйте такие инструменты, как tcpdump на вашей виртуальной машине, чтобы просмотреть, проходят ли пакеты должным образом:
sudo tcpdump -i INTERFACE -n host SERVICE_SNAT_IP
Заключение
Возможные проблемы с тайм-аутом Telnet могут быть вызваны настройками брандмауэра, маршрутизацией или конфигурацией VPN. Следуя вышеописанным шагам, вы сможете определить и устранить препятствия для успешного подключения. Не забывайте проверять все изменения в конфигурациях и делать резервные копии перед изменением настроек, чтобы иметь возможность восстановить исправления в случае необходимости.