最近剛好看到 I2P 技術,就心血來潮想要在 Tor 和 I2P 網路上架設自己部落格的鏡像站,並且讓他能同步更新本站,這篇文就要示範如何透過 Github Actions 完成以上操作
什麼是 I2P/Tor
I2P(Invisible Internet Project) 是一個專注於匿名通訊的分散式網路協議,讓使用者可以在網路上隱藏自己的身分與位置。I2P 主要用於建立匿名網站(稱為 eepsites),以及點對點的加密通訊,適合需要高度隱私的應用場景。
Tor(The Onion Router) 則是一個全球知名的匿名網路,透過多層加密(像洋蔥一樣)將流量在多個節點間轉發,讓使用者難以被追蹤。Tor 常用於瀏覽 .onion 網站(暗網),或是在公開網路上保護個人隱私。
這兩種技術都能讓你架設只有特定網路能存取的鏡像站,提升部落格的可用性與抗審查能力。
- by ChatGPT
事前準備
需要準備一台支援 SSH 的 Linux 主機(其他系統也可以,但本篇以 Ubuntu 24.04 示範),配置最低 1C/1G/10G 也可以跑起來,我是用 IONOS,一個月2美元
設定 Github Actions
首先我們要先設定 GitHub Secrets,到 你的專案 >> Settings >> Secrets and variables >> Actions
選擇 New repository secret
我們需要新增四個 Secret,分別是
VPS_USER - 登入 SSH 的 Username(預設應該是 root)
VPS_HOST - VPS 的 IP
VPS_PORT - VPS SSH 的端口(預設是22)
VPS_SSH_KEY - Actions 要連接 SSH 的 Private Key
如果沒有 VPS_SSH_KEY 的話可以在電腦 CMD 或 VPS 打以下指令
ssh-keygen -t rsa -b 4096 -C "github-actions" -f github_actions_key
他就會生成一對公鑰(Public Key)和私鑰(Private Key)
Windows 會生成在 C:\Users\Username
下
然後把公鑰放入 VPS
mkdir -p ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
把 github_actions_key.pub
的內容貼進去儲存後
chmod 600 ~/.ssh/authorized_keys
把私鑰照上面步驟放到 Secrets
然後在專案創建 .github/workflows 資料夾,在裡面創建 deploy.yml
name: Deploy Hexo to VPS
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
- name: Install Hexo
run: |
npm install -g hexo-cli
npm install
- name: Generate site
run: hexo generate
- name: Deploy to VPS
uses: appleboy/scp-action@v0.1.6
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.VPS_SSH_KEY }}
port: ${{ secrets.VPS_PORT }}
source: "public/*"
target: "/var/www/hexo/"
- name: Reload Nginx
uses: appleboy/ssh-action@v0.1.7
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.VPS_SSH_KEY }}
port: ${{ secrets.VPS_PORT }}
script: "sudo systemctl reload nginx"
這樣只要有新 commit 他就會先生成 public 資料夾後部屬到 VPS 的 /var/www/hexo/ 資料夾
部屬 Nginx 伺服器
先安裝 nginx
sudo apt update
sudo apt install nginx -y
編輯 nginx 配置
vim /etc/nginx/sites-available/default
你也可以新增一個設定檔
vim /etc/nginx/sites-available/hexo #名字自己取
把他修改成
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/hexo/public;
index index.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
然後啟動 nginx 服務
如果你是新增設定檔要先打
sudo ln -s /etc/nginx/sites-available/hexo /etc/nginx/sites-enabled/
然後
sudo nginx -t # 測試配置是否正確
sudo systemctl restart nginx
你可以用瀏覽器訪問 http://vps的ip:80
來看看網站有沒有成功部屬
架設 Tor 鏡像站
Tor 的部分比較簡單
先安裝 Tor
sudo apt install -y tor
修改設定檔
vim /etc/tor/torrc
新增這兩行
HiddenServiceDir /var/lib/tor/hexo_hidden_service/
HiddenServicePort 80 127.0.0.1:80
重啟 Tor
sudo systemctl restart tor
查看 .onion 網址
sudo cat /var/lib/tor/hexo_hidden_service/hostname
這樣就部屬好了,訪問網站請見教學
架設 I2P 鏡像站
我們先安裝 Java(建議用17或以上)
sudo apt update
sudo apt install openjdk-17-jre -y
然後下載 I2P
cd /opt
sudo wget https://github.com/i2p/i2p.i2p/releases/download/i2p-2.7.0/i2pinstall_2.7.0-0.jar -O i2pinstall.jar
sudo java -jar i2pinstall.jar
他會叫我們選語言,我們選繁體中文(twn)就好
之後就照著他的指示繼續
然後我們先創建一個專用的用戶
sudo useradd -r -m -d /home/i2puser -s /usr/sbin/nologin i2puser
sudo mkdir -p /home/i2puser
sudo chown i2puser:i2puser /home/i2puser
設定 I2P 目錄權限
sudo chown -R i2puser:i2puser /usr/local/i2p
sudo -u i2puser mkdir -p /home/i2puser/.i2p
然後先修改 I2P設定檔
sudo vim /usr/local/i2p/i2prouter
把 I2P_CONFIG_DIR
改成
I2P_CONFIG_DIR="/home/i2puser/.i2p"
下面一點的 RUN_AS_USER
改成
RUN_AS_USER=i2puser
設定 Systemctl 自動啟動
sudo vim /etc/systemd/system/i2p.service
改成
[Unit]
Description=I2P Router
After=network.target
[Service]
Type=forking
User=i2puser
Environment="I2P_CONFIG_DIR=/home/i2puser/.i2p"
WorkingDirectory=/usr/local/i2p
ExecStart=/usr/local/i2p/i2prouter start
ExecStop=/usr/local/i2p/i2prouter stop
Restart=on-failure
RestartSec=5s
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
啟動 I2P
sudo systemctl daemon-reload
sudo systemctl enable i2p
sudo systemctl start i2p
可以輸入
sudo systemctl status i2p
來查看狀態,看到 running 就代表運行成功了
再來我們要從自己電腦連上 I2P 的 Web Console,在 CMD 或 Powershell 輸入
ssh -L 9765:127.0.0.1:7657 你的username@VPS IP #不要用 i2puser,這個用戶是 nologin 模式沒辦法用 SSH 登入
7657 端口我們自己可能會用,所以把 VPS 的 7657 端口代理到本地的 9765 端口(9765 要改其他的也可以)
如果 SSH 登入要私鑰可以用以下指令指定私鑰
ssh -i 私鑰路徑 -L 9765:127.0.0.1:7657 你的username@VPS IP
注意事項
CMD/Powershell 的視窗不要關掉,關掉 SSH 的 Session 就斷了,要關設定完再關
我們現在到瀏覽器輸入 http://127.0.0.1:9765
就能看到 VPS 的 I2P Web Console 了
我們選好語言後,帶寬設定可以先略過
然後我們就會進入他的控制台,選隱藏服務管理器
選擇創建一個新的 HTTP 隱身服務
名稱跟描述可以自己寫,目標選 127.0.0.1 端口 80 然後保存就好
點啟動
重整一下網頁看到他變綠燈就可以用他下面目標的網址連線了
如何訪問鏡像網站
Tor 和 I2P 都無法用一般瀏覽器從表網連線,我們需要額外進行一些動作
Tor
Tor 比較簡單,下載 Tor Browser
然後連上 Tor 網路輸入網址就能訪問了
I2P
訪問 I2P 最簡單的方法是透過 FoxyProxy 通過 I2P 代理 HTTP 流量
我們要下載 I2P 並安裝(以下用 Windows 示範)
開啟 I2P 後可以訪問 http://127.0.0.1:7657
來驗證有沒有啟動成功,有的話會看到跟 VPS 的 I2P Web Console 一樣的畫面
然後在瀏覽器安裝 FoxyProxy,Chrome/Edge/Firefox 都有這個擴充功能
進入 FoxyProxy 的設定
到 Poxies 新增一個 Proxy ,類型選擇 HTTP,代理到 127.0.0.1 的 4444 端口
儲存後把 FoxyProxy 固定,然後選擇我們剛剛創的那個 Proxy,就能直接切換到 I2P 網路並訪問網站了
地址簿
I2P 的域名預設是一長串 base32 的網址,我們可以通過自己新增地址簿來用自訂的 .i2p 域名訪問網站
先到 http://127.0.0.1:7657/
選擇地址簿
I2P 的地址簿有兩種,你可以自己新增到本地地址簿或訂閱其他人的地址簿,本地地址簿就只能自己用自訂域名訪問,別人沒辦法,本質上他就是把比較短的域名再導向 base32 格式的域名
付費訂閱(不知道為什麼這樣翻譯,他沒有付費的東西,只是自動訂閱別人的地址簿)的部分官方的地址簿更新很慢,這邊推薦幾個地址簿,讓你可以用短域名訪問比較多網站
http://identiguy.i2p/hosts.txt
http://notbob.i2p/hosts.txt
http://reg.i2p/export/hosts.txt
http://scanner.linuxfarm.i2p/hosts.txt
http://skank.i2p/hosts.txt
http://stats.i2p/cgi-bin/newhosts.txt
我們可以設定本地地址簿來讓我們能用短網址訪問網站
選擇本地地址簿,目標填入我們的 base32 網址,主機名可以自己取一個 .i2p 結尾的
新增之後我們就能用短域名訪問了
你也可以提交到一些公開的地址簿,像是 http://reg.i2p/add
他會要求你要用私鑰去簽名證明你是這個網站的持有者
可以透過開源的 I2PD-Tools 來簽名(Windows 可以用他編譯好的版本,他原版是 C++ 寫的要自己編譯)
我們先進入 I2P Web Console 的隱身服務管理器,點進你的服務
他下面就會寫你的私鑰位置
可以用 WinSCP 用 SFTP 把檔案下載到本地,檔案路徑會在 /home/i2puser/.i2p
如果不是 root 沒權限查看的話可以用下面指令讓所有人都能存取(自行斟酌)
sudo chmod -R 755 /home/i2puser/.i2p
然後我們把私鑰拉到 I2P-Tools 的資料夾(假設你已經編譯好了),CMD/Powershell 輸入
./regaddr 私鑰名稱.dat 你要的網域.i2p
# EX: ./regaddr i2ptunnel7-privKeys.dat hello-world.i2p
他就會生成一長串 domain.i2p=base64#!sig=hash
格式的文字,把它複製起來到 http://reg.i2p/add 或類似的網站提交即可
過幾小時就會被收錄進他們的列表了,別人只要訂閱他們的地址簿就能用短域名連到你的網站
像我的 yimang.i2p
就有被收錄在 http://notbob.i2p/hosts.txt
這個地址簿中,別人只要有訂閱這個地址簿就能直接用 yimang.i2p
連接我的網站