去中心化普通 Fedora 带有 Cjdns 的应用程序

你是否担心一个 少数控制网络的大公司? 不喜欢 Facebook 和 twitter 等集中社交媒体网站上的审查? 你需要去中心化! 互联网旨在去中心化。 许多常见活动,从社交媒体到电子邮件再到语音通话,实际上并不需要集中式服务。

任何对等应用程序的基本要求是对等方能够相互联系。 今天对于大多数在 NAT 后面使用 IP4 的人来说这是不可能的(就像大多数家用路由器一样)。 十多年前,IP4 地址空间已经耗尽。 大多数人都在“IP4 NAT 监狱”中。

您的设备被分配了一个私有 IP,并由路由器转换为公共 IP。 如果没有将端口转发到特定的私有 IP,传入的 TCP 连接或 UDP 会话无法确定转发到哪里,并被丢弃。 因此,没有任何东西可以连接到您的设备。 您必须连接到各种公共服务器才能执行任何操作。 IP4 NAT 监狱强制集中化。

这个问题最简单的解决方案是 IPv6。 但是,大多数美国消费者互联网提供商不提供可用的 IPv6。 例如,如果 IPv6 前缀每隔几天更改一次,则除非通过动态 DNS 服务器,否则无法对设备进行寻址。 此外,在笔记本电脑等移动设备上,大多数 WiFi 也不提供 IPv6。 所以你不能使用 移动IP6 有一个稳定的地址。

您可以使用像 OpenVPN 这样的 VPN(包含在 Fedora) 到具有公共 IP4 的中央服务器——也许是您通过租用虚拟个人服务器自己提供的。 但是,进出您设备的数据包必须首先往返于 VPN 服务器。 您还可以使用隧道代理,如 网络.

如果您和您的同行已经拥有稳定的 IPv6 地址,您可以将这些地址用于要展示的示例应用程序。 但大多数人需要使用其他东西。

DNS 本质上也是一个集中控制的服务,因此本文的两个示例应用程序避免使用 DNS。 电子邮件和 SIP 应用程序具有同样有效的内置地址簿。 将您的稳定 IPv6 地址视为“电话号码”。

带有 Cjdns 的 IPv6 Overlay Mesh VPN

Cjdns 包(包含在 Fedora) 实现一个 全球 IPv6 网格 通过连接到多个对等点而不是中央服务器。 每个节点都有一个公钥/私钥对。 IPv6 是公钥的截断 SHA512 散列,可防止欺骗。

  • 数据包是端到端加密的——中继可能是不可信的。
  • 数据包是源路由的,允许无缝升级和试验路由算法。 (由于防欺骗,这是安全的。)
  • 路由数据来自 分布式哈希表 列出每个节点的对等点。
  • 对等点可以明确配置为 UDP 隧道,或通过第 2 层协议 0xfc00 在以太网上自动配置。

安装 Cjdns 后,您将获得稳定的“不可欺骗的”(适用标准加密警告)可用于任何 IPv6 就绪应用程序的 IPv6 地址。 您的收件人还必须使用 Cjdns 协议,但这并不是什么大碍,因为安装 Cjdns 比说服美国 ISP 提供可用的 IPv6 更容易。

安装 Cjdns

要永久安装和启用 Cjdns 服务,请运行以下命令:

$ 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.681v1s7k3af1q2cf09txpw309zdf4q0mn7mtq0wr544dz98stwr0.k ESTABLISHED in 6kb/s out 15kb/s  LOS 8 "outer"

这会生成一个 /etc/cjdroute.conf 文件,其中预先填充了随机密钥和密码。 如果您的 LAN 上已经有一个 Cjdns 节点,那么您就完成了。 但更有可能的是,peerStats 没有输出。 在这种情况下,您现在需要配置一个或多个 UDP 隧道。 首先,您必须发现使用的随机 UDP 端口。

$ 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",

在这 example,对于 IPv6 和 IPv4,随机 UDP 端口都是 26041。 你的端口会有所不同。 允许此端口的传入会话。

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

