N. B Tämä projekti edellyttää Google Cloudin käyttöä, ja Google Cloud vaatii todennuksen. Erityisesti tässä projektissa ja Google Cloudin DNS: ää käytettäessä tarvitaan API-avain. Google DNS: n käyttäminen testaukseen on käytännössä ilmaista, mutta tili kuitenkin vaaditaan.
kirjoitin tämän ratkaistakseni kotona olleen ongelman, ja se päätyi säästämään minulta 100 dollaria vuodessa. Kiitos, Python! Kiitos CS50!
olen avannut tämän projektin kaikkien käytettäväksi.
lisäksi kyseessä on tarkoituksellisesti yhden tiedoston hakemus. Se on suunniteltu helposti kloonattavaksi ja käytettäväksi, siis avoimeen lähdekoodiin, ja se on suunniteltu käytettäväksi Linux-palvelun kanssa niin, että se voi toimia taustalla. Sitä voidaan teoriassa ajaa kaikilla alustoilla, MAC -, Windows -, Linux -, sulautetut linux-laitteet ja kotiverkkolaitteet.
Olen testannut tätä Windows 10: ssä, Debian 9 Stretchissä ja Max OSX Mojavessa.
minulla on ollut huuhaata ottaen CS50 Web ja olen parhaillaan työstämässä viimeistä projektiani CS50 Webille.
Cheers,
Conor
Google Cloud Dynamic DNS Client
tämä on yksinkertainen dynaaminen DNS-skripti Google Cloud DNS: lle. Skripti tarkistaa julkisen IP-osoitteensa, ja sen jälkeen konfiguraatiotiedoston perusteella se lukee, onko Google Cloud DNS: llä vastaava DNS-merkintä. Jos vastaavaa merkintää ei löydy, skripti luo sellaisen. Jos vastaava merkintä löytyy, mutta on IP-osoite, joka ei vastaa mitä skripti löytyi, sitten skripti päivittää sitten Google Cloud merkintä (Lue poista, sitten luoda). Lopuksi, jos skriptit asetustiedosto vastaa Google Cloud DNS merkintä, niin se nukkuu välein x, ja prosessi toistaa.
tämä hanke koostuu seuraavista osista:
- gcloud-ddns.py: dynaaminen DNS-asiakaskomentosarja
- ddns-conf.yaml: programs configuration file
- requirements.txt: asennettavat vaatimukset
vaatimukset
tämä skripti vaatii Python 3.6: n tai uudemman. f-kieliä käytetään paljon. Pakettivaatimukset on lueteltu vaatimuksissa.txt
käyttö
Usage: python gcloud-ddns.py
Asetukset
$ git clone [email protected]:conorcunningham/google-ddns.git$ cd google-ddns$ python3 gcloud-ddns.py
käsikirjoitus pyörii etualalla. Aion leikkiä sen kanssa ja testata sitä nähdäkseni, voiko se toimia luotettavasti palveluna.
asetustiedosto
käsikirjoituksen kokoonpano on luettavissa yaml-tiedostosta. Tässä on esimerkin ddns-conf sisältö.yaml-tiedosto
api-key: './ddns-api-key.json'logfile: './ddns.log'hosts: - host: 'firewall.example.com.' project_id: 'fluffy-penguin-242411' managed_zone: 'example' domain: 'example.com' ttl: 60 interval: 600 - host: 'www.example-two.com.' project_id: 'fluffy-penguin-242411' managed_zone: 'example-two' domain: 'example-two.com' ttl: 60 interval: 600
skripti hyväksyy yhden valinnaisen CLI-argumentin, joka on asetustiedoston polku. Jos mitään ei anneta, skripti etsii ddns-config.yaml
samasta hakemistosta kuin skripti.
- isäntä: asetettavan palvelimen täysin pätevä verkkotunnus. HUOM* sinun täytyy sisällyttää . . Comin jälkeen tämä on Googlen vaatimus/
- project_id: Projektitunnuksesi Google Cloudissa
- managed_zone: hallinnoidun alueesi nimi Google Cloudissa
- domain: verkkotunnuksesi nimi
- ttl: TTL: n sekuntimäärä
- interval: How long the script will sleep before running again
- LOKIPOLKU: Polku lokitiedostoon
API-avain: polku API-avaimeen JSON-muodossa
todennus
käyttääksesi Google Cloud API: ta tarvitset API-avaimen tilillesi. Tämä avain on JSON-tiedosto ja se on määritettävä asetustiedostossa.
skripti asettaa GOOGLE_APPLICATION_CREDENTIALS
ympäristömuuttujan API-avaimen polulle ja Googlen moduulit käyttävät tätä ympäristömuuttujaa todennuksen käsittelyyn.
os.environ = api_key
Docker
telakkatiedosto sisältyy arkistoon, joten voit käynnistää sen säiliönä Docker-instanssin sisällä.
docker build -t google-ddns .
default docker komento odottaa config.yaml-tiedosto / ddns-kansiossa
docker run -it --rm -v <path/to/config>:/ddns google-ddns
muista, että asetustiedoston sisällä olevat polut ovat suhteessa säiliöön
api-key: '/ddns/ddns-api-key.json'logfile: '/ddns/ddns.log'...
tässä on nopea ja likainen docker-compose-tiedosto, Jos käytät sitä
version: '3'services: ddns: image: google-ddns volumes: - ./config:/ddns
ipify.org API
tämä projekti käyttää snazzya ipify.org API asiakkaiden julkisen IP-osoitteen hakemiseen.