Miningo programinė įranga laiko vieną lizdą atidarytą vienam adresui, ir kiekvienas klausimas apie tunelį, maršrutą ir įskaitytą darbą kabo ant to lizdo. Tas lizdas yra išeinanti kliento sesija į pool galinį tašką, o ne klausytojas, priimantis peer'us. Žemiau pateikta eiga veda nuo keturių reikšmių, kurias išdavė pool, iki dalies, kurią pool tikrai užregistravo, ir nepaliečia kitų hosto paslaugų. Kiekvienas žingsnis duoda atsakymą, kurį galima palyginti, o ne įspūdį.

Pradėkite nuo galinio taško, kurį pool tikrai išdavė

Pool duoda jums keturias reikšmes, sudarančias visą sutartį: hosto vardą arba adresą, prievadą, protokolo variantą ir paskyros eilutę. Paimkite jas iš pool skydelio arba pasveikinimo žinutės, o ne iš mokymo kito pool atveju. Tam pačiam servisui egzistuoja regioniniai šardai, todėl hosto vardas, nukopijuotas iš seno vadovo, vis dar gali prisijungti ir vis dar įskaityti paskyrą, kurios niekada nenorėjote naudoti. Nukopijuokite keturias reikšmes pažodžiui į minerio konfigūraciją, nes perrašyta paskyros eilutė praranda skirtuką.

Srautas, kurį maršrutizuojate, yra tas, kurį Bitcoin kūrėjo vadovas vadina Stratum sesija: nuolatinis dvikryptis TCP ryšys, kuriame pool paskirsto darbą, o mineris grąžina dalis. Tai ne tas pats srautas kaip pilno mazgo peer ryšiai ar piniginės grandinės sinchronizavimas, ir būtent jų sujungimas į vieną srauto klasę yra vieta, kur prasideda didžioji dalis sumaišties. Tik pirmasis priklauso šiai politikai.

Kur pool siūlo TLS, palikite serverio patikrą, kurios reikalauja jo dokumentacija. Tunelis šifruoja šuolį nuo jūsų mašinos iki VPN serverio ir ten baigiasi; jis negarantuoja už tai, kas atsako kitoje pusėje. Palikite abi patikras, po vieną kiekviename gale, jei norite, kad sesija išgyventų kompromituotą išėjimą.

Pritvirtinkite tunelį prie proceso, o ne prie namų ūkio

Du tvirtinimo taškai veikia: paleiskite VPN klientą tinklo vardų erdvėje, kurią naudoja mineris, arba duokite tai vardų erdvei šliuzą, kuris neša jos srautą į tunelį. Abi išdėstymo schemos padeda sesiją į kelią prieš pool jį pamatydamas. Įprasta nesėkmė yra klientas hoste, mineris konteineryje su savo tiltu ir hosto maršrutas, kurio konteineris niekada neklausia. Kliento langas atrodo sveikas, kol pool registruoja jūsų namų adresą.

Patikrinkite paties tunelio transportą, prieš ką nors apibrėždami. Klientas turi pasiekti savo serverį per apatinį sluoksnį, todėl politika, kuri pagauna kiekvieną paketą, pagauna ir paketus, kurie pastatytų tunelį. Tada tunelis negali paleisti, ir niekas kitas taip pat neišeina. Kliento atskiro tunelio funkcija pasirinkite, kas patenka į tunelį; numatytųjų maršrutų keitimas rankomis yra būdas, kuriuo apatinis sluoksnis dingsta.

Kai politika yra vietoje, perskaitykite lizdų lentelę vardų erdvėje, kuriai priklauso mineris. Srautas į pool prievadą turėtų būti tunelio sąsajoje, ir du komandos atsako į šį klausimą. Žemiau esantis prievadas yra pavyzdys; pakeiskite jį tuo, kurį išdavė pool.

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

Skaitykite maršrutą ir resolverį iš paties minerio konteksto

Maršrutizavimas ir vardų sprendimas galioja kiekvienai vardų erdvei, todėl įprastame apvalkale paleista patikra aprašo ne tą mašiną, kai mineris yra konteineryje. Pirmiausia įeikite į vardų erdvę, tada paklauskite, kuri sąsaja neštų paketą į pool adresą ir kuris resolveris atsakytų už jo hosto vardą. Hosto atsakymai neperkeliami, ir tarpas tarp jų yra dažnas neteisingai nukreiptos kaltės šaltinis.