现在您需要编辑配置以添加对等点。 希望您对使用的配置有些熟悉 JSON 语法. 您必须使用您喜欢的文本编辑器(例如 vim)为 UDP 对等点添加条目。 这是 VPS 上提供的一个。 搜索 IPv4,并在大括号内的 connectTo 之后添加指示的节:

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

要使更改生效,请重新启动 cjdns。

$ sudo systemctl restart cjdns
$ peerStats
168.235.90.18:26041 v20.0000.0000.0000.0017.lhj54c2xnczfurpw42d0h1bvc4qquclb4dw72q50tc83ucmm9zt0.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

您现在可以 ping 全球 IPv6 网格中的任何节点。 注意:所有这些节点现在都可以直接连接到您的设备。 默认的 Fedora 默认情况下,防火墙将阻止所有传入连接 – 但要小心您允许的内容。请务必咨询 包自述文件 额外的安全注意事项。

这个 nyc VPS 的 fedora 密码可能不会无限期地使用,所以你需要更多的对等点。 咨询一个 公共对等体列表 或与您同行 Fedora 朋友们。

分散电子邮件应用程序

您可以分散包含在其中的几乎所有电子邮件客户端 Fedora 支持 IPv6,例如 alpine 或 Thunderbird。 这个 example 使用 mailx,一个为电传打字机设计的基本 CLI 邮件客户端。 这使得配置和使用易于展示。

同样,您可以使用随附的任何 MTA Fedora, 但是这个 example 使用 opensmtpd,因为它简单、小巧且安全。 默认情况下,opensmtpd 将收到的电子邮件存储在 /var/spool/mail 中,非常适合个人分散使用。 当然,您可以使用任何您喜欢的邮件存储和客户端。

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

当然,您需要使用自己的本地登录名、IPv6 和名称。

要接收电子邮件,您需要编辑 /etc/opensmtpd/smtpd.conf 中的 opensmtpd 配置。 这是一个示例。 (注意这篇文章可能会包含一些“预先格式化”的行,所以 如果需要,请尝试此链接以获取工作配置):

# This is the smtpd server system-wide configuration file.
# See smtpd.conf(5) for more information.

# To accept external mail, replace with: listen on all
listen on fc02:fefe:dead:beef:cafe:babe:1234:5678 hostname "[IPv6:fc02:fefe:dead:beef:cafe:babe:1234:5678]"
listen on localhost

# If you edit the file, you have to run "smtpctl update table aliases"
table aliases file:/etc/aliases

# Uncomment the following to accept external mail for domain "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]"

当然,使用您的实际 Cjdns IP。 当 opensmtpd 配置准备好时,启动它以便您可以接收电子邮件。 如果您的收件人离线,opensmtpd 会存储您的信件并定期重试。

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

现在向作者发送 dex(去中心化)电子邮件:

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

这会向作者的 nyc vps 发送一封电子邮件——因此,如果您收到回复,请不要感到惊讶!

Alpine 是一个功能齐全的控制台电子邮件客户端。 第一次安装并运行后,您可以通过编辑 ~/.pinerc 并更改这些基本配置项来分散它:

# 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

分散 SIP 应用程序

Linphone 通话屏幕

使用 Cjdns 进行语音通话可为您提供隐私和身份验证。 您可以使用任何支持 IP6 的 sip 客户端。 这个 example 使用中包含的 linphone 应用程序 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

Linphone 网络配置屏幕

在桌面上运行 linphone,并跳过帐户向导。 您不需要点对点的登录名和帐户。 选择选项、首选项,然后选择使用 IPv6 而不是 IPv4 和直接连接到 Internet。 Enter 您在公共 IP 地址中的 Cjdns IPv6。 现在选择选项,退出以完全退出 linphone。

版本在 Fedora 不提供配置点对点联系的方法,因此您需要编辑配置文件。 找出 [sip] 部分并更改 guess_hostname 和联系人:

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

现在再次启动 linphone,并添加一个 Fedora 使用相同的地址语法与 Cjdns 连接到地址簿。 先尝试发短信,然后给他们打电话。

当然,VoIP 应用程序中的音频和视频存在许多潜在的问题,这里不一一介绍。 但是,通常情况下,linphone 可以正常工作。 如果没有朋友,可以在上面的nyc节点通过dex邮件联系作者。