попри чималий вже досвід використання linux, я майже чайник у багатьох питаннях, що стосуються налаштування серверних функцій. аж ось виникло бажання навчитися деяких фокусів — приміром, підключатися по ssh до віддаленого комп'ютера (я в канаді, комп'ютер — в україні), дистанційно налаштувати там vpn і зробити собі зашифроване вікно у світ.

після закриття fs.to і ex.ua задача трохи втратила свою актуальність, але не зовсім: лишаються торенти, за які тут можуть надавати по руцях. ну і взагалі — чи не сором цього не вміти, користуючись linux'ом? отож.

наразі на віддаленій машині працює teamviewer — чудовий інструмент, але не  «канонічний»: не вільний і працює над wine'ом, що прийнятно для запуску забавок, але не для більш чи менш серйозних задач.

duckdns: як «пробити» динамічний ip

отже, задача — «пробити» динамічний ip (себто, задача не в самім ip, зрозуміло, а в тому, щоби адресувати віддалену машинку, яка отримує динамічний ip від свого провайдера). найвідоміший сервіс — dyndns, але він віднедавна недоступний задурно. з чималої кількости альтернатив зупинився на duckdns. сервіс прекрасний своїм мінімалізмом.

переглянув інструкцію на duckdns.org та ще одну покрокову підказку в тенетах. зареєструвався через twitter (можна facebook чи google plus), отримав свій унікальний ідентифікатор (token в термінах duckdns); зареєстрував два домени — один для віддаленої машини (умовно tivasyk_ukraine), а другий — суто для тестування на локальному ноутбуці (tivasyk_test).

простий варіант команди для поновлення запису ip на duckdns для певного домену:

/usr/local/bin/curl "https://www.duckdns.org/update?domains=tivasyk_test&token=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx&ip="

перевірив на локальній машині — ip на сайті поновився на мій поточний, і тепер машинка пінгується за доменним іменем:

ping tivasyk_test.duckdns.org

пробую те саме на віддаленій машині, підключившись через teamviewer:

/usr/local/bin/curl "https://www.duckdns.org/update?domains=tivasyk_ukraine&token=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx&ip="
ping tivasyk_ukraine.duckdns.org

працює!  

cron: періодичне виконання

налаштувати періодичне виконання цієї команди, щоби віддалена машина самотужки звітувала про свій ip на duckdns.

як я зрозумів, є принаймні два варінати рішень: ddclient або cron. перший автоматизує процес за допомогою perl-скрипта, другий — змушує системний планувальник запускати періодично вказану вище команду.

cron канонічніший. за підказкою duckdns треба за допомогою crontab -e додати рядок до списку задач cron у хитромудрому форматі:

*/5 * * * * /usr/local/bin/curl 
"https://www.duckdns.org/update?domains=tivasyk_ukraine&token=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx&ip="

(насправді ducksdns радить трохи інакше, але щоби не морочитися з окремим файлом скрипта, можна й так). але я трохи чітер, тож встановив собі gnome scheduler і скористався графічним інтерфейсом для цього.

на віддаленій машині (elementary os на базі ubuntu) сервіс cron, здається, працює «з коробки», принаймні пошук демона повертає номер відповідного процесу:

pidof crond

якщо не працює, то:

sudo service cron start

а от на моєму ноутбуці (manjaro на базі arch linux) довелося спершу запустити cronie, і тоді перевірка статусу сервіса показує, що задача виконується:

systemctl enable cronie
systemctl start cronie
systemctl status cronie


наче працює. але тут мені захтілося спробувати ще й ddclient. отже…

ddclient: альтернативний спосіб

ddclient — це perl-скрипт, що сам опікується поновленням інформації про поточний ip на онлайнових сервісах на кшалт dyndns, при цьому підтримує їх цілу купу включно з duckdns. встановлюється з репозиторіїв; для debian/ubuntu та похідних:

sudo apt-get install ddclient

для arch та похідних:

sudo pacman -S ddclient

