maddot.ru Linux → Временный DynDNS за 5 минут
dd
 
Рубрики
» Компьютеры
» Операционные системы
» Android
» Linux
» Windows
» Разное



» Все статьи (Списком)
Популярное
» Все заметки (Списком)
От Yuriy 23:27 28.09
От Айдар 10:48 04.02
От Роман 22:26 15.06
От Евгений 16:46 13.06
От Mike 00:01 23.04
От Вячеслав 20:44 22.04
От Сергей 18:15 11.02
От Надежда 10:51 24.05
От Надежда 10:42 24.05
От bakaut 17:33 14.02
От vlasmet 08:28 18.11
От Mike 11:51 17.05




Друзья
Хостинг Макхост
Качественный платный хостинг. Широкий спектр качественных хостинг услуг с 2004 года.
Ваш IP: 54.163.209.109
Вы на узле: 178.208.83.19
URL: maddot.ru
Время сервера: 2017-12-17T18:58:14+03:00

Временный DynDNS за 5 минут

05 Июл 2014

Сегодня мне понадобилось быстро получить возможность доступа к своему локальному серверу извне. IP адрес дома у меня динамический, а регистрировать сервис DynDNS просто не было времени. В этой статье я опишу свое решение этой задачи.

Для меня есть одна тонкость в этом вопросе - ПК дома находится за роутером, соответственно, если у тебя тоже - то не забудь пробросить необходимый порт через админку роутера. Обычно админка находится по адресу 192.168.0.1. Иначе при заходе по своему IP адресу извне ты увидишь либо ошибку, либо хуже - админку роутера. Сама опция может называться по-разному: Port Forwarding, проброс портов, виртуальные серверы. Также может потребоваться указать локальный IP своего ПК, как DMZ (демилитаризованная зона).

Для того, чтобы знать текущий IP моего домашнего компьютера я решил отправлять его к себе на сайт, а там простым PHP скриптом записывать полученный адрес в файл, чтобы при необходимости к нему обратиться. И чтобы особенно не прилагать усилий при копировании IP вручную - сделал редирект на него при определенном условии:

PHP скрипт:


<?php
##Указываем файл для хранения IP 
##У него должны быть права на запись
$file './dir/ip.txt';
##Если передан GET аргумент go
##То переходим по IP из файла
if(isset($_GET["go"])) {
    
header('Location: http://'.trim(file_get_contents($file)));
} else {
##Иначе, записываем новый IP
##Полученный от домашнего ПК
$ip getenv('REMOTE_ADDR'); //или $_SERVER["REMOTE_ADDR"]
file_put_contents($file$ip);
}
?>

Теперь есть два варианта очевидный и не совсем. Очевидный вариант - настроить дергалку по крону (планирощику заданий). Открываем эмулятор терминала и вводим:
crontab -e
Выбираем редактор (если предложит) и дописываем в конец открывшегося файла правило:
 */15 * * * * curl -G http://site.ru/ip.php 
Если не установлен Curl (что сейчас редкость) - тогда можно использовать wget с выводом в dev/null:
 */15 * * * * wget http://site.ru/ip.php -O /dev/null 
Цифра 15 - количество минут, через которые наша команда будет дергать скрипт на сайте для обновления IP. Впринципе для временного решения доступа к домашнему пк из сети пятнадцать минут вполне должно нас устроить. Если IP меняется чаще, чем раз в 15 минут - просто замени цифру, например, на 3 или 5 минут.

Не очевидный вариант, который, как ни странно, первым мне пришел в голову, и изначально именно его я для себя и реализовал, что называется "по-быстренькому" - это написать скрипт на bash с бесконечным циклом и sleep'ом:

#!/bin/bash

while (true) do
curl -G "http://site.ru/ip.php"
sleep 15m
done
Это вариант у меня отлично проработал целый день и не подвел меня.

Правда изначально (ну торопился) :) я прибег к сильному извращению, но, пожалуй, покажу его тебе, хотя бы ради полезной фичи - выдергивания через терминал своего IP с сайта yoip.ru (но не стоит использовать этот скрипт, для реальной задачи используй Cron или скрипт выше, не стоит терзать понапрасну чужой сайт):

#!/bin/bash

while (true) do
mip=$(wget http://yoip.ru --quiet -O - | grep -E -o '[0-9]{1,3}(\.[0-9]{1,3}){3}') 
##timestamp я передавал, чтобы знать, когда было последнее обновление и не умер ли мой скрипт ))
stamp=$(date +%s) 
curl -G "http://site.ru/ip.php?ip=$mip&time=$stamp"
echo "$mip :: $stamp"
sleep 15m
done


ρ1892
Рубрика → Linux
Метки: linux dyndns сервер ubuntu php



B s i

 




Счетчики 

Яндекс.Метрика