LinuxParty

Ratio:  / 0
MaloBueno 

Cjdns implementa una red IPv6 encriptada usando criptografía de clave pública para la asignación de direcciones y una tabla hash distribuida para enrutamiento. Esto proporciona redes de configuración casi cero, y evita muchos de los problemas de seguridad y escalabilidad que afectan a las redes existentes.

El requisito básico para cualquier aplicación de igual a igual es que puedan conectarse entre sí. Esto es imposible hoy en día para la mayoría de las personas que usan IP4 detrás de NAT (como ocurre con la mayoría de enrutadores domésticos). El espacio de direcciones IP4 se agotó hace más de una década. La mayoría de las personas están en "IP4 NAT Jail".

A su dispositivo se le asigna una IP privada, y el enrutador lo traduce a la IP pública. Sin el reenvío de puertos a una IP privada específica, las conexiones TCP entrantes o las sesiones UDP no pueden decir a dónde reenviar y se eliminan. Como resultado, nada puede conectarse a su dispositivo. Debe conectarse a varios servidores públicos para hacer cualquier cosa. Centralización de las fuerzas de la cárcel IP4 NAT.

La solución más simple a este problema es IPv6. Sin embargo, la mayoría de los proveedores de Internet de consumo de EE.UU. y Europa, no ofrecen IPv6 utilizable. Por ejemplo, si el prefijo IPv6 cambia cada pocos días, los dispositivos no son direccionables, excepto a través de un servidor DNS dinámico. Además, en un dispositivo móvil como una computadora portátil, la mayoría de WiFi tampoco ofrece IPv6. Así que no puedes usar Mobile IP6 para tener una dirección estable.

 

Puede solucionar esto utilizando una VPN como OpenVPN (incluida en Fedora) a un servidor centralizado con una IP4 pública, tal vez alquilando un Servidor Privado Virtual. Pero luego los paquetes hacia y desde su dispositivo deben viajar hacia y desde el servidor VPN primero. También puede utilizar un corredor de túnel como he.net.

IPv6 superposición de malla VPN con Cjdns

IPv6 Overlay Mesh VPN con Cjdns

El paquete Cjdns (incluido en Fedora) implementa una malla IPv6 global al conectarse a varios pares en lugar de a un servidor centralizado. Cada nodo tiene un par de claves pública / privada. El IPv6 es el hash SHA512 truncado de la clave pública, evitando la falsificación (spoofing).

  • Los paquetes son de extremo a extremo encriptados; los relés pueden no ser fiables.
  • Los paquetes se enrutan en origen, lo que permite actualizaciones y experimentación sin problemas con algoritmos de enrutamiento. (Esto es seguro gracias a anti-spoofing.)
  • Los datos para el enrutamiento provienen de una tabla de hash distribuida que enumera los pares de cada nodo.
  • Los interlocutores pueden configurarse explícitamente como túneles UDP o configurarse automáticamente en Ethernet a través del protocolo 0xfc00 de capa 2.

Con Cjdns instalado, tiene una dirección IPv6 estable,  “unspoofable” [traducido "no conservable"] (se aplican advertencias criptográficas estándar) que se puede usar con cualquier aplicación compatible con IPv6. Su destinatario también debe usar el protocolo Cjdns, pero esto no es un obstáculo ya que es más fácil instalar Cjdns que convencer a los ISP de los EE. UU. Para que proporcionen IPv6 utilizable.

Instalar Cjdns

Para instalar y habilitar el servicio Cjdns de forma persistente, ejecute estos comandos:

$ sudo dnf install cjdns cjdns-tools cjdns-selinux
$ sudo systemctl enable --now cjdns
$ peerStats
18:03:14:56:c2:1e v20.0000.0000.0000.0019.681v1s7k3af1q2cf09txpw309zdf4q0mn7mtq0wr
544dz98stwr0.k ESTABLISHED in 6kb/s out 15kb/s LOS 8 "outer"

Esto genera un archivo /etc/cjdroute.conf , rellenado previamente con claves y contraseñas aleatorias. Si ya hay un nodo Cjdns en su LAN como arriba, ya está hecho. Pero más probablemente, no hubo salida de peerStats. En ese caso, ahora necesita configurar uno o más túneles UDP. Primero, debes descubrir el puerto UDP aleatorio usado.