перед першим запуском… стривайте, треба ж прибрати задачу cron, створену раніше. отже, перед запуском сервіса роблю бекап файлу конфігурації /etc/ddclient/ddclient.conf і редагую, як пише книжка — потрібно просто розкоментувати (або додати, якщо не було в шаблоні) розділ для duckdns:

##
## Duckdns (http://www.duckdns.org/)
##
password=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
protocol=duckdns tivasyk_test


за пароль слугує ідентифікатор (token), призначений duckdns. далі вмикаю і запускаю сервіс:

sudo systemctl enable ddclient.service
sudo systemctl start ddclient.service

і можна перевірити, чи працює:

sudo systemctl status ddclient.service

здається, працює. складно сказати, бо рутер не відключався, нову адресу для нього провайдер не видавав, відповідно на сайті duckdns.org мій айпішник не мінявся.

результат: адресація машини з динамічним ip

ну і, власне, результат — заради чого все робилося. я не знаю ip віддаленої машини, але повинна працювати адресація за доменним іменем (пінгую обидва комп'ютери по черзі):

ping tivasyk_ukraine.duckdns.org
ping tivasyk_test.duckdns.org

звісно, поки що пінгуються зовсім не комп'ютери, а рутери. до речі, пінг на рутер в мережі freenet — близько 140-150 мс зараз.

досвіченим користувача linux все це нецікаво, але я занотовую собі на згадку, і хто зна, може ще для когось це правитиме за підказку. наразі все, далі буде: встановлення openssh, налаштування (якщо знадобиться) форвардингу ssh на рутері, ну і далі дослідження на тему практичного використання ssh в побуті =)

5 коментар(ів):

Diak сказав...

я теж таким трохи бавлюсь.
Зара будуюсь, і встановив собі на будові малинку з підключеними термодатчиками, де фіксую температуру фундаменту, повітря в будинку і ззовні, і ще пару функцій корисних). Так було питання як доступатись до малини для відлагодження, постійно ж на будові не сидиш. Я спочатку бавився duckdns але щось мені не вдавалось нормально налаштувати, і ніби все працює, і ІР оновляється а доступитись не міг. Скористався сервсом no-ip, він підтримується роутером, все зразу завелось. Єдиний мінус раз в місяць потрібно підтвердити використання, натиснути посилання в імейлі.

івась тарасик сказав...

@diak то проблема, вочевидячки, була в тому рутері. побачимо, що там в мене буде — рутер наче не дурний, щось має вміти.

Yarema сказав...

Воно все кльово, коли провайдер не блокує доступу ззовні, іншими словами, коли не знаходишся за глухим nat-ом. Тоді n2n вам в поміч, або робити ssh-тунель.

івась тарасик сказав...

@yarema ну, провайдер — то продавець каналу, і якщо він не хоче продати мені доступ до якогось порту мого комп'ютера — мабуть, час його запитати, чому, і залежно від відповіді попрощатися і знайти іншого продавця на ту саму послугу? тим часом я оце щойно «прашол сквозь прастранства і врємя», як казав інженер тімафєєв у відомому фільмі, і завантажую кіно через ssh собі з українського комп'ютера =)

Yarema сказав...

@tivasyk В моєму випадку IP постійно міняється і доступ ззовні заблокований, навіть 22 порт. Але в мене оператор від мобільної мережі LTE, а там свої пріколи. Коли в мене був кабельний інтернет, то все вирішувалося так як в тебе. Але на шальку терезів вплинула менша ціна, принісши при цьому додатковий гемор. Ну але то таке, все вирішується.

Дописати коментар

увага!
коментарі не модерую, проте спам видаляю нещадно. посилання на інші сайти/блоги за темою допису вітаю.

додаткові можливості розмітки (кутики набрати з клавіатури):
  ‹b›жирний шрифт‹/b›
  ‹i›похилий шрифт‹/i›
  ‹a href="http://tivasyk.info"›посилання‹/a›