Tag: ddns

CloudFlare to m.in. usługa CDN, serwer DNS, oraz ochrona stron WWW i serwera, i to za darmo

Choć usługa CloudFlare była już wielokrotnie wspominana w różnych wpisach, to do tej pory nie doczekała się swojego własnego wpisu, tylko o niej (pomijam zastosowanie CloudFlare jako serwer DDNS), a jest to chyba najczęściej wykorzystywana przeze mnie usługa – właściwie każda strona internetowa jaką stawiam jest schowana za nią…

Sprawna i bezpieczna aktualizacja serwera dzięki „Floating IP” w DigitalOcean i CloudFlare

Jakiś czas temu pisałem o pojawieniu się „floating IP” (wybaczcie, ale będę posługiwał się angielskim/oryginalnym określeniem, bo „zmienne/pływające IP” chyba nie do końca oddaje sens usługi) w DigitalOcean, i jest to pierwszy nasz dzisiejszy bohater.
Drugim bohaterem będzie serwis CloudFlare, o którym również pisałem już nieraz, i to w przeróżnych znaczeniach/zastosowaniach – od ochrony serwera/strony, przez szybki serwer DNS, aż po wykorzystanie CloudFlare jako usługi DynDNS/DDNS.
I w sumie w tym wpisie nie będzie nic nowego, ale chciałbym Wam pokazać na konkretnym przykładzie jak połączenie usługi typu „floating IP” w DigitalOcean z CloudFlare (ale mogą to być dowolne inne firmy/podmioty/usługi, które działają na podobnej zasadzie) pozwoliło nam dziś sprawnie i bezpiecznie przeprowadzić „dużą aktualizację” serwera na którym działa WebInsider.

Pływające adresy IP w DigitalOcean, czyli zmieniaj serwery nie adresy (IP)

Jak łatwo zauważyć patrząc choćby na baner na dole strony (troszkę nad stopką) strona działa na serwerze VPS uruchomionym w DigitalOcean, stąd to informacje na ten temat pojawiają się częściej, niż na temat „konkurencji” (choć bywają wyjątki).
Dziś będzie o kolejnej nowości – dosłownie z przed dwóch dni, a konkretnie pływających adresach IP…

Gdy nie możesz się zalogować, bo „masz wyłączone ciasteczka w przeglądarce internetowej” na przykładzie CloudFlare

Króciutki wpis, ale być może komuś się przyda – z usługi CloudFlare korzystam na większości swoich stron, czy to dla dodatkowej ochrony, czy jako szybki serwer DNS. Nawet jakiś czas temu opisałem jak wykorzystać CloudFlare jako dynamiczny serwer DNS (DDNS), a to dzięki dostępnemu API i naprawdę szybkiej aktualizacji wpisów dla strefy DNS…

Statystyki na Twojej stronie internetowej (nie tylko opartej o WordPressa)

Zaryzykuje, że chyba większość „bardziej świadomych właścicieli stron internetowych” korzysta z różnych statystyk na swojej stronie, by móc nie tylko kontrolować ilość „unikatowych odwiedzin”, ale również – a może przede wszystkim – by analizować popularność poszczególnych artykułów/treści, czy śledzić źródła odwiedzin na stronie.
Dziś chciałbym pokrótce zaprezentować, jak w prosty sposób można zadbać o takie statystyki na swojej stronie – i o ile w większości oprę się o WordPressa (w tym sklep internetowy WooCommerce), to niektóre z tych rozwiązań można wykorzystać również w przypadku stron nieopartych o ten system CMS.

CloudFlare jako Dynamic DNS (DDNS) na przykładzie Raspberry Pi (Raspbian/Debian)

Ostatnio jeden z „komentatorów” zainspirował mnie do nakręcenia wideo do wpisu dotyczącego zmiany duetu Apache2 + MOD-PHP na Apache2 + PHP-FPM. Tym razem jego „boje z no-ip.com” skłoniły mnie do przygotowania tego wpisu – czyli jak wykorzystać CloudFlare jako klienta DDNS (DNS dla dynamicznego IP).
CloudFlare jako Dynamic DNS (DDNS)
Wprawdzie na co dzień CloudFlare wykorzystuje jako „frontend” dla stron internetowych, to tym razem użyjemy tego serwisu w formie dynamicznego DNSa – korzystając z faktu, że właściwie każda zmiana w DNSach w ramach CloudFlare odbywa się w czasie rzeczywistym.
Dynamiczny adres IP, DDNS i własna domena
Gdy mamy publiczny i stały adres IP – sprawa jest prosta, w kilka(naście) minut możemy postawić u siebie serwer dostępny „z internetu”.
Sytuacja trochę się komplikuje gdy wprawdzie mamy publiczny adres IP, ale jest on zmienny – jak np. w przypadku Neostrady.
W takiej sytuacji nadal możemy uzyskać „z internetu” dostęp do swojego serwera pod stałym adresem (domena/subdomena) korzystając z popularnych serwisów oferujących usługi pozwalające pod konkretną domenę/subdomenę podstawiać dynamicznie aktualny adres IP.
Własna domena
Często są to usługi bezpłatne, choć w takim wariancie nie możemy np. podpiąć własnej domeny – co dla niektórych z Was może być sporym minusem/problemem.
W takim przypadku możecie przejść na konto „premium”, lub skorzystać z metody którą za chwilę przedstawię…
CloudFlare jako DNS z dynamicznie aktualizowanym adresem IP
Wykorzystanie CloudFlare w formie DDNS ma sporo zalet, m.in.:

Usługa w pełni bezpłatna (choć są pakiety płatne)
CDN (sieć serwerów serwujących kontent)
Dodatkowa ochrona (adresu IP, jak i serwera)
Dowolna ilość własnych domen (kierujących na serwer, nawet z dynamicznym IP)
Pełne wykorzystanie możliwości domeny (obsługa nie tylko rekordu A, ale i pozostałych)

To rozwiązanie ma też jedną – potencjalną – wadę:

Na komputerze domowym (jeśli ma robić jako serwer) możecie zainstalować klienta DDNS
Większość routerów posiada obsługę kilku serwisów DDNS

To w przypadku rozwiązania opartego na CloudFlare trzeba będzie skorzystać z dedykowanego skryptu – ale w końcu jest to przykład oparty na serwerze działającym na Raspberry Pi, więc i wymienione minusy są nam nie straszne. Nas nie dotyczą… ;-)
Aby przedstawione tu rozwiązanie działało domena musi być zarejestrowana, dodana do usługi CloudFlare i odpowiednio skonfigurowana (ustawione adresy serwerów DNS na podane przez CloudFlare podczas dodawania domeny).
W przypadku świeżo zarejestrowanych domen czasem trzeba poczekać 10-15 minut, aż odświeżą/zaktualizują się dane w rejestrze operatora danej domeny zanim będzie można dodać domenę do konta (komunikat o niezarejestrowanej domenie).
Należy też pamiętać, że zależnie m.in. od rejestratora domeny, czy ISP (dostawca internetu, u którego często znajdują się przypisane do łącza internetowego DNSy) zmiana adresów serwerów DNSów dla domeny na te od CloudFlare może zająć nawet 24-48 godzin.
CloudFlare API
By móc płynnie zmieniać IP dla rekordu A domeny skorzystamy z API CloudFlare, czyli będzie potrzebny klucza API – znajdziecie go w ustawieniach swojego konta:

Oprócz tego potrzebny będzie adres e-mail przypisany do konta – ale ten na pewno znacie… ;-)
CRON + cURL
Wykorzystamy tu też systemowe harmonogram zadań (CRON) i cURL – najprawdopodobniej macie w systemie, ale na wszelki wypadek:
sudo apt-get install cron
sudo apt-get install curl
Jeszcze tylko…
Zakładam, że serwer WWW lub np. VPN z którego chcecie korzystać za pośrednictwem domeny już jest gotowy do pracy. Oczywiście potrzebne będzie konto na CloudFlare i podpięta do niego domena – ale to chyba oczywiste… ;-)
Tyle teorii czy przygotowań, bierzemy się za „mięcho”, czyli skrypt:
Skrypt CloudFlare DDNS
Skrypt który przygotowałem może wydawać się rozbudowany, ale dzięki temu cała obsługa sprowadza się do modyfikacji kilku parametrów – a „zainteresowani” zawsze mogą wyciągnąć z niego odpowiednie fragmenty…

#!/bin/bash

# --------------------------------------------------
#
# ----- ---- --- CloudFlare DDNS --- ---- -----
#
# Code from: Rembiejewski.pl/blog/cloudflare-ddns
#
# CloudFlare API DOC:
# https://www.cloudflare.com/docs/client-api.html
#
# --------------------------------------------------

IP_CONTROL_LAST=0 # 1 - check the latest IP (file $IP_LOG), 0 - always sends the new IP

# Use Your fav IP chceck URL:
IP_CHECK_URL=
# e.g.:
# http://cdn.pryc.eu/add/myip.php

if [ -z "$IP_CHECK_URL" ]
then
echo "IP_CHECK_URL is empty!"
exit 0
else
IP_NOW=`wget -O - -q $IP_CHECK_URL` # Get current IP, if IP_CONTROL_LAST=1
fi

IP_LOG=/boot/last-ip.txt # Last IP LOG file

if [ ! -f $IP_LOG ] && [ "$IP_CONTROL_LAST" = "1" ]
then
sudo touch $IP_LOG
fi

if [ $IP_LOG ] && [ "$IP_CONTROL_LAST" = "1" ]
then
IP_LAST=$(cat $IP_LOG)
fi

CF_API_KEY= #insert here Your API key
CF_EMAIL= #insert here Your e-mail

DOMAIN= #insert here domain name
DOMAIN_RECORD_NAME= #insert here domain or subdomain name
CF_DOMAIN_REC_ID= #insert here record ID # First time read it - see below

CF_DOMAIN_READ_REC_ID=1 # 1 - ONLY read domain REC_ID, 0 - controls (changing) IP

CF_PROXY4RECORD=1 # Status of CloudFlare Proxy, 1 = orange cloud, 0 = grey cloud.

if [ -z "$CF_API_KEY" ] || [ -z "$CF_EMAIL" ] || [ -z "$DOMAIN" ] || [ -z "$DOMAIN_RECORD_NAME" ]
then
echo "Check script config!"
exit 0
fi

if [ "CF_DOMAIN_READ_REC_ID" = "0" ] && [ -z "$CF_DOMAIN_REC_ID" ]
then
echo "Check CF_DOMAIN_REC_ID"
exit 0
fi

# --------------------------------------------------

function f_cf_api_rec_load_all() {
curl https://www.cloudflare.com/api_json.html \
-d 'a=rec_load_all' \
-d 'tkn='$CF_API_KEY \
-d 'email='$CF_EMAIL \
-d 'z='$DOMAIN
}

function f_cf_api_rec_edit() {
curl https://www.cloudflare.com/api_json.html \
-d 'a=rec_edit' \
-d 'tkn='$CF_API_KEY \
-d 'email'=$CF_EMAIL \
-d 'z='$DOMAIN \
-d 'id='$CF_DOMAIN_REC_ID \
-d 'type=A' \
-d 'name='$DOMAIN_RECORD_NAME \
-d 'content='$IP_NOW \
-d 'service_mode='$CF_PROXY4RECORD \
-d 'ttl=1'
}

# --------------------------------------------------

if [ "$CF_DOMAIN_READ_REC_ID" = "1" ]
then
echo "Read CF DOMAIN REC_ID..."
f_cf_api_rec_load_all
exit 0
fi

# ----- ----- -----

if [ "$IP_CONTROL_LAST" = "1" ]
then
if [ "$IP_NOW" != "$IP_LAST" ]
then
echo "New IP - changing..."
echo $IP_NOW | sudo tee $IP_LOG > /dev/null
f_cf_api_rec_edit
else
echo "IP is OK"
fi
else
echo "Changing IP..."
echo $IP_NOW | sudo tee $IP_LOG > /dev/null
f_cf_api_rec_edit
fi

# --------------------------------------------------

exit 0

 
Skrypt możecie skopiować z „listingu” powyżej, lub – chyba bezpieczniej – pobrać z tego adresu. Ew możecie pobrać do bezpośrednio na serwer za pomocą komendy:
wget //webinsider.pl/add/download/?link=cloudflare_ddns -O /ścieżka/do/zapisania/cloudflare_ddns
Konfiguracja skryptu
Konfiguracja skryptu sprowadza się do zmiany wartości kilku zmiennych:

IP_CONTROL_LAST – Gdy zmienna ma wartość „1” to po uruchomieniu skryptu następuje połączenie z serwerem w celu sprawdzenia aktualnego adresu IP (IP_NOW), po czym następuje jego porównanie z wcześniej zapisanym (IP_LAST) i dopiero jeśli te 2 wartości są różne – następuje wysłanie nowego adresu (IP_NOW) do CloudFlare. Gdy zmienna ma wartość „0” – adres IP jest wysyłany do CloudFlare przy każdym uruchomieniu skryptu, niezależnie od tego czy od ostatniego uruchomienia został zmieniony.
IP_CHECK_URL – Tu należy podać adres skryptu/strony wyświetlającej adres IP. W skrypcie są podane przykładowe, ale jeśli macie taką możliwość, to warto użyć własnego pliku. Więcej na ten temat za chwilę…
IP_NOW – Pobranie „z internetu” aktualnego adresu IP. W skrypcie są podane 2 przykładowe strony z których można pobrać adres IP w „czystej postaci” – możecie też podstawić tu własny adres…
IP_LOG – Adres (ścieżka) pliku służącego do zapisywania ostatniego adresu IP. Ma szczególne znaczenia gdy zmienna IP_CONTROL_LAST  ma wartość „1”.
IP_LAST – Adres IP pobierany z pliku IP_LOG
CF_API_KEY – Klucz API Waszego konta w CloudFlare
CF_EMAIL – E-mail przypisany do Waszego konta w CloudFlare
DOMAIN – Domena na której skrypt będzie pracował. W przypadku korzystania z subdomen w tym miejscu wpisujecie domenę, nie subdomenę.
DOMAIN_RECORD_NAME – Nazwa rekordu. W przypadku modyfikacji rekordu A dla domeny będzie to nazwa domeny, w przypadku modyfikowania rekordu A dla subdomeny będzie to nazwa subdomeny.
CF_DOMAIN_REC_ID – Jedna z ważniejszych zmiennych, dzięki której skrypt i CloudFlare wiedzą który rekord chcemy zmodyfikować. Więcej na ten temat za chwilę…
CF_DOMAIN_READ_REC_ID – Ustawiamy wartość na „1” gdy chcemy uzyskać CF_DOMAIN_REC_ID. W każdym innym przypadku wartość ustawiamy na „0”. Więcej na ten temat za chwilę…
CF_PROXY4RECORD – Włączenie (1) lub wyłączenie (0) usługi CloudFlare dla rekordu.

Sprawdzanie aktualnego IP
Wprawdzie możecie skorzystać z adresu podanego w skrypcie:
http://cdn.pryc.eu/add/myip.php
To jeśli macie taką możliwość – warto rozważyć skorzystanie z własnego plik/adresu… Bo zawsze „adres niezależny” może przestać istnieć, czy… A wystarczy na serwerze WWW – oczywiście nie tym z dynamicznym IP na którym działa skrypt – stworzyć plik PHP o takiej zawartości:
<?php
echo $_SERVER['REMOTE_ADDR'];
?>
I jego adres ustawić dla zmiennej IP_CHECK_URL.
Odczyt ID wybranego rekordu
By odczytać ID rekordu uzupełniamy wszystkie niezbędne dane – oczywiście poza CF_DOMAIN_REC_ID którego jeszcze nie znamy – i ustawiamy wartość „CF_DOMAIN_READ_REC_ID” na „1”.
Następnie zapisujemy i uruchamiamy skrypt.
Jak konfiguracja nie zawiera żadnych błędów zobaczycie wynik podobny do tego:

To wynik dla domeny z tylko 3 rekordami, więc przy bardziej rozbudowanych konfiguracjach DNS będzie tego więcej – ale tylko wygląda to strasznie… ;-)
To co nas interesuje to pozycja „rec_id” występująca tuż przed „rec_hash” i „zone_name” interesującego nas rekordu.
Wartość z „rec_id” wpisujemy jako wartość zmiennej CF_DOMAIN_REC_ID i ustawiamy „CF_DOMAIN_READ_REC_ID” na „0”.
Kilka regułek „kontrolnych”
W skrypcie znalazło się kilka regułek kontrolnych, którym zadaniem jest sprawdzanie, czy wszystkie niezbędne pola zostały odpowiednio wypełnione/skonfigurowane.
Jeśli coś będzie nie tak – dostaniecie stosowną informację…
Działanie skryptu
Oczywiście skrypt trzeba gdzieś zapisać, ja w przypadku Raspberry Pi wszystkie skrypty trzymam w katalogu:
/boot/bin
który jest „podlinkowany” jako „bin” w katalogu każdego użytkownika, dzięki czemu skrypt można wywołać bez potrzeby wpisywania całej ścieżki.
Dodatkową zaletą trzymania skryptów na partycji „boot” jest to, że jest ona w formacie FAT32, a więc można odczytać i modyfikować znajdujące się na niej pliki właściwie na każdym komputerze, a nawet smartfonie (OTG).
Po wywołaniu skonfigurowanego skryptu – zależnie od konfiguracji – sprawdza on (lub nie) adres IP, i gdy trzeba przesyła odpowiednią komendę do CloudFlare w celu jego aktualizacji:

Może się zdarzyć, że system nie będzie chciał uruchomić pliku – w tym celu należy skorzystać z polecenia:
sudo chmod +x /ścieżka/do/pliku/cloudflare_ddns
Harmonogram (CRON)
Oczywiście naszym celem jest automatyzacja całego procesu, dlatego warto skonfigurować systemowy harmonogram (CRON) do wywoływania skryptu o określonej godzinie, czy co określony przedział czasu.
Z racji tego, że już kiedyś pisałem artykuł poświęcony temu tematowi – odsyłam do niego…

Serwer VPN (PPTP) na przykładzie Raspberry Pi

Wiem, że może protokół PPTP (Point to Point Tunneling Protocol) nie jest najbezpieczniejszy (sam na potrzeby „zawodowe” raczej używam choćby OpenVPN), ale przy zastosowaniu dobrego (odpowiednio długiego) hasła do użytku domowego nadaje się idealnie…

Serwer WWW (Apache2 + PHP + MySQL + phpMyAdmin) na przykładzie Raspberry Pi (Raspbian/Debian)

Raspberry Pi można relatywnie łatwo zmienić w ekonomiczny (cena Pi, jak i koszt związany z poborem energii) serwer WWW.
Wprawdzie raczej nie sprawdzi się do trzymania tam strony generującej „większy ruch” (w takim przypadku polecam skorzystać z „normalnego” hostingu albo serwera VPS), ale na potrzeby różnych „naszych” projektów, czy do testów będzie jak najbardziej OK.
W tym celu skorzystam z:

Apache (+ ew. PHP-FPM) i/lub Nginx
PHP (Apache PHP-MOD lub PHP-FPM)
MySQL
phpMyAdmin

Opisana metoda/procedura zadziała nie tylko na Raspberry Pi, ale także na innych komputerach/urządzeniach (serwer, VPS) działających pod kontrolą systemu Debian/Ubuntu, a po lekkiej modyfikacji i na innych dystrybucjach.

Loading

Akcja społeczna

Akcja społeczna

Reklama własna

Reklama

Reklama