$ sudo grep bind /etc/cjdroute.conf
        // Port to bind the admin RPC server to.
        "bind": "127.0.0.1:11234",
                "bind": "0.0.0.0:26041",
                "bind": "[::]:26041",
        // Alternatively bind to just one device
                "bind": "all",

En este ejemplo, el puerto UDP aleatorio es 26041 para IPv6 e IPv4. Tu puerto será diferente. Permitir sesiones entrantes para este puerto.

$ sudo firewall-cmd --zone=public --add-port=26041/udp
success
$ sudo firewall-cmd --runtime-to-permanent
success

Ahora necesitas editar la configuración para agregar un par. Es de esperar que esté familiarizado con las configuraciones que utilizan la sintaxis JSON . Debe agregar una entrada para un par UDP utilizando su editor de texto favorito, como vim . Aquí está uno proporcionado en un VPS. Busque IPv4 y agregue la stanza indicada después de connectTo , dentro de las llaves:

$ sudo vim /etc/cjdroute.conf
"168.235.90.18:26041": {
    "login": "fedora",
    "password":"zvkxv604fqx0zn9trhw5hjxwp3u4v2u",
"publicKey":"lhj54c2xnczfurpw42d0h1bvc4qquclb4dw72q50tc83ucmm9zt0.k",
    "peerName":"nyc.gathman.org"

Para que los cambios surtan efecto, reinicie cjdns.

$ sudo systemctl restart cjdns
$ peerStats
168.235.90.18:26041 v20.0000.0000.0000.0017.lhj54c2xnczfurpw42d0h1bvc4qquclb4dw72q50tc
83ucmm9zt0.k ESTABLISHED in 0kb/s out 0kb/s "nyc.gathman.org" $ ping h.sea.gathman.org PING h.sea.gathman.org(h.sea.gathman.org (fceb:7fc0:c62c:9cd9:2971:e3ff:aee2:6e08)) 56 data bytes 64 bytes from h.sea.gathman.org (fceb:7fc0:c62c:9cd9:2971:e3ff:aee2:6e08): icmp_seq=1 ttl=42 time=87.6 ms

Ahora puede hacer ping a cualquier nodo en la malla global de IPv6. PRECAUCIÓN: Todos esos nodos ahora pueden conectarse directamente a su dispositivo. El firewall predeterminado de Fedora bloqueará todas las conexiones entrantes, pero tenga cuidado con lo que permite. Asegúrese de consultar el paquete README para obtener notas de seguridad adicionales.

Es posible que la contraseña de fedora para este VPS nyc no esté activada indefinidamente, por lo que necesita más compañeros. Consulte una lista de compañeros públicos o con sus amigos de Fedora.

Descentralizar las aplicaciones de correo electrónico.

Puede descentralizar casi cualquier cliente de correo electrónico incluido en Fedora que admita IPv6, como alpine o Thunderbird. Este ejemplo utiliza mailx , un cliente de correo CLI diseñado para teletipos. Esto hace que la configuración y el uso sean fáciles de mostrar.

De manera similar, puede usar cualquiera de los MTA suministrados con Fedora, pero este ejemplo utiliza opensmtpd , ya que es simple, pequeño y seguro. De forma predeterminada, opensmtpd almacena el correo electrónico entrante en / var / spool / mail , que es perfecto para el uso descentralizado personal. Puede, por supuesto, usar cualquier tienda de correo y cliente que prefiera.

$ sudo dnf install mailx opensmtpd
$ cat >~/.mailrc <<EOF
set from="mylogin@[IPv6:fc02:fefe:dead:beef:cafe:babe:1234:5678] (Real Name)"
set smtp=localhost
EOF

Por supuesto, debe utilizar su propio inicio de sesión local, IPv6 y nombre.

Para recibir un correo electrónico, deberá editar la configuración de opensmtpd en /etc/opensmtpd/smtpd.conf . Aquí hay una muestra. (Tenga en cuenta que este artículo puede envolver algunas de las líneas "preformateadas", así que intente este enlace para una configuración de trabajo si es necesario ):

# Este es el archivo de configuración de todo el sistema del servidor smtpd.
# Vea smtpd.conf (5) para más información.

# Para aceptar correo externo, reemplace con: escuchar en todos
listen on fc02:fefe:dead:beef:cafe:babe:1234:5678 hostname "[IPv6:fc02:fefe:dead:beef:cafe:babe:1234:5678]"
listen on localhost

# Si edita el archivo, debe ejecutar "alias de la tabla de actualización smtpctl"
table aliases file:/etc/aliases

# Descomente lo siguiente para aceptar correo externo para el dominio "example.org"
# accept from any for domain "example.org" alias  deliver to mbox
accept from any for domain "[IPv6:fc02:fefe:dead:beef:cafe:babe:1234:5678]" alias  deliver to mbox

accept for local alias  deliver to mbox
accept for any relay hostname "[IPv6:fc02:fefe:dead:beef:cafe:babe:1234:5678]"

Usa tu IP de Cjdns real, por supuesto. Cuando la configuración de opensmtpd esté lista, iníciela para que pueda recibir correos electrónicos. Si su destinatario está fuera de línea, opensmtpd almacena su carta y reintenta periódicamente.

$ sudo systemctl enable --now opensmtpd
$ sudo firewall-cmd --zone=public --add-service=smtp
$ sudo firewall-cmd --runtime-to-permanent

Ahora envíe al autor un correo electrónico dex (descentralizado):

$ mailx -s "Fedora Article" \
  "stuart@[IPv6:fcbc:b27:be6f:94dd:4225:792:c988:8ace]" <<EOF
> Great article!
> EOF

Eso envía un correo electrónico a nyc vps del autor, ¡así que no se sorprenda si recibe una respuesta!

Alpine es un cliente de correo electrónico de consola con todas las funciones. Después de instalarlo y ejecutarlo la primera vez, puede descentralizarlo editando ~/.pinerc y cambiando estos elementos de configuración básicos:

# Sets domain part of From: and local addresses in outgoing.
user-domain=[IPv6:fc02:fefe:dead:beef:cafe:babe:1234:5678]
# List of SMTP servers for sending mail.
smtp-server=localhost

Descentralizar aplicaciones SIP

Pantalla de llamada de Linphone

El uso de Cjdns para sus llamadas de voz le brinda privacidad y autenticación. Puedes usar cualquier cliente SIP que soporte IP6. Este ejemplo utiliza la aplicación linphone incluida en Fedora.

$ sudo dnf install linphone
$ sudo firewall-cmd --zone=public --add-service=sip --add-port=7078/udp --add-port=9078/udp
$ sudo firewall-cmd --runtime-to-permanent

Ejecute linphone en su escritorio y omita el asistente de cuenta. No necesita inicios de sesión y cuentas con igual a igual. Seleccione Opciones , Preferencias y seleccione Usar IPv6 en lugar de IPv4 y Conexión directa a Internet . Ingrese su IPv6 Cjdns en la dirección IP pública . Ahora seleccione Opciones , Salir para salir completamente de linphone.


La versión en Fedora no proporciona una manera de configurar su contacto de igual a igual, por lo que necesita editar el archivo de configuración. Busque la sección [sip] y cambie guess_hostname y póngase en contacto con

$ vim ~/.linphonerc
guess_hostname=0
contact="Real Name" <sip:mylogin@[fc02:fefe:dead:beef:cafe:babe:1234:5678]>

Ahora vuelva a iniciar linphone y agregue un amigo de Fedora con Cjdns a la libreta de direcciones usando la misma sintaxis de dirección. Pruebe primero un mensaje de texto, luego llámelos.

Por supuesto, hay muchos problemas potenciales con el audio y el video en una aplicación VoIP, que no se tratan aquí. Por lo general, sin embargo, linphone simplemente funciona. Si no tiene amigos, puede comunicarse con el autor a través del correo electrónico de dex en el nodo nyc de arriba.

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Encuesta de LinuxParty

¿Hacia dónde se dirigirá tu voto el 28A?

Ciudadanos - 15%
Podemos - 5%
PP - 5%
PSOE - 20%
VOX - 30%
Otros Partidos - 25%

Total votes: 20
The voting for this poll has ended on: 26 Abr 2019 - 00:00

Donar a LinuxParty

La mejor forma de darnos las gracias, es hacer una donación.


Tutorial de Linux

Nos obligan a moslestarte con la obviedad de que este sitio utiliza Cookies. Ver política