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


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

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

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

這個問題最簡單的解決方案是 IPv6。但是,大多數美國消費者 Internet 提供商不支持 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 地址。接收者還需要使用 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",

在此示例中,對於 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 防火牆會阻止所有傳入連接,但請注意您允許的連接。請務必聆聽 軟件包自述文件 附加安全說明。

這個 nycVPS 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

這將向作者的 nycvps 發送一封電子郵件。如果您收到回复,請不要感到驚訝。

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を使用してインターネットに直接接続する]選擇。輸入 CjdnsIPv6 作為公共 IP 地址。然後選擇一個選項並退出以完全退出 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郵件聯繫作者。