Myślę, że rozumiem różnicę między nimi i kiedy używać CNAME, aby przekierować normalnie, ale inne pytania / odpowiedzi nie odpowiadają na mój konkretny scenariusz, który jest:

Nie mogę dostać statycznego adresu IP dla mojego gospodarza w domu, więc zmuszony do użycia DDNS. Powiedzmy, że mam MyDomain.net, że chcę wskazywać na mojejDomain.ddns.net. Umieściłem rekord CNAME w moim dostawcy DNS w następujący sposób:

CNAME * .MYDOMAIN.NET MYDOMAIN.DDNS.NET

Używam WWW i FTP, stąd wieloznaczny.

Nie mam rekordu, ponieważ działałoby to tylko chwilowo, dopóki nie zmienia się ponownie, więc rekord CNAME jest jedynym. Mam uruchomiony narzędzie NO-IP, więc mydomain.ddns.net jest zaktualizowany za każdym razem, gdy się zmienia, a to działa idealnie.

Kiedy próbuję pingować MyDomain.net, nie może znaleźć gospodarza, więc DNS nie działa i dlatego podejrzewam, że coś nie tak z moim wejściem CNAME. Podejrzewam, że to dlatego, że nie mam rekordu A, ale nie mogę znaleźć nigdzie, aby to potwierdzić.

Z góry dziękuję.

0
Karlossus 27 luty 2019, 04:58

2 odpowiedzi

Najlepsza odpowiedź

*.example.net nie złapie example.net. Jednak, jak wspomniałeś, jeśli ping www.example.net trafi na CNAME.

Niestety nie możesz mieć cname na example.net, ponieważ CNAME nie mogą współistnieć z żadnymi innymi typami rekordów, a dla example.net w co najmniej mają rekordy typu NS (to Określa swoje serwisy nazwiska).

Jednym ze sposobów na to, aby go obejść, jest zamiast korzystać z DDNS.NET polega na użyciu dostawcy, który ma API i zaktualizuj bezpośrednio rekord dla example.net. Jeden taki dostawca może być Cloudflare to DNS hosting za darmo. Są Wiele Przewodniki, jak korzystać z nich jako dynamiczne DNS.

1
colde 27 luty 2019, 09:59

Po inspiracji z @colde i trochę pracy chciałem podzielić się moim skryptem wsadowym, który realizuje swoją odpowiedź.

Jest wykonywany przez harmonogram zadań co 10 minut, najpierw sprawdza, czy istnieje połączenie z Internetem, a jeśli tak, sprawdza, czy mój publiczny IP zmienił się, a tylko wtedy, jeśli tak, zaktualizuj DNS Cloudflare za pośrednictwem interfejsu API.

Anonimowiznęłam moich osobistych identyfikatorów i adresy API, najwyraźniej musiałbyś zmienić te.

@echo off
cls
setlocal EnableExtensions EnableDelayedExpansion
set logFile=.\UpdatePublicIP.log
call :log "--- SCRIPT STARTED ---"
goto TestInternet

:log
echo [!date! !time!] %~1
echo [!date! !time!] %~1 >>%logFile%
exit /b 0

:TestInternet
REM First test for internet connectivity.
call :log "Detecting internet."
PING -n 1 8.8.8.8|find "Reply from " >NUL
IF NOT ERRORLEVEL 1 goto :CheckPublicIP
IF     ERRORLEVEL 1 goto :NoInternet

:NoInternet
call :log "No internet, nothing to do."
goto End

:CheckPublicIP
call :log "Detecting public IP."
for /f %%A in (
  'powershell -command "(Invoke-Webrequest "http://api.ipify.org").content"'
) do (
      set TempPublicIP=%%A
     )
call :log "Current Public IP: %TempPublicIP%"
if not "%TempPublicIP%"=="%PublicIP%" (
    call :log "Saved IP [%PublicIP%] different to current [%TempPublicIP%] IP, updating saved PublicIP."
    REM Note: setx saves env var but only available in future cmd windows, not current one.
    setx PublicIP %TempPublicIP% >nul
    goto UpdateDNS
    ) else (
            call :log "Current IP = saved IP, nothing to do."
           )
goto End

:UpdateDNS
call :log "Updating CloudFlare DNS record to [%TempPublicIP%]."
curl -X PUT "https://api.cloudflare.com/client/v4/zones/12345abcde12345abcde12345abcde12/dns_records/1234567890qwertyuiop0987654321ab" -H "X-Auth-Email: yourusername@hotmail.com" -H "X-Auth-Key:a123b4567c8defghijklmnopqrstuvwxyz123" -H "Content-Type: application/json" --data "{\"type\":\"A\",\"name\":\"yourdomainname.net\",\"content\":\"%TempPublicIP%\"}"|findstr.exe modified_on >nul
REM Can't use "success":true due to the quote. Assuming the string "modified_on" occurs on success only.
IF NOT ERRORLEVEL 1 goto :CloudFlareSuccess
IF     ERRORLEVEL 1 goto :CloudFlareError
goto End

:CloudFlareSuccess
call :log "CloudFlare DNS update succeeded.
goto End

:CloudFlareError
call :log "CloudFlare DNS update failed.
goto End

:End
call :log "--- SCRIPT FINISHED ---"
1
Karlossus 16 kwiecień 2019, 07:41