Rudarski bazen preko VPN-a: zadrži sesiju na ispravnom putu
Bazen rudar otvara jednu odlaznu Stratum sesiju, a ne peer port. Stavi tunel ispod tog procesa i čitaj rutu i razrješivač iz njegovog imenskog prostora.
Rudarski softver drži jednu utičnicu otvorenu prema jednoj adresi, i svako pitanje o tunelu, ruti i kreditiranom radu visi o toj utičnici. Ta utičnica je odlazna klijentska sesija prema krajnjoj točki bazena, a ne slušalac koji prihvata peer-ove. Šetnja ispod prati je od četiri vrijednosti koje je bazen izdao do udjela koji je bazen stvarno zabilježio, i ostavlja ostale usluge na hostu na miru. Svaki korak daje odgovor koji možeš uporediti, a ne dojam.
Počni od krajnje točke koju je bazen stvarno izdao
Bazen ti daje četiri vrijednosti koje čine cijeli ugovor: ime hosta ili adresu, port, varijantu protokola i računski niz. Uzmi ih sa kontrolne ploče bazena ili iz poruke dobrodošlice, a ne iz uputstva za drugi bazen. Regionalni šardovi postoje za istu uslugu, pa ime hosta kopirano iz starog vodiča još se može povezati i još može kreditirati račun koji nikad nisi namjeravao koristiti. Kopiraj četiri vrijednosti doslovno u konfiguraciju rudara, jer ponovo otkucan računski niz gubi razdjelnik.
Tok koji usmjeravaš je onaj koji Bitcoin razvojni vodič naziva Stratum sesija : trajna dvosmjerna TCP veza u kojoj bazen dijeli posao, a rudar vraća udjele. To nije isti tok kao peer veze punog čvora ili sinhronizacija lanca novčanika, i upravo njihovo sabijanje u jednu prometnu klasu je mjesto gdje većina zabune počinje. Samo prvo potpada pod ovu politiku.
Gdje bazen nudi TLS, zadrži provjeru servera koju njegova dokumentacija traži. Tunel šifrira skok s tvog stroja do VPN servera i tu završava; ne jamči za onoga ko odgovara na drugoj strani. Zadrži obje provjere, po jednu na svakom kraju, ako želiš da sesija preživi kompromitirani izlaz.
Pričvrsti tunel za proces, a ne za domaćinstvo
Dvije točke pričvršćivanja rade: pokreni VPN klijent unutar mrežnog imenskog prostora koji rudar koristi, ili daj tom prostoru mrežni prolaz koji njegov promet vodi u tunel. Obje postavke stavljaju sesiju na put prije nego je bazen vidi. Uobičajen neuspjeh je klijent na hostu, rudar u kontejneru sa vlastitim mostom i host ruta koju kontejner nikad ne pita. Klijentski prozor izgleda zdravo dok bazen bilježi adresu tvoje kuće.
Provjeri prijenos samog tunela prije nego bilo što ograničiš. Klijent mora doći do svog servera kroz donji sloj, pa politika koja hvata svaki paket hvata i pakete koji bi izgradili tunel. Tada tunel ne može početi i ništa drugo ne izlazi. Odaberi kroz podijeljenu tunelsku funkciju klijenta što ulazi u tunel; ručno uređivanje zadanih ruta je način na koji donji sloj nestaje.
Kad politika stane na mjesto, čitaj tablicu utičnica u imenskom prostoru kojem rudar pripada. Tok prema portu bazena treba sjediti na tunelskom sučelju, a dvije naredbe odgovaraju na to pitanje. Port ispod je primjer; zamijeni ga onim koji je bazen izdao.
sudo nsenter -t "$(pidof cgminer)" -n ss -tnp state established 'dport = :3333'
sudo nsenter -t "$(pidof cgminer)" -n ip route get 203.0.113.10Čitaj rutu i razrješivač iz konteksta samog rudara
Usmjeravanje i razrješavanje imena su po imenskom prostoru, pa provjera pokrenuta u običnoj ljusci opisuje pogrešan stroj kad god je rudar u kontejneru. Prvo uđi u imenski prostor pa pitaj koje sučelje nosi paket na adresu bazena i koji razrješivač odgovara za ime njegovog hosta. Odgovori hosta se ne prenose, a jaz među njima čest je izvor pogrešno položene krivnje.
Imenuj sučelje koje dobiješ: tunel znači da je sesija na predviđenom putu, dok fizička veza znači da je neko pravilo odgovaralo ranije nego što si očekivao. Dužina prefiksa odlučuje prvo, zatim metrika, zatim pravila politike, pa tablica s nekoliko zadanih unosa ne udvostručuje pakete, samo gubi.
Razrješivači ne uspijevaju odvojeno od ruta. Tunel koji prepisuje /etc/resolv.conf može ostaviti imenski prostor da pokazuje na razrješivač dostupan samo iz unutrašnjosti tunela, a to pada prije bilo kojeg TCP rukovanja. Razriješi ime hosta bazena unutar imenskog prostora i uporedi s objavljenom adresom. Ako pretraga istekne ili vrati nešto drugo, popravi razrješavanje prije nego diraš rute.
Drži klijent bazena i slušalac čvora odvojeno
Port 8333 je peer port Bitcoin Core-a, gdje puni čvor sluša dolazne veze; rudar bazena ga nikad ne treba otvorenog, a otvaranje ne popravlja odlazni kvar. Dolazni slušaoci i odlazne sesije su suprotne uloge sa suprotnim pretpostavkama povjerenja. Ništa u konfiguraciji rudara ne veže taj port, pa zatvoren port ne može objasniti nijednu grešku koju prijavljuje. Savjet napisan za dostupnost čvora tako može ostaviti javnu uslugu da radi na hostu koji je trebao samo slati udjele.
Ako jedan stroj uistinu radi oboje, tretiraj svaku ulogu kao vlastitu uslugu s vlastitom odlukom pristupa. Slušalac čvora pripada iza politike koju primjenjuješ na javne usluge, a rudarska sesija pripada izlaznoj politici koja bira tunel. Zabilježi koju ulogu host igra i ukloni pravila druge uloge kad se to promijeni, jer preostalo pravilo dopuštanja nadživi svoj razlog.
Dokaži da je bazen primio posao
Zauzet ventilator i rastući hashrate pokazuju da rudar računa, a ne da je nešto stiglo do bazena. Dokaz je u klijentovim brojačima slanja ili na ploči bazena: prihvaćeni udjeli, odbijeni udjeli i razlog priložen svakom odbijanju. Ti brojevi razdvajaju tri kvara koja izvana izgledaju isto: nema sesije, sesija bez kredita i sesija koja se stalno ponovno povezuje. Pročitaj ih prije nego promijeniš bilo koju konfiguraciju.
Promatraj jedan pokušaj veze s detaljnim zapisom i zabilježi zadnju fazu koja je uspjela. Faza u kojoj se slijed zaustavlja korisnija je od bilo koje pojedinačne poruke oko nje:
| Last stage reached | What it rules out | Probe to run next |
|---|---|---|
| Name lookup completed | Resolver and namespace reachability | ip route get for the returned address |
| TCP connect completed | Route and egress filtering | ss -tnp on the tunnel interface |
| Subscription returned a job | Endpoint or protocol mismatch | Accepted against rejected counts |
Zatim pusti klijent da radi fiksni prozor i prebroji oba ishoda iz njegovog zapisa. Jedan grep po brojaču je dovoljan, a njihovo poređenje na istom prozoru odvaja spor bazen od slomljene rute. Prilagodi rutu mjestu gdje tvoj klijent piše, jer dva brojanja ne zavise od lokacije:
grep -c Accepted /var/log/miner.log
grep -c Rejected /var/log/miner.logAko pravilo zabranjuje izravnu vezu s bazenom svaki put kad tunel padne, izrazi ga kao jasnu blokadu na krajnjoj točki bazena. Klijent koji tiho ponovno pokušava preko fizičke veze nastavit će kopati i nastavit će kršiti to pravilo, a njegov prikaz stanja to neće spomenuti. Testiraj pravilo namjernim rušenjem tunela i potvrdom da port bazena uopće nije dostupan.