mydns / simple ruby script

Összeraktam egy egyszerű Ruby scriptet saját DNS-hez, hogy ne kelljen külső dinamikus DNS szolgáltatókat használni. Már régebb óta érett bennem, de végül locsemege topicja miatt megcsináltam.

https://github.com/log69/mydns

Ha van kedve valakinek tesztelni Windows platformon több Ruby verzióval azt megköszönöm.

Nincs semmi függősége a Ruby-n kívül.

Az ötlet annyi, hogy egy fix szerverünkön futtatjuk a szerver oldali scriptet indításkor, az elérni kívánt gépeken pedig a kliens oldali scriptet indításkor. Ez automatikusan frissíti az IP-t. A munkaállomásunkról pedig lekérdezzük az IP címet, mikor el akarjuk érni a kliens gépeket, pl. hogy SSH-val kapcsolódjunk.

SSH-hoz példa:
alias d='/my/scripts/mydns_client.rb'
ssh `d ?mymachine`

Hozzászólások

A flood limitacional vedd figyelembe, hogy ha a db.size > 255 akkor pont a frissen hozzaadott rekordot vagod le.

Inkabb:


if db.size > 255
  db.unshift
  db.unshift
end

Es igy a legregebbi rekord vesz el.
--
Blog | @hron84
Üzemeltető macik

Amugy miert nem hash-ben tarolod oket, miert ez az elshiftelt tombos moka? Marmint, vicces meg minden, de az ilyen adatszerkezeteket hash-ben szokas tarolni, ahol a kulcs a gepnev, az ertek meg az IP cim. Kesobbiekben ki lehet boviteni az ilyet redissel v mongodb-vel is, h perzisztens legyen.

A tamadas elleni vedekezeshez hasznalj valami token-alapu rendszert, ahol minden gepnevhez tartozik egy token.
--
Blog | @hron84
Üzemeltető macik

Mi a vicces pontosan?

Hash nem kell, mert így a jelenlegi megoldásomban a tömböt bármennyi dimenziósra tudom alakítani. Pl. ha bevezetnék felhasználó nevet (erre még hajlandó lennék), tehát nem csak gépnév / ip adatot tárolna, hanem felhnév / gépnév / ip, így ha több admin használná ezt a szolgáltatást, akkor kizárhatnánk az ugyanolyan nevű gépek összeakadását. De az amúgy is kiiktatható, ha pl. egy azonosítót teszünk a névbe, pl: myuser.far.far.away.machine. A tömb általánosabb és több lehetőséget hagy jövőbeni irányoknak. De persze sok fajta képen meg lehet csinálni.

A shift-elést te írtad és javasoltad a fenti kommentedben, nem én használtam.

Kizárt hogy bármilyen DB megoldáshoz nyúljak ezért. Szépen fusson csak memóriában és köpködje az adatokat onnét. Had dolgozzon a kicsike.. ;)

Nem akarok azonosítani token használatával gépet. A célom a minél egyszerűbb felépítés, minél kevesebb kódsorral. Gondolom érted miért.

Nekem nem tetszenek az olyan megoldások, amelyeket agyon fejlesztenek. Legalábbis az ultra egyszerű megoldások hiánya zavar. mert bonyolult mindig is volt és lesz (és érthető az igény rájuk), de a faék az nem annyira jellemző. Ezt látom legalábbis az eszközöknél. Ennek szellemében szívesen veszek bármilyen javaslatot.

"A shift-elést te írtad és javasoltad a fenti kommentedben, nem én használtam."

Osszekevered a shift, mint funkcionev, es a shifting, mint fogalom elnevezeset. A shifting gyakorlatilag eltolast jelent, pont azt, ami te csinalsz, a tombben a rekordok mindig egy adott eltolassal erhetoek el, tehat ha tudod, hogy egy rekord pl. 5 elembol all, akkor minden rekord 5-os eltolassal erheto el, azaz minden 5. tombelem egy uj rekordot jelent.

"Nem akarok azonosítani token használatával gépet. A célom a minél egyszerűbb felépítés, minél kevesebb kódsorral. Gondolom érted miért."

Szerintem ezt is felreertetted. A "token alapu azonositas" azt jelenti, hogy minden resztvevo gep az elso telepiteskor kap egy egyszeru (random) jelsort, mittudomen, a gep lspci-kimenetenek md5 hashe, es ez a kodsor azonositja a gepet, vagyis, amikor a gep elkuldi a nevet a szervernek, akkor mellerakja ezt az azonositot is (ezt hivjak tokennek) es a szerver megnezi, hogy ehhez a nevhez valoban ez a token tartozik-e, ha igen, akkor es csakis akkor updateli a cimet. Ennel egyszerubb azonositasi modszer nincs, a usernev-password is bonyolultabb.

"Kizárt hogy bármilyen DB megoldáshoz nyúljak ezért"

Nem feltetlen RDBMS-re gondoltam, de azert az nem az ordogtol valo, ha a szerverprogi leallitaskor lerakja az infoit egy JSON vagy mas fajlba, es indulaskor onnan felparsolja.

Nekem se lenne celom egy ilyen rendszernel az agyonbonyolitas, viszont en azert szeretek standard megoldasokat hasznalni (strukturalt adatokhoz hash, perzisztens adatok, stb), hogy ha valaki rajtam kivul is hasznosnak talalja a cuccomat, es hasznalni akarja, akkor ne azzal kelljen kezdenie, hogy felig ujrairja, mert valami elborult megoldast hasznalok. Raadasul 2-3 ev mulva mar a kutya nem fog emlekezni, hogy miert tunt jo otletnek tombben tarolni az egyebkent strukturalt adatokat, melyeket az osszes tobbi fejleszto hash-ben tarol.
--
Blog | @hron84
Üzemeltető macik

Nekem is van egy kis ilyen kókányom, de annyira kókány, hogy nem rakom ki.
Az elv nálam az, hogy egy php-szkriptet hívogatok a gépemről, a szerveren pedig nézi, hogy "megfelelően" hívták-e meg. Ha igen, akkor az IP-címet kiírja egy fájlba. Egy cron-szkript meg percenként megnézi a fájlt, és cseréli a host-fájlban, ha szükséges. Az SSH meg csak erről a host-ról enged belépést.

beszedes commit uzenetek... :)

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!