Мајнинг пул преко VPN-а: држати сесију на правом путу
Пул-мајнер отвара једну излазну Stratum сесију, а не peer порт. Ставите тунел под тај процес и прочитајте руту и резолвер из његовог namespace-а.
Мајнинг софтвер држи један сокет отворен ка једној адреси, и свако питање о тунелу, рути и кредитираном раду виси на том сокету. Тај сокет је излазна клијентска сесија ка крајњој тачки пула, а не слушалац који прихвата peer-ове. Шетња испод га прати од четири вредности које је пул издао до дела који је пул заиста књижио, и оставља остале услуге хоста на миру. Сваки корак даје одговор који можете да упоредите, а не утисак.
Почните од крајње тачке коју је пул заиста издао
Пул вам даје четири вредности које чине цео уговор: име хоста или адресу, порт, варијанту протокола и низ за налог. Узмите их са табле пула или из поруке добродошлице, не из упутства за други пул. За исту услугу постоје регионални шардови, тако да име хоста копирано из старог водича још може да се повеже и још може да кредитира налог који никада нисте хтели да користите. Копирајте четири вредности дословно у конфигурацију мајнера, јер препишан низ за налог губи раздвајач.
Ток који рутирате је онај који водич за програмере Bitcoin-а назива Stratum сесијом: стална двосмерна TCP веза у којој пул расподељује посао, а мајнер враћа делове. То није исти ток као peer везе пуног чвора или синхронизација ланца новчаника, и управо преклапање њих у једну класу саобраћаја је место где почиње већина забуне. Само први припада под ову политику.
Где пул нуди TLS, задржите проверу сервера коју његова документација захтева. Тунел шифрује хоп од ваше машине до VPN сервера и завршава се тамо; он не гарантује за онога ко одговара са друге стране. Задржите обе провере, по једну на сваком крају, ако желите да сесија преживи компромитован излаз.
Прикачите тунел на процес, не на домаћинства
Две тачке прикачивања раде: пустите VPN клијента у мрежном namespace-у који мајнер користи, или дајте том namespace-у гејтвеј који носи његов саобраћај у тунел. Обе поставке стављају сесију на пут пре него што је пул види. Уобичајени неуспех је клијент на хосту, мајнер у контејнеру са сопственим мостом и рута хоста коју контејнер никада не пита. Прозор клијента изгледа здраво док пул бележи вашу кућну адресу.
Проверите сопствени транспорт тунела пре него што било шта ограничите. Клијент мора да стигне до свог сервера преко подлоге, па политика која пресреће сваки пакет пресреће и пакете који би изградили тунел. Тада тунел не може да стартује и ништа друго не излази. Изаберите функцијом подељеног тунела клијента шта улази у тунел; ручно уређивање подразумеваних рута је начин на који подлога нестаје.
Када је политика на месту, прочитајте табелу сокета у namespace-у коме припада мајнер. Ток ка порту пула треба да стоји на интерфејсу тунела, и две команде одговарају на то питање. Порт испод је пример; замените га оним који је пул издао.
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Читајте руту и резолвер из сопственог контекста мајнера
Рутирање и резолуција имена важе по namespace-у, тако да провера покренута у обичној љусци описује погрешну машину када је мајнер у контејнеру. Уђите прво у namespace и затим питајте који би интерфејс носио пакет до адресе пула и који би резолвер одговорио за његово име хоста. Одговори хоста се не преносе, и јаз између њих је чест извор погрешно усмерене кривице.
Именујте интерфејс који добијате: тунел значи да је сесија на предвиђеном путу, док физичка веза значи да се правило поклопило раније него што сте очекивали. Дужина префикса одлучује прва, затим метрика, затим правила политике, тако да табела са неколико подразумеваних записа не дуплира пакете, само губи.
Резолвери отказују одвојено од рута. Тунел који преписује /etc/resolv.conf може да остави namespace да показује на резолвер доступан само из унутрашњости тунела, што отказује пре било каквог TCP руковање. Решите име хоста пула унутар namespace-а и упоредите га са објављеном адресом. Ако захтев истекне или врати нешто друго, поправите резолуцију пре него што дотакнете руте.
Држите одвојено клијента пула и слушаоца чвора
Порт 8333 је peer порт Bitcoin Core-а, где пун чвор слуша улазне везе; пул-мајнеру никада не треба отворен, а његово отварање не поправља излазни квар. Улазни слушаоци и излазне сесије су супротне улоге са супротним претпоставкама поверења. Ништа у конфигурацији мајнера не везује тај порт, тако да затворен порт не може да објасни никакву грешку коју пријављује. Савет написан за доступност чвора може зато да остави јавну услугу да ради на хосту који је требало само да шаље делове.
Ако једна машина заиста ради обоје, третирајте сваку улогу као одвојену услугу са сопственом одлуком о приступу. Слушалац чвора припада иза политике коју примењујете на јавне услуге, а сесија мајнера припада излазној политици која бира тунел. Забележите какву улогу хост игра и уклоните правила друге улоге када се то промени, јер преостало правило дозволе надживљава свој разлог.
Докажите да је пул примио посао
Заузет вентилатор и растући hashrate показују да мајнер рачуна, не да је нешто стигло до пула. Доказ је у бројачима слања клијента или на табли пула: прихваћени делови, одбијени делови и разлог приложен уз свако одбијање. Ти бројеви раздвајају три квара која споља изгледају исто: нема сесије, сесија без кредита и сесија која стално поново повезује. Прочитајте их пре него што промените било какву конфигурацију.
Посматрајте један покушај повезивања са детаљним логовањем и забележите последњу фазу која је успела. Фаза у којој се секвенца зауставља кориснија је од било које појединачне поруке око ње:
| 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 |
Затим пустите клијента да ради фиксни прозор и пребројте оба исхода из његовог лога. Један grep на бројач је довољан, и њихово поређење у истом прозору раздваја спор пул од сломљеног пута. Прилагодите путању месту где ваш клијент пише, јер два бројања не зависе од локације:
grep -c Accepted /var/log/miner.log
grep -c Rejected /var/log/miner.logАко правило забрањује директну везу са пулом сваки пут када тунел падне, изразите га као експлицитно блокирање крајње тачке пула. Клијент који тихо поново покушава преко физичке везе наставиће да копа и наставиће да крши то правило, а његов приказ стања то неће поменути. Тестирајте правило тако што ћете намерно оборити тунел и потврдити да порт пула уопште није доступан.