1# cjdns
2
3[Русская версия](README_RU.md)
4[Hrvatski](README_HR.md)
5[Svenska](README_SV.md)
6[Ελληνικά](README_GR.md)
7[Deutsch](README_DE.md)
8[繁體中文](README_ZHT.md)
9[Español](README_ES.md)
10[Français](README_FR.md)
11[Português brasileiro](README_PT-BR.md)
12
13#### *Rede Reinventada*
14
15O Cjdns implementa uma rede IPv6 criptografada usando criptografia de chave pública para
16alocação de endereços e uma tabela de hash distribuída para roteamento. Isso fornece
17rede de configuração quase zero e evita muitos dos aspectos de segurança e
18problemas de escalabilidade que afetam as redes existentes.
19
20[![Build Status](https://api.travis-ci.org/cjdelisle/cjdns.svg?branch=master)](https://travis-ci.org/cjdelisle/cjdns)
21[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/387/badge)](https://bestpractices.coreinfrastructure.org/projects/387)
22[![tip for next commit](https://tip4commit.com/projects/941.svg)](https://tip4commit.com/github/cjdelisle/cjdns)
23[![irc](https://img.shields.io/badge/irc%20chat-%23cjdns-blue.svg)](https://kiwiirc.com/client/irc.efnet.org/?nick=visitor|?#cjdns)
24![License](https://img.shields.io/github/license/cjdelisle/cjdns.svg)
25
26## Depoimentos
27
28    23:26 <@jercos> well, cjdns is now officially more reliable than the open
29                    internet for getting to my cheaper VPSes :|
30
31    12:52 < mariner> so i don't know if it's been done before, and i assume it's
32                     obvious, but I think it's neat. Currently on hype from an
33                     airplane
34
35    00:36 < tester> man sites take so long to load on i2p
36    00:36 < tester> i value speed over anonymity any day
37
38    <DuoNoxSol> it's notably more reliable than the normal internet
39
40    09:46 < Kubuxu> I so love cjdns code base
41
42    <whyrusleeping> my internet is way better now.
43    <whyrusleeping> thanks
44    <whyrusleeping> i'm really upset and sad that its better
45    <whyrusleeping> but also quite happy
46
47    21:01 <@grewalsat> this is amazing. with my workpalce speedtest.net results I get around 6+mb speed, and with my cjdns-gate as vpn network I'm getting like 11-15mb download speed in speedtest.net
48    21:01 <@grewalsat> :P
49    21:01 <@grewalsat> plus, access anything! :D
50
51    <davidar> Yeah, I have to admit I sort of avoided hypeirc because of stuff like that
52
53## Comunidade
54
55* [irc://irc.efnet.org/#cjdns][IRC Web]
56* [Hyperboria][] a maior rede de cjdns, em outubro de 2015, havia 2100 nós.
57* [/r/darknetplan][]
58* [#cjdns no Twitter][]
59* [/r/CJDNS](https://www.reddit.com/r/cjdns/)
60
61
62## Documentação
63
64* [Objetivos do projeto](doc/projectGoals.md)
65* [Cjdns Whitepaper](doc/Whitepaper.md)
66* [Cjdns na Wikipedia][]
67
68Configuração avançada:
69
70* [Configure um gateway NAT cjdns para sua LAN](doc/nat-gateway.md)
71* [Instale cjdns no OpenIndiana](doc/open-indiana.md)
72
73Obrigado por seu tempo e interesse,
74
75Os desenvolvedores do cjdns.
76
77--------------------------------------------------------------------------------
78
79## Como instalar o cjdns
80
81Estas instruções são para distribuições Linux baseadas no Debian e macOS. Eles deveriam ser
82informativo o suficiente para uso em outras distribuições - apenas não espere que
83trabalhar literalmente. Se você quer saber qual é a [base do sistema operacional, clique aqui](https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg).
84
85### 0. Instalar dependências
86
87Nas duas plataformas, a instalação do [Node.js] (https://nodejs.org/), embora seja preferível,
88não é estritamente necessário. Se o Node.js estiver indisponível ou uma versão inaceitável,
89ele será baixado e instalado na árvore de origem.
90
91#### Distribuição baseada no Debian:
92
93    sudo apt-get install nodejs git build-essential python2.7
94
95#### Distro baseado no Fedora 22+:
96
97    sudo dnf install nodejs git
98    sudo dnf install @development-tools
99
100#### Distribuição baseada em RHEL (adiciona o repositório EPEL):
101
102    sudo yum localinstall https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
103    sudo yum install nodejs git
104    sudo yum install @development-tools
105
106#### Construção a partir do pacote:
107
108    sudo yum localinstall https://kojipkgs.fedoraproject.org//packages/cjdns/17.4/4.el6/src/cjdns-17.4-4.el6.src.rpm
109
110Se você estiver em um laptop e o suspender ou hibernar, o cjdroute levará alguns
111minutos para fazer café e descobrir o que aconteceu quando acorda. Vocês
112pode acelerar drasticamente isso com:
113
114    systemctl enable cjdns-resume
115
116O serviço de reinicialização reinicia o cjdns quando o sistema acorda do modo de suspensão.
117
118#### Gentoo
119
120    emerge --ask nodejs sys-devel/gcc dev-lang/python:3.4 dev-vcs/git
121
122#### macOS:
123
124Instale com [Homebrew](https://brew.sh/):
125
126    brew install cjdns
127
128Instale com [MacPorts](https://www.macports.org/):
129
130    sudo port install cjdns
131
132#### OpenBSD:
133
134    pkg_add git node gcc gmake bash
135
136Selecione a versão gcc-4.8.1p2 ou mais recente.
137
138#### FreeBSD:
139
140Tudo o que você precisa está disponível pré-compilado nas portas do FreeBSD.
141
142    pkg install gmake node
143
144#### Arch:
145
146Você pode instalar cjdns executando:
147
148    pacman -S cjdns
149
150Se você precisa construir a partir do código-fonte, tudo o que você precisa pode ser instalado assim:
151
152    pacman -S nodejs git base-devel
153
154Como alternativa, você pode instalar via AUR a partir do pacote, `cjdns-git`.
155Após a instalação, o arquivo de configuração está localizado em `/etc/cjdroute.conf`.
156Para iniciar o serviço `cjdns.service`, faça:
157
158    systemctl start cjdns
159
160Para parar:
161
162    systemctl stop cjdns
163
164#### Gentoo:
165
166O cjdns ainda não está no repositório principal do Gentoo, então você terá que usar uma sobreposição.
167A maneira mais fácil é usar o Layman, mas você também pode fazê-lo manualmente.
168
169##### Layman:
170
171Primeiro, você precisa instalar layman.
172
173    emerge layman
174
175Se o layman estiver instalado corretamente, você poderá adicionar a sobreposição
176
177    layman -f
178    layman -a weuxel
179
180Para atualização futura da sobreposição, use
181
182    layman -S
183
184Agora você pode instalar o cjdns
185
186    emerge cjdns
187
188##### À mão:
189
190Você precisará clonar o repositório de sobreposições
191
192    cd /opt
193    git clone https://github.com/Weuxel/portage-weuxel.git
194
195Agora diga ao portage para usar este repositório
196
197    cd /etc/portage/repos.conf/
198
199Crie um arquivo `portage-weuxel.conf` contendo
200
201    [weuxel]
202    location = /opt/portage-weuxel
203    masters = gentoo
204    auto-sync = yes
205
206Agora sincronize
207
208    emerge --sync
209
210E instale cjdns
211
212    emerge cjdns
213
214#### Detecção e reinício automáticos de falhas
215
216Copie o script init openrc de `contrib/openrc` para `/etc/init.d/` e modifique o `CONFFILE` e `command` parâmetro para suas necessidades.
217Em seguida, inicie o cjdns emitindo
218
219    /etc/init.d/cjdns start
220
221Configure o sistema init para iniciar automaticamente cjdns
222
223    rc-update add cjdns default
224
225Copie o script service_restart `contrib/gentoo/service_restart.sh` para qualquer diretório conveniente em
226seu sistema e modifique o endereço de e-mail. Se você não deseja ser notificado, comente toda a linha.
227Agora adicione uma entrada crontab como esta
228
229    # Restart crashed Services
230    * * * * *       root	/path/to/script/service_restart.sh
231
232#### Solus:
233
234Dependências:
235
236    sudo eopkg install nodejs git build-essential system.devel python gcc binutils kernal-headers xorg-server-devel
237
238Siga as etapas abaixo:
239
240* Desculpe por tantas etapas. Um pacote está sendo trabalhado atualmente *
241
242##### 1. Recuperar cjdns do GitHub
243
244Clone o repositório do GitHub e mude para o diretório de origem:
245
246    git clone https://github.com/cjdelisle/cjdns.git cjdns
247    cd cjdns
248
249##### 2. Construir
250
251    ./do
252
253Procure por `Build completed successfully, type ./cjdroute to begin setup.`e, em seguida,
254prossiga abaixo:
255
256--------------------------------------------------------------------------------
257
258## Configuração
259
260Execute cjdroute sem opções para HELP:
261
262    ./cjdroute
263
264### 0. Verifique se você tem as coisas.
265
266Se você estiver no macOS, não se preocupe com esta etapa.
267
268    LANG=C cat /dev/net/tun
269
270Se diz: `cat: /dev/net/tun: File descriptor in bad state` Bom!
271
272Se diz: `cat: /dev/net/tun: No such file or directory`, crie usando:
273
274    sudo mkdir -p /dev/net &&
275    sudo mknod /dev/net/tun c 10 200 &&
276    sudo chmod 0666 /dev/net/tun
277
278Então `cat /dev/net/tun` novamente.
279
280Se diz: `cat: /dev/net/tun: Permission denied` Você provavelmente está usando um VPS
281com base na plataforma de virtualização OpenVZ. Peça ao seu provedor para ativar o
282Dispositivo TUN / TAP - este é o protocolo padrão para que eles saibam exatamente o que você
283necessita.
284
285
286### 1. Gere um novo arquivo de configuração
287
288    ./cjdroute --genconf >> cjdroute.conf
289
290**Proteja seu arquivo conf!**
291
292Um arquivo conf perdido significa que você perdeu sua senha e
293conexões e qualquer pessoa conectada a você não poderá mais se conectar.
294Um arquivo conf comprometido significa que outras pessoas podem se passar por você na rede.
295
296Para gerar um arquivo conf com permissões definidas, para que somente seu usuário possa lê-lo e gravá-lo:
297
298    (umask 077 && ./cjdroute --genconf > cjdroute.conf)
299
300
301### 2. Encontre um amigo
302
303Para entrar em uma rede existente (por exemplo, Hyperboria), você precisa se conectar a alguém que já esteja na rede. Isso é necessário por vários motivos:
304
3051. Ajuda a evitar abusos, porque as pessoas más terão menos probabilidade de abusar de um sistema depois de terem, em um ato de bondade humana, acesso a esse sistema.
3062. Não se destina a sobrepor a Internet antiga, mas a substituí-la. No momento oportuno, cada conexão será substituída por um fio, um cabo de fibra ótica ou uma conexão de rede sem fio.
3073. Em qualquer caso de desacordo, haverá uma "cadeia de amigos" ligando as pessoas envolvidas, para que já haja uma base para chegar a uma resolução.
308
309Para encontrar um amigo, vá lá e participe de nossa [comunidade] (# comunidade). Além disso, dê uma olhada no [Mapa da Hyperboria] (https://www.fc00.org/) para encontrar colegas perto de você.
310
311Você também pode usar a lista geograficamente variada de credenciais de emparelhamento público para ingressar no Hyperboria em [hyperboria / peers] (https://github.com/hyperboria/peers).
312
313### 3. Conecte seu nó ao nó do seu amigo
314
315**Para iniciar a conexão OUTbound**
316
317No seu arquivo conf, você verá:
318
319``` javascript
320// Nodes to connect to.
321"connectTo":
322{
323    // Add connection credentials here to join the network
324    // Ask somebody who is already connected.
325}
326```
327
328Um arquivo conf com vários nós amigos, configuração OUTbound, deve se parecer com:
329
330``` javascript
331// Nodes to connect to.
332"connectTo":
333{
334    //friend_1 (IPv4: 0.1.2.3; IPv6 fcaa:5bac:66e4:713:cb00:e446:c317:fc39)
335    "0.1.2.3:45678":
336    {
337        "login": "k.alexander"
338        "password": "thisIsNotARealConnection_1",
339        "publicKey": "thisIsJustForAnExampleDoNotUseThisInYourConfFile_1.k"
340    },
341
342    //friend_2 (IPv4: 5.1.2.3; IPv6 fcbb:5bac:66e4:713:cb00:e446:c317:fc39)
343    "5.1.2.3:5678":
344    {
345        "login": "k.alexander"
346        "password": "thisIsNotARealConnection_2",
347        "publicKey": "thisIsJustForAnExampleDoNotUseThisInYourConfFile_2.k"
348    }
349}
350```
351
352Você pode adicionar quantas conexões desejar ao atributo `connectTo`,
353seguindo a sintaxe JSON.
354
355
356**Para permitir que seu amigo inicie a conexão INbound**
357
358No seu arquivo conf, você verá:
359
360``` javascript
361"authorizedPasswords":
362[
363    // A unique string which is known to the client and server.
364    {"password": "password001", "login": "default-login"}
365
366    // More passwords should look like this.
367    // {"password": "password002", "login": "my-second-peer"}
368    // {"password": "password003", "login": "my-third-peer}
369    // {"password": "password004", "login": "my-fourth-peer"}
370    ...
371
372    // "your.external.ip.goes.here:45678":{"login": "default-login", "password": "password001","publicKey":thisisauniqueKEY_001.k"}
373
374],
375```
376
377Um arquivo conf com vários nós amigos, configuração INbound, deve se parecer com:
378``` javascript
379"authorizedPasswords":
380[
381    // A unique string which is known to the client and server.
382    {"password": "thisisauniquestring_001", "user": "k.alexander"}
383
384    // More passwords should look like this.
385    //William Jevons (IPv4: 0.1.2.3; IPv6 fcaa:5bac:66e4:713:cb00:e446:c317:fc39)
386    {"password": "thisisauniquestring_002", "user": "William Jevons"}
387    //Marilyn Patel (IPv4: 5.1.2.3; IPv6 fcbb:5bac:66e4:713:cb00:e446:c317:fc39)
388    {"password": "thisisauniquestring_003", "user": "Marilyn Patel"}
389    // {"password": "thisisauniquestring_004"}
390    ...
391
392    // "your.external.ip.goes.here:45678":{"password": "thisisauniquestring_001","publicKey":thisisauniqueKEY_001.k"}
393],
394```
395
396
397Você precisa fornecer a William Jevons (que está fazendo a conexão de entrada) os seguintes 4 itens:
398
3991. Seu IPv4 externo
4002. A porta encontrada no seu arquivo conf aqui:
401
402    `// Bind to this port.
403    "bind": "0.0.0.0:yourportnumberishere",`
404
4053. A senha exclusiva deles que você descomentou ou criou: `"password": "thisisauniquestring_002"`
4064. Sua chave pública: `"publicKey": "thisisauniqueKEY_001.k"`
4075. O nome de usuário dele: "William Jevons"
408
409Suas credenciais de login terão a seguinte aparência (com seu IPv4 e porta):
410
411```javascript
412"1.2.3.4:56789": {
413    "login": "William Jevons",
414    "password": "thisisauniquestring_002",
415    "publicKey": "thisIsJustForAnExampleDoNotUseThisInYourConfFile_1.k"
416}
417```
418
419Observe que você e seu amigo podem * iniciar * uma conexão de saída (de VOCÊ -> AMIGO) ou de entrada (de AMIGO -> VOCÊ), mas o tráfego flui para os dois lados quando a conexão é estabelecida.
420
421Consulte [doc/configure.md](doc/configure.md) para obter mais detalhes sobre configuração,
422incluindo como fazer pares com outros nós cjdns por Ethernet e Wi-Fi.
423
424
425### 4. Proteja seu sistema - verifique se há serviços de escuta
426
427Depois que o nó estiver em execução, você será um host IPv6 recém-criado. Seu sistema operacional pode reconfigurar automaticamente os serviços de rede para usar esse novo endereço.
428Se não é isso que você pretende, verifique se não está
429oferecendo mais serviços do que você pretendia. ;)
430
431Consulte [doc/network-services.md](doc/network-services.md) para obter instruções.
432
433
434### 5. Iniciar!
435
436    sudo ./cjdroute < cjdroute.conf
437
438Se você deseja que seus logs sejam gravados em um arquivo:
439
440    sudo ./cjdroute < cjdroute.conf > cjdroute.log
441
442Para parar cjdns:
443
444    sudo killall cjdroute
445
446Se você estiver tendo problemas, use `killall cjdroute` para retornar à sanidade. Use
447`pgrep cjdroute` ou `top` para ver se está rodando.
448
449**NOTA!**
450
451Isso inicia o cjdns como usuário root, para que ele possa configurar seu sistema sem se preocupar com permissões. Para iniciar o cjdns como um usuário não root, consulte
452[doc/non-root-user.md](doc/non-root-user.md).
453
454
455### 6. Entre no IRC
456
457Bem-vindo à rede! Agora você é um administrador de rede. Existem responsabilidades inerentes ao administrador da rede, que incluem a disponibilidade, caso haja algo errado com o seu equipamento. Você deve permanecer no [IRC](#community) para que as pessoas possam alcançá-lo.
458
459## Interface de administração
460
461Quando o cjdroute estiver em funcionamento, a interface administrativa estará disponível em
462`udp://localhost:11234` (isso pode ser alterado no arquivo de configuração `cjdroute.conf`). Consulte [doc/admin-api.md](doc/admin-api.md) para mais
463informações sobre a interface de administração. Existem várias ferramentas no `contrib/`
464que pode interagir com ele.
465
466Você pode acessar a API do administrador com:
467
468* o **Python library**; consulte [aqui](contrib/python/README.md).
469* o **Perl library**, mantido por Mikey; consulte [aqui](contrib/perl/CJDNS/README).
470
471
472## Relatar problemas
4731. Não reporte neste repositório, em vez disso, https://github.com/hyperboria/bugs/issues
4742. Entre no IRC e converse com alguém
4753. O que vai acontecer é
476  * Alguém quer consertar
477  * Você quer consertá-lo
478  * Ninguém se importa com isso e será esquecido por um tempo e talvez alguém o acerte mais tarde
479  e conserte-o, caso contrário ele será apagado em uma refatoração
480  * Ninguém pode consertá-lo no momento, mas é considerado digno de lembrança, porque possui ótimas
481  importante para a maneira como o código é desenvolvido, nesse caso, ele precisa ser explicado em detalhes técnicos.
482  termos por alguém com forte familiaridade com o código. Eles farão uma solicitação de recebimento para o
483  diretório docs/bugs.
484
485### Segurança
486Os problemas de segurança devem ser relatados no IRC da mesma forma que outros bugs. Não temos um fechado
487grupo de pessoas com conhecimentos especiais, o que significa que o método padrão de relatório de segurança é
488transparência completa.
489
490Consulte: [security_specification.md](https://github.com/cjdelisle/cjdns/blob/master/doc/security_specification.md) para ver se um possível problema de segurança é realmente um problema de segurança.
491
492Naquela época do ano novamente ... Hora de alguns projetos de código aberto!
493[![Hacktoberfest](https://img.shields.io/badge/Open%20Source-Hacktoberfest-orange.svg)](https://hacktoberfest.digitalocean.com/)
494
495[IRC Web]: http://chat.efnet.org/irc.cgi?chan=%23cjdns
496[Hyperboria]: https://hyperboria.net
497[/r/darknetplan]: https://www.reddit.com/r/darknetplan
498[#cjdns no Twitter]: https://twitter.com/hashtag/cjdns
499[Hyperboria Map]: https://www.fc00.org/
500[Buildbots]: https://buildbot.meshwith.me/cjdns/waterfall
501
502[Cjdns na Wikipedia]: https://en.wikipedia.org/wiki/Cjdns
503[Distributed Hash Table]: https://en.wikipedia.org/wiki/Distributed_hash_table
504[Beyond Pain]: https://lists.torproject.org/pipermail/tor-dev/2012-October/004063.html
505[Kademlia]: https://en.wikipedia.org/wiki/Kademlia
506
507[Tor]: https://www.torproject.org
508[I2P]: https://geti2p.net/en/
509[Freenet]: https://freenetproject.org
510