Įvardykite sąsają, kurią gaunate: tunelis reiškia, kad sesija yra numatytame kelyje, o fizinė jungtis reiškia, kad taisyklė suveikė anksčiau, nei tikėjotės. Prefiksų ilgis sprendžia pirmas, paskui metrika, paskui politikos taisyklės, todėl lentelė su keliomis numatytosiomis eilutėmis nedubliuoja paketų, ji tiesiog pralaimi.

Resolveriai nepavyksta atskirai nuo maršrutų. Tunelis, kuris perrašo /etc/resolv.conf, gali palikti vardų erdvę nukreiptą į resolverį, pasiekiamą tik iš tunelio vidaus, o tai nepavyksta prieš bet kokį TCP rankos paspaudimą. Išspręskite pool hosto vardą vardų erdvės viduje ir palyginkite su paskelbtu adresu. Jei užklausa baigiasi laiku arba grąžina ką nors kita, sutvarkykite sprendimą prieš liesdami maršrutus.

Laikykite atskirai pool klientą ir mazgo klausytoją

Prievadas 8333 yra Bitcoin Core peer prievadas, kuriame pilnas mazgas klausosi įeinančių ryšių; pool mineriui jo niekada nereikia atidaryto, ir jo atidarymas nesutvarko išeinančios gedimo. Įeinantys klausytojai ir išeinančios sesijos yra priešingi vaidmenys su priešingomis pasitikėjimo prielaidomis. Niekas minerio konfigūracijoje nesieja to prievado, todėl uždarytas prievadas negali paaiškinti jokios klaidos, kurią jis praneša. Patarimas, parašytas mazgo pasiekiamumui, todėl gali palikti viešą paslaugą veikiančią hoste, kuris turėjo tik siųsti dalis.

Jei viena mašina tikrai daro abu, traktuokite kiekvieną vaidmenį kaip atskirą paslaugą su savo prieigos sprendimu. Mazgo klausytojas priklauso už politikos, kurią taikote viešoms paslaugoms, o minerio sesija priklauso išėjimo politikai, kuri renkasi tunelį. Užrašykite, kokį vaidmenį atlieka hostas, ir pašalinkite kito vaidmens taisykles, kai tai pasikeičia, nes likusi leidimo taisyklė pergyvena savo priežastį.

Įrodykite, kad pool gavo darbą

Užimtas ventiliatorius ir augantis hashrate rodo, kad mineris skaičiuoja, o ne kad kažkas pasiekė pool. Įrodymas yra kliento siuntimo skaitikliuose arba pool skydelyje: priimtos dalys, atmestos dalys ir priežastis, pridedama prie kiekvieno atmetimo. Tie skaičiai atskiria tris gedimus, kurie iš išorės atrodo vienodai: nėra sesijos, sesija be įskaitymo ir sesija, kuri nuolat jungiasi iš naujo. Perskaitykite juos prieš keisdami bet kokią konfigūraciją.

Stebėkite vieną prisijungimo bandymą su išsamiu žurnalu ir pažymėkite paskutinį sėkmingą etapą. Etapas, kuriame seka sustoja, naudingesnis už bet kurią atskirą žinutę aplink jį:

Last stage reachedWhat it rules outProbe to run next
Name lookup completedResolver and namespace reachabilityip route get for the returned address
TCP connect completedRoute and egress filteringss -tnp on the tunnel interface
Subscription returned a jobEndpoint or protocol mismatchAccepted against rejected counts

Tada leiskite klientui veikti fiksuotą langą ir suskaičiuokite abu rezultatus iš jo žurnalo. Vieno grep kiekvienam skaitikliui pakanka, ir jų palyginimas tame pačiame lange atskiria lėtą pool nuo sulaužyto kelio. Pritaikykite kelią ten, kur rašo jūsų klientas, nes du skaičiavimai nepriklauso nuo vietos:

grep -c Accepted /var/log/miner.log
grep -c Rejected /var/log/miner.log

Jei taisyklė draudžia tiesioginį pool ryšį kiekvieną kartą, kai tunelis krinta, išreikškite tai kaip aiškų blokavimą pool galiniame taške. Klientas, kuris tyliai bando iš naujo per fizinę jungtį, toliau kasys ir toliau pažeis tą taisyklę, o jo būsenos rodinys to nepaminės. Išbandykite taisyklę sąmoningai numesdami tunelį ir patvirtindami, kad pool prievadas visiškai nepasiekiamas.

Susiję straipsniai