після закриття 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 в побуті =)