Как стать автором
Обновить

Комментарии 25

Вот как я решил разрыв отношений с dyndns от dyn.com.
Имеем asus wl-500gpv2 (прошивка code.google.com/p/wl500g/) и дроплет от DO.
на роутере в crontab-е:
*/10 * * * * /opt/digitalocean-ddns
а в скрипте /opt/digitalocean-ddns:
#!/bin/sh /opt/bin/curl -k -s "https://api.digitalocean.com/domains/$DOMAIN_ID/records/$RECORD_ID/edit?client_id=[client_id]&api_key=[api_key]&data=$(nvram get wan0_ipaddr)"
Также попросил саппорт уменшить TTL on DNS.
Таким же образом можно решить проблему и с cloudflare, если сервер не за NAT-ом. В моем случае приходилось дополнительно получать откуда-то IP.
curl -s checkip.dyndns.org | sed 's/[a-zA-Z/<> :]//g' | tr -d '\r'
curl cydev.ru/ip
-s нужно. Иначе могут быть чудеса :)
curl -s ifconfig.me
И запомнить легче.
Довольно долго отвечает на запрос :)
curl -s ip.vlad.pro ну могу тогда это предложить)
root@vlad:~# cat /etc/nginx/sites-enabled/13-ip.vlad.pro 
server { 
	listen 80;
	server_name ip.vlad.pro;
	location / {
		echo_before_body $remote_addr;
                return 200;
	}
	
}

Я, когда решал аналогичную задачу (что интересно, тоже на go:)), составил небольшой список адресов для получения IP. Вдруг кому-то пригодится. Все возвращают простой IPv4:

checkip.amazonaws.com/
curlmyip.com/
www.trackip.net/ip
whatismyip.akamai.com/
ifconfig.me/ip
ipv4.icanhazip.com/
shtuff.it/myip/text/
cydev.ru/ip

Интересно, что все публичные STUN-сервера у меня безбожно тормозили, поэтому пришлось от них отказаться и использовать вот эти сервисы.
Если есть свой сервер, поставьте туда OpenVPN и поднимите соединения до него из дома и с работы. У вас ещё и ssh-сеансы перестанут разрываться при смене IP.
Спасибо, как один из вариантов решения задачи. Также можно вместо OpenVPN использовать SoftEther.
Пользуюсь MOSH, прямо идеально для практически любых условий.
А я и не знал, что он у них есть. Спасибо ;)
Но всегда интереснее написать свой велосипед на костыльном приводе.
Вместо демона на Go, отдающего IP, можно в самом nginx просто отдавать заголовок:
add_header X-Remote-Addr $remote_addr;

По-моему можно просто
echo $remote_addr;

В nginx.
В любом случае это не сильно упрощает дело, хотя решение более элегантное :)
Только если nginx собран с этим нестандартным модулем. add_header, имхо, самое общее решение.
add_header у меня и так используется же, я с помощью него передаю ip на сервис yourip, чтобы уже с него отослать ip не как заголовок, а просто как текст.

upd: я перепутал немного, у меня заголовок устанавливается для запроса, а вы предлагаете для ответа
Да, я предложил заменить демона на Go одной строчкой в конфиге nginx. Будет меньше точек отказа.
Но тогда придется читать заголовки вместо простого тела ответа
Чем чтение заголовков сложнее чтения тела? А вот выкинуть не нужное доп приложение — красота же.
НЛО прилетело и опубликовало эту надпись здесь
Можно в вашем случае сократить на пару строчек код, использовав один из сервисов, которые отдают только ip.
Оставить просто
$answer = $wc.downloadString("https://cydev.ru/ip")

Кстати, кажется, что у вас пример не полный, т.к. нет, собственно, изменения ip и вообще извлечения id записи

А статья больше учебная, не просто так бейджик tutorial висит. Я подумал, что будет полезно постепенно расширять количество статей по go начального уровня.
НЛО прилетело и опубликовало эту надпись здесь
Спасибо за ваш пример, тоже было интересно посмотреть, как это решается на PowerShell
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации