Compare commits
3 Commits
ce48176542
...
e9655a8b00
| Author | SHA1 | Date | |
|---|---|---|---|
| e9655a8b00 | |||
| 988e26e71d | |||
| eb44ec0cf6 |
@@ -2,3 +2,5 @@ DYNDNS_USER=""
|
|||||||
DYNDNS_PASSWORD=""
|
DYNDNS_PASSWORD=""
|
||||||
DYNDNS_DOMAIN_UPDATE=""
|
DYNDNS_DOMAIN_UPDATE=""
|
||||||
LOCAL=false
|
LOCAL=false
|
||||||
|
REAL_PUBLIC_IP_SERVICE="http://hosting.ovh.net"
|
||||||
|
DNS_UPDATE_SRC="https://apis.com/hostname={toUpdateHostname}&myip={realPublicIp}"
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# Automatyczna aktualizacja publicznego adresu IP
|
||||||
|
|
||||||
|
Projekt stworzony z myślą o potrzebach homelabu — dzięki niemu nie jest wymagany
|
||||||
|
stały adres zewnętrzny od dostawcy internetu. Wystarczy posiadać domenę
|
||||||
|
(np. w OVH) i skorzystać z darmowej usługi DynDNS.
|
||||||
|
|
||||||
|
## Jak to działa?
|
||||||
|
|
||||||
|
Skrypt co minutę:
|
||||||
|
1. Sprawdza aktualny publiczny adres IP
|
||||||
|
2. Porównuje go z adresem zapisanym w rekordzie DNS
|
||||||
|
3. Aktualizuje rekord, jeśli adresy się różnią
|
||||||
|
|
||||||
|
## Spis treści
|
||||||
|
|
||||||
|
- [1. Konfiguracja](#1-konfiguracja)
|
||||||
|
- [1.1 Plik konfiguracyjny](#1-skopiuj-env-default-do-env)
|
||||||
|
- [1.2 Spis zmiennych](#2-uzupelnij-env)
|
||||||
|
- [2. Quick start](#2-quick-start)
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Konfiguracja
|
||||||
|
### 1. Skopiuj [.env-default](.env-default) do .env
|
||||||
|
### 2. Uzupelnij [.env](.env)
|
||||||
|
| Zmienna | Opis |
|
||||||
|
| :--- |:---------------------------------------------------------------------|
|
||||||
|
| DYNDNS_USER | Login |
|
||||||
|
|DYNDNS_PASSWORD| Haslo |
|
||||||
|
|DYNDNS_DOMAIN_UPDATE| Subdomeny do aktualizacji, rozdzielone przecinkami |
|
||||||
|
|REAL_PUBLIC_IP_SERVICE| Adres url, który zwraca w plain text aktualny adres IP |
|
||||||
|
|DNS_UPDATE_SRC| Adres url do prividera dyn dns |
|
||||||
|
|
||||||
|
|
||||||
|
## 2. Quick start
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
+2
-5
@@ -12,8 +12,5 @@ services:
|
|||||||
- ./project:/var/www/html
|
- ./project:/var/www/html
|
||||||
- ./logs/:/var/log/cron
|
- ./logs/:/var/log/cron
|
||||||
- ./service/logrotate:/etc/logrotate.d/cron-log
|
- ./service/logrotate:/etc/logrotate.d/cron-log
|
||||||
environment:
|
env_file:
|
||||||
DYNDNS_USER: "${DYNDNS_USER}"
|
- .env
|
||||||
DYNDNS_PASSWORD: "${DYNDNS_PASSWORD}"
|
|
||||||
DYNDNS_DOMAIN_UPDATE: "${DYNDNS_DOMAIN_UPDATE}"
|
|
||||||
LOCAL: "${LOCAL}"
|
|
||||||
+22
-5
@@ -11,8 +11,23 @@ if (isset($_ENV['LOCAL']) && $_ENV['LOCAL']) {
|
|||||||
$lines[] = "die in local";
|
$lines[] = "die in local";
|
||||||
$canUpdate = false;
|
$canUpdate = false;
|
||||||
}
|
}
|
||||||
// old
|
$needEnvKeys = [
|
||||||
// https://www.duckdns.org/update?domains=rhost.duckdns.org&token=1b4ab267-b818-4407-8351-8800c6f4fd78
|
"REAL_PUBLIC_IP_SERVICE","DYNDNS_DOMAIN_UPDATE","DYNDNS_USER","DYNDNS_PASSWORD","DNS_UPDATE_SRC"
|
||||||
|
];
|
||||||
|
$emptyEnvKeys = [];
|
||||||
|
|
||||||
|
foreach ($needEnvKeys as $needEnvKey) {
|
||||||
|
if (!isset($_ENV[$needEnvKey])) {
|
||||||
|
$emptyEnvKeys[] = $needEnvKey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($emptyEnvKeys) > 0) {
|
||||||
|
$canUpdate = false;
|
||||||
|
$lines[] = "Empty env configuration!";
|
||||||
|
$lines[] = "The following env configuration keys are missing:\n";
|
||||||
|
$lines[] = implode(", ", $emptyEnvKeys);
|
||||||
|
}
|
||||||
|
|
||||||
if ($canUpdate) {
|
if ($canUpdate) {
|
||||||
$toUpdateString = $_ENV['DYNDNS_DOMAIN_UPDATE'];
|
$toUpdateString = $_ENV['DYNDNS_DOMAIN_UPDATE'];
|
||||||
@@ -25,7 +40,7 @@ if ($canUpdate) {
|
|||||||
$toUpdateArray = explode(",", $toUpdateString);
|
$toUpdateArray = explode(",", $toUpdateString);
|
||||||
$useragent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36';
|
$useragent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36';
|
||||||
$ch = curl_init();
|
$ch = curl_init();
|
||||||
curl_setopt($ch, CURLOPT_URL, "http://rhostoh.cluster029.hosting.ovh.net/");
|
curl_setopt($ch, CURLOPT_URL, $_ENV['REAL_PUBLIC_IP_SERVICE']);
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||||
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
|
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
|
||||||
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
|
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
|
||||||
@@ -46,8 +61,10 @@ if ($canUpdate) {
|
|||||||
$lines[] = "$toUpdate: same (not update)";
|
$lines[] = "$toUpdate: same (not update)";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$url = "https://dns.eu.ovhapis.com/nic/update?system=dyndns&hostname=$toUpdate&myip=$serverIp";
|
$url = strtr($_ENV['DNS_UPDATE_SRC'],[
|
||||||
|
"{toUpdateHostname}" => $toUpdate,
|
||||||
|
"{realPublicIp}" => $serverIp,
|
||||||
|
]);
|
||||||
$ch = curl_init();
|
$ch = curl_init();
|
||||||
curl_setopt($ch, CURLOPT_URL, $url);
|
curl_setopt($ch, CURLOPT_URL, $url);
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user