сurl. Кинуть запрос на определенный адрес.

Иногда возникают ситуации, когда нам надо кинуть запрос на адрес, но с условием, чтобы имя резолвилось на определенный адрес.
Это можно сделать с помощью утилиты curl с ключом —resolve:

~ curl --help
...
--resolve <host:port:address[,address]...> Resolve the host+port to this address
...

 ~ ping google.com
PING google.com (74.125.205.101) 56(84) bytes of data.

 ~ ping google.com
PING google.com (74.125.205.102) 56(84) bytes of data.

~ curl --resolve google.com:443:74.125.205.102 -k  'https://google.com/' 

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>

Используя ключ —resolve , curl может сделать запросы, используя заданный адрес и предотвращая перезапись нормально разрешенных адресов. Это некоторая альтернатива /etc/hosts в командной строке. Порт должен позволять работать с необходимым протоколом.

Допустим у Вас есть сервис https://myAPP.srv.local/ за балансировщиком и резолвится по нескольким адресам:
192.168.1.20
192.168.1.21

У сервиса есть healthcheck, который отдает информацию о состоянии. Однако же при попадании на https://health.myAPP.srv.local/ иногда мы получаем ошибку, например, «ERR_SSL_UNRECOGNIZED_NAME_ALERT».

Отлавливаем curl’ом эту ошибку:

 ~ curl -k -X GET 'https://health.myAPP.srv.local/' 
...
OK
...

 ~ curl -k -X GET 'https://health.myAPP.srv.local/'
curl: (35) error:14094458:SSL routines:ssl3_read_bytes:tlsv1 unrecognized name

Мы знаем на какие адреса резолвится имя, проверяем конкретно по адресам:

 ~ curl --resolve health.myAPP.srv.local:443:192.168.1.20 -k -X GET 'https://health.myAPP.srv.local/' 
...
OK
...

 ~ curl --resolve health.myAPP.srv.local:443:192.168.1.21 -k -X GET 'https://health.myAPP.srv.local/'
curl: (35) error:14094458:SSL routines:ssl3_read_bytes:tlsv1 unrecognized name

Таким образом мы выявили на каком именно узле у нас проблема, правим сертификат на хосте 192.168.1.21 и можно считать траблшутинг успешным.

0

Добавить комментарий

Ваш e-mail не будет опубликован.