使用 cjdns 的分佈式公共 Fedora 應用程序


你擔心一個 一些管理網絡的大公司討厭 Facebook 和 Twitter 等集中式社交媒體網站的審查制度?你必須去中心化!互聯網被設計為去中心化的。從社交媒體到電子郵件再到語音通話,許多常見活動並不真正需要集中式服務。

對等應用程序的一個基本要求是對等點可以相互訪問。對於今天在 NAT 後面使用 IP4 的大多數人來說,這是不可能的(就像大多數家庭路由器一樣)。 IP4 地址空間在十多年前就已經耗盡。大多數都在“IP4 NAT 監獄”中。

該設備被分配一個私有IP並由路由器轉換為公共IP。如果一個端口沒有轉發到特定的私有 IP,傳入的 TCP 連接或 UDP 會話將不知道轉發到哪裡並且將被丟棄。結果,沒有任何東西可以連接到設備。要執行任何操作,您需要連接到各種公共服務器。 IP4 NAT 監獄強制執行集中化。

這個問題最簡單的解決方案是 IPv6。但是,大多數美國消費者互聯網提供商不提供 IPv6。例如,如果 IPv6 前綴每隔幾天更改一次,則只能通過動態 DNS 服務器對設備進行尋址。此外,在筆記本電腦等移動設備上,大多數 WiFi 不提供 IPv6。所以我不能使用它 移動IP6 我有一個穩定的地址。

像 OpenVPN(包含在 Fedora 中)這樣的 VPN 可用於公共 IP4 集中式服務器。但是,發送到設備和從設備發送的數據包必須首先發送到 VPN 服務器並從其接收。您還可以使用隧道代理。 其他網.

如果您和您的同行已經擁有穩定的 IPv6 地址,您可以使用這些地址來演示示例應用程序。但是大多數人應該使用其他東西。

此外,本文中的所有示例應用程序都避免使用 DNS,因為 DNS 本質上是一種集中式服務。電子郵件和 SIP 應用程序具有同樣有效的內置地址簿。將穩定的 IPv6 地址視為“電話號碼”。

帶有 Cjdns 的 IPv6 覆蓋網狀 VPN

Cjdns 包(包含在 Fedora 中)是 全球 IPv6 網狀網絡 連接到多個對等點而不是集中式服務器。每個節點都有一個公鑰/私鑰對。 IPv6 是公鑰的截斷 SHA512 哈希,以防止欺騙。

  • 數據包是端到端加密的。繼電器可能不可靠。
  • 數據包是源路由的,允許無縫升級和試驗路由算法。 (它是安全的,因為它可以防止欺騙。)
  • 數據路由 分佈式哈希表 列出每個節點的對等點。
  • 對等點可以顯式配置為 UDP 隧道,也可以通過以太網通過第 2 層協議 0xfc00 自動配置。

安裝cjdns後,穩定”不要被愚弄(適用標準加密警告)可用於啟用 IPv6 的應用程序的 IPv6 地址。 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",

在此示例中,對於 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。此示例使用 mailx,一個為電傳打字機設計的基本 CLI 郵件客戶端。這使得演示配置和使用變得容易。

同樣,您可以使用捆綁的 Fedora,但在本示例中,我使用的是簡單、小巧且安全的 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 客戶端。本示例使用 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 網絡配置畫面

在桌面上運行 linphone 並跳過帳戶嚮導。無需點對點登錄和帳戶。[オプション],[設定]並選擇[IPv4 の代わりに IPv6 を使用]什麼時候[インターネットに直接接続]選擇。為公共 IP 地址輸入 Cjdns IPv6。選擇一個選項並退出以完全退出 linphone。

Fedora 的版本沒有提供配置對等聯繫人的方法,所以需要編輯配置文件。查出 [sip] 修改部分以更改guess_hostname 和contact:。

$ 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 電子郵件聯繫作者。