你担心一个 少数几家控制网络的大公司? 不喜欢 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 覆盖网状 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 邮件客户端。 这使得配置和使用易于展示。
同样,您可以使用随 Fedora, 但是这个 example 使用 opensmtpd,因为它简单、小巧且安全。 默认情况下,opensmtpd 将传入的电子邮件存储在 /var/spool/mail 中,非常适合个人分散使用。 当然,您可以使用您喜欢的任何邮件商店和客户端。
$ 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
当然,您需要使用自己的本地登录名、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" "stuart@[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 使用包含在 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:mylogin@[fc02:fefe:dead:beef:cafe:babe:1234:5678]>
现在再次启动 linphone,并添加一个 Fedora 与 Cjdns 的朋友使用相同的地址语法到地址簿。 先试试短信,然后给他们打电话。
当然,VoIP 应用程序中的音频和视频存在许多潜在问题,此处不予介绍。 但是,通常情况下,linphone 可以正常工作。 如果您没有任何朋友,您可以在上面的 nyc 节点通过 dex 电子邮件与作者联系。