Estoy trabajando en la red Ethereum privada. Ejecuto el nodo de arranque y la Ethereum Block Explorer
aplicación de Ethereum ( https://github.com/etherparty/explorer (un explorador de bloques ligero de ethereum)) en el servidor principal.
Dentro del servidor principal donde ejecuto el nodo Ethereum, en el navegador podría conectarme Ethereum Block Explorer
desde localhost:8000
:
Pero desde un nodo externo en el navegador, cuando intento conectarme desde la dirección IP del servidor principal, < ip-address >:8000
me encuentro con el siguiente mensaje de error. La razón principal de este mensaje de error fue " web3
no está conectado"
var eth_node_url = 'http://localhost:8545'; // TODO: remote URL
web3.setProvider(new web3.providers.HttpProvider(eth_node_url));
if(!web3.isConnected()) {
$('#connectwarning').modal({keyboard:false,backdrop:'static'}) //enters here
$('#connectwarning').modal('show') //enters here
}
En el nodo externo, si ejecuto geth
una aplicación en segundo plano que ya está conectada a la red privada de Ethereum, resuelve el problema.
[P] En el nodo externo sin ejecutar la geth
aplicación en segundo plano, ¿es posible Ethereum Block Explorer
conectarse a la geth
aplicación que ya se está ejecutando en el servidor principal? En caso afirmativo, ¿existe un enfoque seguro como ejecutarlo geth
en --rpcaddr="localhost" --rpccorsdomain="*"
el servidor principal?
Gracias por su valioso tiempo y ayuda.
Nota:
=> La forma en que ejecuto el Nodo Ethereum:
geth --port 3000 --networkid 23422 --nodiscover --datadir="/home/MyEthereumEbloc"
--rpc --rpcaddr="localhost" --rpccorsdomain="*" --maxpeers=6 --ipcapi
"admin,eth,web3" --autodag
=> Para instalar Ethereum Block Explorer
, he seguido la guía de instalación en https://github.com/etherparty/explorer .
[~$] git clone https://github.com/etherparty/explorer [~$] cd explorer [~/explorer$] npm start > EthereumExplorer@0.1.0 prestart /home/netlab/explorer > npm install > EthereumExplorer@0.1.0 postinstall /home/netlab/explorer > bower install > EthereumExplorer@0.1.0 start /home/netlab/explorer > http-server ./app -a 79.123.177.145 -p 8000 -c-1 Starting up http-server, serving ./app on port: 8000
=> Dentro del archivo package.json que se encuentra en la carpeta del explorador: la aplicación se inició de la siguiente manera:
"start": "http-server ./app -a localhost -p 8000 -c-1"
Tenga en cuenta que cuando cambié localhost a la dirección IP del nodo, no ayudó:
"start": "http-server ./app -a <ip-address> -p 8000 -c-1"
¡¡Tenga en cuenta que esta solución solo funciona si el nodo externo y el servidor principal están en el mismo dominio de red!!
Enfoque inseguro:
El problema era: cómo empiezo mi RPC.
Ejecutar geth
en el servidor principal de la siguiente manera:
> admin.startRPC("0.0.0.0", 8545, "*")
true
o
--rpc --rpcport 8545 --rpcaddr 0.0.0.0 --rpccorsdomain "*" --rpcapi "eth,web3"
Actualice explorer/app/app.js de la siguiente manera:
//var eth_node_url = 'http://localhost:8545'; //commented out.
var eth_node_url = 'http://<ip-address of the main server>:8545';
web3.setProvider(new web3.providers.HttpProvider(eth_node_url));
He utilizado Docker
para superar este problema. Instalación de Docker . De esta respuesta a esta pregunta ¿Cómo puedo exponer el servidor RPC de Geth a conexiones externas? , lo he usado Docker
como servidor de aplicaciones, que en realidad se ejecuta dentro de mi Ethereum Node
.
He seguido la instalación de la Ethereum Block Explorer
aplicación.
Para superar el siguiente problema (curl: (56) Recv failure: Connection reset by peer)
dentro de Docker, reemplacé la palabra clave "localhost" que existe en la carpeta del explorador con "0.0.0.0": https://stackoverflow.com/a/27818259/2402577
Suponga que geth
se ejecuta en remotehost.remotedomain.tld
[~] git clone https://github.com/etherparty/explorer
[~] cd explorer
[~] dir="$PWD";
[~] find $dir -type f -exec sed -i 's/localhost/0.0.0.0/g' {} +
[~] emacs -nw Dockerfile
Pegue las siguientes líneas en Dockerfile.
FROM node:boron
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# Bundle app source
COPY . /usr/src/app
EXPOSE 8000
CMD [ "npm", "start" ]
-
[~] sudo docker build -t <your username>/node-web-app
[~] sudo docker run -p 3002:8000 -d <your username>/node-web-app
Esta parte no es necesaria:
[~] sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26c46398b20d yo/node-web-app "npm start" 7 seconds ago Up 5 seconds 0.0.0.0:3002->8000/tcp pedantic_knuth
[~] sudo docker exec -it 26c46398b20d /bin/bash
root@26c46398b20d:/usr/src/app# ssh -f -N -L 8545:localhost:8545 remoteUser@remotehost.remotedomain.tld
Ahora puede abrir la Ethereum Block Explorer
aplicación desde un nodo externo utilizando host's_IP:port.
remotehost.remotedomain.tld:3002
Enlace útil para compilar nodejs
y docker
: https://nodejs.org/en/docs/guides/nodejs-docker-webapp/
Si el nodo externo es su nodo de confianza, puede intentar usar el túnel SSH. Ejecute ssh -L 8545:localhost:8545 nombredeusuario@dirección-ip-del-servidor-principal en el nodo remoto y se abrirá el puerto 8545 en el nodo remoto que se reenviará de forma segura (encriptada) a la dirección-ip-del-servidor-principal:8545. Todas las conexiones al nodo remoto: 8545 se interpretarán como conexiones a la dirección IP del servidor principal: 8545 desde localhost.
Para simplificar el proceso de conexión, puede agregar la clave pública del nodo remoto al archivo ~/.ssh/authorized_keys del servidor principal como se describe aquí https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh- llaves--2
¡¡¡ESTE ENFOQUE ES INSEGURO!!! Si solo desea tener abierto el puerto rpc en su servidor principal, también puede usar ssh para ello. Ejecute ssh -L main-server-external-ip-address:port-to-forward-rpc:localhost:8545 username@localhost en su servidor principal, y obtendrá el puerto abierto port -to-forward-rpc en el servidor principal -dirección IP externa a la que se puede acceder desde cualquier lugar. Todas las conexiones a este puerto serán interpretadas por geth como conexiones de localhost. Después de eso puedes usar
var eth_node_url = 'http://main-server-external-ip-address:port-to-forward-rpc '; web3.setProvider(new web3.providers.HttpProvider(eth_node_url));
sin ninguna limitación de acceso a dominio\red
FrenchieiSverige
Ethereum Block Explorer
. Sé que esta es una solución indirecta, pero ¿qué hay de usar su propia VPN y dejar que piensen que están en la misma red? ¿O tal vez solo un túnel ssh puede ser suficiente?alper
geth
enETH
mi máquina local y todavía puedo ver toda la información en el sitio web.FrenchieiSverige