自建最強科學上網3+:trojan + Caddy(SSL證書自動續期)
【美博翻牆2021.3.8】trojan、v2fly(V2Ray)、NaiveProxy系列翻牆方法中,因封鎖加劇,目前美博建議僅使用如下建立的NaiveProxy:
手動申請SSL證書自建代理:NaiveProxy + Caddy - 美博園 https://allinfa.com/manual-ssl-certificate-naiveproxy-caddy.html 自建代理申請SSL證書頻頻失敗的測試記錄 - 美博園 https://allinfa.com/ssl-certificate-failed-test-record.html
-------------------------------------------------------------
(3月10日18點有更新,之前看過的網友請留意更新)編註:trojan+Caddy翻牆代理的前教程【自建最強科學上網3:trojan + Caddy】存在SSL證書三個月到期後不能自動續期的問題,這是一個普遍存在的問題,目前網上基本上是採用外加acme腳本來續期,近期重新研究了一遍trojan,終於找到了修改Caddyfile配置來自動續期的方法,因為本方法為美博研究首創,證書要三個月後才能知道是否真的有效,是否代碼中還有考量不周的地方,還請熱心網友來幫忙測試是否會自動續期,以及修改補充完善。當然此法建立trojan代理一樣是成功的。先謝謝了。
有關這次修改方法的原理、思路及解決辦法,請參考:
「trojan+Caddy」SSL證書自動續期的Caddyfile配置解決方案
以下根據前教程進行修改,本教程的修改之處,會在相應位置說明。
說明:本教程,仍然是完整的新教程,按照本教程是可以完成trojan代理的構建,所以,並不需要網友參考對照前教程。只要按照本教程的先後順序,不要打亂,一步一步走下去,就會自建成功。
以前的介紹:trojan是較新的代理項目,目前網上trojan+Caddy的構建詳細教程極少,美博測試後發布此方法與網友分享。
trojan 採用常見的協議HTTPS,沒有使用特別的協議,trojan監聽443連線埠,其思路是把 trojan代理數據偽裝成正常的 HTTPS 通信,對於其他訪問數據則直接轉發到80連線埠,通過caddy、Nginx等web伺服器提供網頁訪問服務,當trojan客戶端連接到伺服器時,首先執行真正的 TLS 握手,若握手成功,則所有後續流量都將受到保護TLS; 否則伺服器就立即關閉連接,就像任何HTTPS伺服器一樣。這樣VPS更像一個正常的web伺服器,使得 GFW 認為是 正常HTTPS。trojan反偵查採用主動檢測與被動檢測,而不會被識別出來。caddy+trojan一起合用是很好的組合,trojan綁定在0.0.0.0:443上,轉發非trojan流量到 caddy 達到掩護的目的。caddy綁定在0.0.0.0:80上,並自動重定位到https加密瀏覽。
據網友和我們實際使用,trojan的速度的確是相當的不錯。
官方項目主頁:
GitHub - trojan-gfw/trojan: An unidentifiable mechanism that helps you bypass GFW. https://github.com/trojan-gfw/trojan
------------- 美博翻牆(allinfa.com)發布的幾個目前最好的自建代理,可自行選擇使用: 自建最強科學上網3+:trojan + Caddy(SSL證書自動續期) 自建最強科學上網2+:V2Ray + Caddy + Tls + WebSocket 自建最強科學上網5+:V2ray + Caddy + Tls + HTTP/2 自建最強科學上網4:NaiveProxy + Caddy 美博點評:V2Ray、trojan、NaiveProxy代理的異同及相關問題 美博認為這幾個組合都是目前翻牆思路最好、最強的翻牆方法,可等同使用。 -------------
本方法代理構建的系統要求:Ubuntu ≧ 16.04 or Debian ≧ 9,建議使用 Debian 10,不適用於 CentOS 。
本方法以Caddy作為前端web伺服器,是一個輕便的web部署工具,其功能與 nginx 類似。其優點是:單文件,無依賴,安全、輕量、方便;安裝快速、不到30秒可創建一個 HTTPS 伺服器;不受制於EE的版本限制,可廣泛應用於各種系統;配置文件簡潔,多站點配置、反向代理等功能都在一個 Caddyfile 文件里配置;默認啟用HTTPS,自動簽發免費的 Let's Encrypt https 證書並自動續約,默認支持HTTP/2(H2)網路協議;還有豐富的外掛程式系統,可以快速配置緩存、CORS、自動拉取 Git 倉庫、Markdown 支持、ip/地區過濾等功能。
本文有關的幾個概念介紹:
trojan:以常見的https協議構建的繞過網路限制、審查、翻牆的代理工具。
Caddy:作為部署代理的前端web伺服器,負責SSL加密證書的申請和續簽。
HTTP/2(H2):是網際網路HTTP網路協議的主要修訂版。它源自Google最初開發的實驗SPDY協議。
TLS:安全傳輸層協議,用於在兩個通信應用程式之間提供保密性和數據完整性。
反向代理:相對正向代理而言,真實的web伺服器受到保護、對外不可見,外網只能看到反向代理,而反向代理伺服器上並沒有真實數據,從而保護web伺服器的資源安全,並可加速網站訪問速度等。
本教程按照實際製作過程進行描述,請網友按照順序做。
一、選擇 VPS 伺服器並安裝系統
購買VPS並安裝系統,請見教程:
自己搭建代理伺服器:VPS的選擇 自己搭建代理伺服器:Vultr VPS 購買圖文教程 自己搭建代理伺服器:Vultr VPS 系統安裝圖文教程
請記住VPS安裝系統後得到的: ip地址、 密碼、 用戶名(默認是root),後面會用到。
二、購買網域並設置與伺服器ip關聯
請參考教程:
自己搭建代理伺服器:網域購買及設置與ip伺服器關聯
網域是為了建立網站(網頁)用的,本方法實際建立一個網站(網頁),將翻牆代理隱身其中,翻牆就像是實實在在的在瀏覽網站,消除代理的特徵信號,提高翻牆代理安全性,這樣的思路一直以前的翻牆軟體難以實現的,trojan也實現了這個願望,成為目前最好的翻牆方法系列之一。
有條件的網友,建議按照本系列教程「購買」屬於自己的網域,不要使用網上能夠找到的「免費網域」。
對新手的建議:
對於初期自建代理的網友,其網域可以多設置幾個二級網域,同時先做好解析備用。可以先拿一個二級網域,測試方法,如果一次安裝成功就可以繼續使用;如果幾次安裝不成功,因為反覆同一(二級)網域申請SSL證書次數太多,可能會被拒絕SSL證書,那麼後面的步驟就無法進行。這時,可以換已經解析好的另外的二級網域來申請證書和構建代理。
檢查網域解析是否生效
在上文教程中已經說明了網域解析的方法,這裡再強調,你要做代理的網域,在這一步一定要已經解析正確,這是前提,下面的步驟才能正確完成。
如果你的網域或二級網域,解析正確且生效,那麼你看到的結果是,輸入你的網域後,顯示的IP就是你的VPS主機的IP。
三、用SSH工具連接VPS伺服器
用SSH工具連接VPS伺服器後,可以輸入各種指令(命令)來安裝系統、安裝各種應用程式
在自家電腦上通過安全的SSH連接到遠端的VPS伺服器,就可以發出各種指令(命令)來安裝系統、安裝各種應用程式,包括建立代理的各種組件等等。在電腦上安裝XShell軟體來實現SSH連接非常方便,美博園推薦這個工具。
請參考:SSH連接軟體-Xshell下載及使用教程
如果你使用的是Linux或macOS系統,本身就內置有SSH鏈接的終端模擬器,無需下載額外的軟體。
===========關於輸入命令的幾點說明 =========
# 不是很熟悉代碼的網友,請採用「複製」教程各步驟的輸入命令,而且複製時注意不要增減空格,新手很容易出錯的地方就是代碼的空格、格式、符號等等無意中輸入錯誤。 # 本文方法以默認的root用戶來構建,建議不熟悉改變命令的網友不要自建用戶,否則此法的很多命令將不可用。 # 新手注意:一下輸入命令都是在「英文半形」輸入完成,電腦的輸入法「不要」處於中文輸入狀態,以免無意輸入中文全形字元而出錯。 # 在執行下面各種輸入命令時,都是用Xshell軟體以root用戶登錄SSH連接VPS伺服器,然後輸入各種命令來執行。(教程中有說明) # 下面的步驟,如果不明白其中命令的含義沒有關係,請按照下面的全部順序,有的步驟是不能變動先後到,一步一步輸入命令完成即可成功建立代理。
==============================
四、更新及優化系統
接前,已經購買網域,設置了網域解析,已經有VPS伺服器並安裝了系統,基本硬體已經具備完成。
因購買VPS時已經選擇了安裝系統,我們下面的建立代理首先就是要輸入指令更新系統,因為VPS伺服器提供的系統並非是最新發布的系統。
4-1、更新系統
依次輸入【每輸入一行都要回車(按[Enter])】:
apt update
apt -y upgrade
註:以下每個命令輸入後都要按[Enter] 回車執行,下面不再重複註明。
4-2、調整系統控制參數
nano是Linux的一款文本編輯器,如同windows系統中的記事本、寫字板、EmEditor等文字編輯器一樣的作用。
輸入
nano /etc/sysctl.conf
編輯器打開後會有一個#綠色游標,這是可輸入內容的位置,都是象這樣子:
請注意一下使用nano編輯器和粘貼命令的規範操作,新手常常輸入出錯:
打開編輯器後,在#綠色游標處,先按enter回車,就會增加一空行;
再按「左方向鍵←」 讓綠色游標上移到空行處;
然後,點滑鼠右鍵,在右鍵菜單中點「粘貼」,不要使用ctrl+v來粘貼;
這樣就可以看到上述設置內容粘貼到nona編輯器中新增的空行處了。
請記住:以下nano編輯操作都要如上所述。
4-3、調整系統控制參數
為代理伺服器優化配置,將以下配置內容粘貼到上面命令打開的/etc/sysctl.conf文件的綠色游標處
# max open files fs.file-max = 51200 # max read buffer net.core.rmem_max = 67108864 # max write buffer net.core.wmem_max = 67108864 # default read buffer net.core.rmem_default = 65536 # default write buffer net.core.wmem_default = 65536 # max processor input queue net.core.netdev_max_backlog = 4096 # max backlog net.core.somaxconn = 4096 # resist SYN flood attacks net.ipv4.tcp_syncookies = 1 # reuse timewait sockets when safe net.ipv4.tcp_tw_reuse = 1 # turn off fast timewait sockets recycling net.ipv4.tcp_tw_recycle = 0 # short FIN timeout net.ipv4.tcp_fin_timeout = 30 # short keepalive time net.ipv4.tcp_keepalive_time = 1200 # outbound port range net.ipv4.ip_local_port_range = 10000 65000 # max SYN backlog net.ipv4.tcp_max_syn_backlog = 4096 # max timewait sockets held by system simultaneously net.ipv4.tcp_max_tw_buckets = 5000 # TCP receive buffer net.ipv4.tcp_rmem = 4096 87380 67108864 # TCP write buffer net.ipv4.tcp_wmem = 4096 65536 67108864 # turn on path MTU discovery net.ipv4.tcp_mtu_probing = 1 # for high-latency network net.core.default_qdisc=fq net.ipv4.tcp_congestion_control = bbr
退出nano編輯狀態
註:下面凡是用到nano編輯命令的,退出nano編輯狀態都是這個辦法。
輸入上述內容後,如何退出nano編輯狀態
同時按 Ctrl + X 若詢問你是否儲存檔案 (Save modified buffer? (Answering "No" will DISCARD changes.)) , 輸入 y 再按 Enter(回車),就可以退出nano編輯狀態了。
4-5、激活更改
輸入:
sysctl -p
4-6、編輯安全限制配置文件
4-6-1、將文件數限制增加到51200
輸入
nano /etc/security/limits.conf
如上所述,打開編輯器後,在#綠色游標處,先按enter回車,就會增加一空行;
再按「左方向鍵←」 讓綠色游標上移到空行處;
然後,點滑鼠右鍵,在右鍵菜單中點「粘貼」,不要使用ctrl+v來粘貼;
這樣就可以看到上述設置內容粘貼到nona編輯器中新增的空行處了。
* soft nofile 51200 * hard nofile 51200
然後,同時按 Ctrl + X,再按y,再按 Enter(回車),退出nano編輯狀態。
4-6-2、將當前文件數限制設置為51200
輸入:
ulimit -SHn 51200
4-6-3、編輯永久配置文件:
輸入:
nano /etc/profile
如上所述,打開編輯器後,在#綠色游標處,先按enter回車,就會增加一空行;
再按「左方向鍵←」 讓綠色游標上移到空行處;
然後,點滑鼠右鍵,在右鍵菜單中點「粘貼」,不要使用ctrl+v來粘貼;
這樣就可以看到上述設置內容粘貼到nona編輯器中新增的空行處了。
ulimit -SHn 51200
然後,同時按 Ctrl + X,再按y,再按 Enter(回車),退出nano編輯狀態。
五、安裝 Caddy
5-1、先安裝Web數據傳輸實用程序curl
輸入:
apt install curl
若詢問 Do you want to continue? [Y/n]
就按字母 y
繼續安裝直到完成。
--- 補充說明 開始 ---
有網友提醒:在谷歌雲(GCP,Google Cloud Platform)上的debian系統沒有自帶wget。
如果你使用的是谷歌雲,在這裡安裝caddy之前,在此步需要先安裝wget
若你使用的其它VPS也遇到無法安裝caddy,提示:wget: command not found
也可以試用下面方法:
輸入:
sudo apt-get install yum
再輸入:
yum -y install wget
--- 補充說明 結束 ---
5-2、安裝Caddy個人使用版本
說明:因caddy停止下載v1版,本教程修正此替代安裝方法,文件為官方原版,安裝連接由美博產生,是安全可靠的。但此處安裝鏈接可能不定時改變,敬請安裝時,瀏覽本文當下的安裝指令。
依次輸入:
wget -P /usr/local/bin "https://fuyin513.cyou/c1/caddy.tar"
tar -xvf /usr/local/bin/caddy.tar -C /usr/local/bin
rm /usr/local/bin/caddy.tar
5-3、確定caddy文件安裝在何處
輸入:
whereis caddy
顯示為:
root@vmi:~# whereis caddy
caddy: /usr/local/bin/caddy
5-4、賦予所有權和許可權
#root擁有caddy文件防止其他賬戶修改
輸入:
chown root:root /usr/local/bin/caddy
#修改許可權為755,root可讀寫執行,其他賬戶不可寫
輸入:
chmod 755 /usr/local/bin/caddy
5-5、允許Caddy綁定到特權連線埠
#Caddy不會由root運行,使用setcap允許caddy作為用戶進程綁定低號連線埠(伺服器需要80和443)
輸入:
setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy
5-6、www-data的組和用戶
檢查名為www-data的組和用戶是否已經存在
輸入:
cat /etc/group | grep www-data
顯示為:
root@vm:~# cat /etc/group | grep www-data
www-data:x:33:
輸入:
cat /etc/passwd | grep www-data
顯示為:
root@vm:~# cat /etc/passwd | grep www-data
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
注意:
你的顯示結果與上面一樣,就不需要下面輸入;
如果顯示不一樣、其組和用戶不存在,則需要創建它們,輸入如下二個命令:
輸入:
groupadd -g 33 www-data
輸入:
useradd -g www-data --no-user-group --home-dir /var/www --no-create-home --shell /usr/sbin/nologin --system --uid 33 www-data
5-7、為 Caddy 創建目錄
#創建資料夾存儲Caddy的配置文件
輸入:
mkdir /etc/caddy
#創建資料夾存儲Caddy所管理的站點證書
輸入:
mkdir /etc/ssl/caddy
#允許root及www-data組訪問相關文件,允許Caddy寫入站點證書資料夾
依次輸入【每輸入一行都要回車(按[Enter])】:
chown -R root:root /etc/caddy
chown -R root:www-data /etc/ssl/caddy
chmod 770 /etc/ssl/caddy
#創建記錄文件
依次輸入【每輸入一行都要回車(按[Enter])】:
touch /var/log/caddy.log
chown root:www-data /var/log/caddy.log
chmod 770 /var/log/caddy.log
六、創建網站(網頁)
6-1、為您的網站創建目錄
#如果默認站點根目錄不存在,創建以下資料夾
輸入:
mkdir -p /var/www/html
#允許www-data組擁有站點資料夾
輸入:
chown -R www-data:www-data /var/www
#創建空的Caddy配置文件
輸入:
touch /etc/caddy/Caddyfile
6-2、向網站添加內容
基本上有二種方式,一種是建立一個簡單的網頁,另一種是建立一個實實在在的簡易網站,可以裝一些內容。當用網域訪問時,是可以看到真實內容的。美博這裡先介紹創建一個簡單網頁的方法。
6-2-1、方法1:創建網站
為了安全,不同樣一個模子,這裡給朋友們提供一個實際可操作的思路去自己處理:
本方法的掩護網站建立的位置在 /var/www/html/ 目錄中,其中網頁啟動文件是 index.html。
了解網站的網友知道,你自己可以在網上找到很多網站模板(主題)程序,到處都有網站模板(主題)演示。
在Google上,用關鍵詞「website template」 或 「website themes free」 或 「網頁模板」 或 「網頁主題」,等等,可以找到很多提供網頁模板的網站,裡面很多免費模板,選一個就好,比如:wordpress官方網站(https://wordpress.org/themes/)就提供有很多免費的網站模板
最好選英文的,中文的盡量不要用。
下載一個模板(主題)後,把其全部文件(只要裡面的內容文件,不要模板(主題)名目錄)複製到 /var/www/html/ 目錄中,其中的 啟動文件 index.html 一定要在 html/ 目錄下,不要放在其它子目錄中,就OK了。
比如:下載的是一個壓縮文件 abcdef.1.2.3.zip,解壓縮得到資料夾 abcdef,在abcdef資料夾中就有全部的網站文件,文件多少不一,其結構大致是:
也就是說,不要連同abcdef資料夾一起傳到/var/www/html/ 目錄中,只是將abcdef資料夾中的那些文件複製到html/ 目錄中就行了。
如何將本地電腦的網站模板文件上傳到指定的伺服器 /var/www/html/ 目錄中,請參考教程:
WinSCP:連接遠端伺服器的管理傳輸工具的使用教程
建議:不要變動以上的網站目錄結構(路徑),不然就可能需要更改目錄路徑和重新設置安裝本文一些其它步驟。
6-2-2、方法2:創建一個網頁
這個方法簡單,可以廣泛採用這個方法。
先特別說明:裡面的中文字內容,請不要千篇一律的複製,可任意改為你自己編輯的獨一無二的、普通的、無敏感詞的內容,如:詩詞、圖片、外文等等,最好是「圖文並茂的英文」,多選一些,盡量多都沒有關係。
6-2-2-1、首先創建一個作為掩護的真正網頁
輸入:
touch /var/www/html/index.html
6-2-2-2、編輯網頁文件
輸入:
nano /var/www/html/index.html
將以下內容粘貼到 #綠色游標處
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title> Hello 這裡是您創建的網頁(站)的名稱,文字可任意,但前後代碼不要動 </title> </head> <body> <h1 style="font-family: sans-serif"> 這裡是標題,文字可改為任何語言的任何內容,但前後代碼不要動 </h1> 這裡是網站(頁)的正文內容, <br /> 這些文字可改為你自己的任何語言的任何內容< <br /> 添加多少內容都可以 <br /> 代碼部份不要改動, <br /> 這是一個簡易網頁的結構 <br /> </body> </html>
說明:
<br /> 是分行符號,可以加在任何一個想分行斷句的地方;
圖片加入的格式為:<img src="你的圖片鏈接" />
可以加入多張圖片,圖文並茂更好,圖片插入的位置可以在你的正文內容(即上例所示的中文字部份)的「任意」位置。
總之,就是改為你自己知道的唯一的內容, 重申:其中不要有任何敏感字詞。
然後,同上【4-2、調整系統控制參數】所述:nano編輯器和粘貼的的規範操作:
打開編輯器後,在#綠色游標處,點滑鼠右鍵,在右鍵菜單中點「粘貼」,不要使用ctrl+v來粘貼;
這樣就可以看到上述設置內容粘貼到nona編輯器中新增的空行處了。
然後,按老規矩退出nano編輯狀態:
同時按 Ctrl + X
若詢問你是否儲存檔案,按下 y
再按 Enter(回車),退出nano編輯狀態。
七、設置SystemD服務
7-1、安裝SystemD服務,配置 caddy.service
由於caddy準備拋棄caddy v1,所以後來的配置文件一改再改。我們自己來創建這個配置文件,比較穩妥實用,這個就不依賴於 caddy.service 的官方下載。
1)、創建 caddy.service 空文件
輸入:
touch /etc/systemd/system/caddy.service
2)、在nano編輯器中打開caddy.service
輸入:
nano /etc/systemd/system/caddy.service
3)、編輯caddy.service配置
將下面內容「原封不動」的複製出來,然後右鍵粘貼到nano編輯框中
[Unit] Description=Caddy HTTP/2 web server Documentation=https://caddyserver.com/docs After=network-online.target Wants=network-online.target systemd-networkd-wait-online.service ; Do not allow the process to be restarted in a tight loop. If the ; process fails to start, something critical needs to be fixed. StartLimitIntervalSec=14400 StartLimitBurst=10 [Service] Restart=on-abnormal ; User and group the process will run as. User=www-data Group=www-data ; Letsencrypt-issued certificates will be written to this directory. Environment=CADDYPATH=/etc/ssl/caddy ; Always set "-root" to something safe in case it gets forgotten in the Caddyfile. ExecStart=/usr/local/bin/caddy -log stdout -log-timestamps=false -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp ExecReload=/bin/kill -USR1 $MAINPID ; Use graceful shutdown with a reasonable timeout KillMode=mixed KillSignal=SIGQUIT TimeoutStopSec=5s ; Limit the number of file descriptors; see `man systemd.exec` for more limit settings. LimitNOFILE=1048576 ; Unmodified caddy is not expected to use more than that. LimitNPROC=512 ; Use private /tmp and /var/tmp, which are discarded after caddy stops. PrivateTmp=true ; Use a minimal /dev (May bring additional security if switched to 'true', but it may not work on Raspberry Pi's or other devices, so it has been disabled in this dist.) PrivateDevices=false ; Hide /home, /root, and /run/user. Nobody will steal your SSH-keys. ProtectHome=true ; Make /usr, /boot, /etc and possibly some more folders read-only. ProtectSystem=full ; … except /etc/ssl/caddy, because we want Letsencrypt-certificates there. ; This merely retains r/w access rights, it does not add any new. Must still be writable on the host! ReadWritePaths=/etc/ssl/caddy ReadWriteDirectories=/etc/ssl/caddy ; The following additional security directives only work with systemd v229 or later. ; They further restrict privileges that can be gained by caddy. Uncomment if you like. ; Note that you may have to add capabilities required by any plugins in use. ;CapabilityBoundingSet=CAP_NET_BIND_SERVICE ;AmbientCapabilities=CAP_NET_BIND_SERVICE ;NoNewPrivileges=true [Install] WantedBy=multi-user.target
然後,按老規矩退出nano編輯狀態:
同時按 Ctrl + X
若詢問你是否儲存檔案,按下 y
再按 Enter(回車),退出nano編輯狀態。
7-2、設置caddy.service許可權
輸入:
chown root:root /etc/systemd/system/caddy.service
輸入:
chmod 644 /etc/systemd/system/caddy.service
7-3、重載systemd使其檢測到新安裝的Caddy服務
輸入:
systemctl daemon-reload
八、配置 Caddy
8-1、加入Caddy配置文件Caddyfile
Caddyfile配置文件是與上一版教程最大不同的地方。
輸入:
nano /etc/caddy/Caddyfile
請注意,先要修改下面紫紅色標記的「網域」、「信箱」為你自己的資料(下面有詳細說明)
然後再將內容粘貼到 #綠色游標處
這裡舉例用一個二級網域 tro.abcdef.com
https://tro.abcdef.com:8080 { tls 12345@gmail.com root /var/www/html gzip timeouts none log /var/log/caddy.log } https://tro.abcdef.com { root /var/www/html gzip log /var/log/caddy.log } :80 { redir https://tro.abcdef.com }
然後,同時按 Ctrl + X,再按y,再按 Enter(回車),退出nano編輯狀態。
說明: 1)tro.abcdef.com:要改為你自己的網域,若是本例舉中的二級網域,其正確解析請參考前文【自己搭建代理伺服器:網域購買及設置與ip伺服器關聯】; 2)12345@gmail.com:要改為你自己的郵箱,Caddy將自動與Let's Encrypt聯繫以獲取SSL證書並在90天到期後自動更新證書;這個信箱不一定要真實,若考量安全,隨便填寫一個mail格式的就行;若是真實的mail,到期時會有來信提示更新。 3)Caddy將自動與Let's Encrypt聯繫以獲取SSL證書。它將證書和密鑰放在「/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/你自己的網域/」 目錄中; 4)Caddy向Let's Encrypt發出SSL證書申請,一般很快在幾分鐘內就可完成,但可能有人會遇到特殊情況比較久一些才會完成。 前面已經提到:同一(二級)網域,不能連續多次申請證書,次數太多會被拒絕,此時,可以換另外的(二級)網域來重新建立代理。 證書安裝若遇到問題,可參考: Let』s Encrypt 證書頒發的速率及次數限制 - 美博園 Let's Encrypt SSL 證書安裝不了的若干問題解決 - 美博園
特別說明:上述Caddyfile配置中的8080連線埠,是可以自己任意設定的,只要沒有被佔用就可以。如果改為自己設定的連線埠,請記得在最後面步驟的防火牆設置中,要對應設置該連線埠的防火牆規則。
8-2、賦予Caddy配置文件許可權
#給它適當的所有權和許可權:
輸入:
chown root:root /etc/caddy/Caddyfile
輸入:
chmod 644 /etc/caddy/Caddyfile
8-3、啟動Caddy
#啟動Caddy
輸入:
systemctl start caddy
8-4、檢查Caddy啟動狀態
要檢查Caddy是否正在運行並且正在偵聽連線埠80和443,可輸入:
systemctl status caddy
你應該看到這樣子的結果,如看到如下綠色字 active (running),表明 caddy已經啟動:
8-5、檢查網頁是否可以打開
本教程此步可以檢查一下你的網域(若是新網域或新主機)是否已經解析成功,進而再檢查一下你上面建立的http網頁(站)是否可以打開了。
因為到此步,前端Caddy已經啟動,若無問題,其網頁(站)就可以打開了。此檢查也是一種驗証,若網站正常運行了,說明前端Caddy也正常在運行。
在瀏覽器中輸入地址:https://你的網域,即:上面例舉中就是:
https://tro.abcdef.com
請注意:本方法在這一步,因443並沒有啟用、trojan沒有啟動,https加密網頁(站)在此時是打不開的,要到後面再驗証這個https的部份。此步不用檢查 https//tro.abcdef.com
8-6、自啟動Caddy
若上一步啟動無問題則可啟用開機自啟動Caddy
輸入:
systemctl enable caddy
顯示為:
Created symlink /etc/systemd/system/multi-user.target.wants/caddy.service → /etc/systemd/system/caddy.service.
此節附註1:若Caddy沒有正常啟動的記錄查看
注意:如果Caddy無法正常啟動,則可以查看日誌數據以幫助找出問題。如果已經啟動,不需要此步檢查。
輸入:
journalctl --boot -u caddy.service
此節附註2:修改 Caddy 配置會用到的相關命令 -- 此節只是說明
註:此節內容不需要接上下步驟操作,只是修改配置文件時才需要
若caddy沒有正常啟動,檢查到前面的步驟中某一步驟有輸入錯誤等,要修改 Caddyfile、caddy.service等等文件,那麼就會用到的一些命令:
修改前,
一般要先停止Caddy服務:
caddy -service stop
修改完成後:
重載systemd使其檢測到新安裝的Caddy服務
systemctl daemon-reload
啟動Caddy服務:
caddy -service start
或
重啟Caddy服務:
caddy -service restart
查看啟動狀態
systemctl status caddy
若不需要、或安裝錯誤Caddy服務,可卸載再重新安裝
卸載Caddy服務:
caddy -service uninstall
九、安裝trojan
trojan官網(Github 頁面)
https://github.com/trojan-gfw/trojan
注意trojan在不同的系統及不同版本的安裝命令不同,請參考官方命令說明:
https://github.com/trojan-gfw/trojan/wiki/Binary-&-Package-Distributions
但,我們可以方便使用trojan的官方一鍵腳本(Quickstart Script),適用於所有系統:
輸入:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh)"
顯示:
……
Unpacking trojan 1.15.1...
Installing trojan 1.15.1 to /usr/local/bin/trojan...
Installing trojan server config to /usr/local/etc/trojan/config.json...
Installing trojan systemd service to /etc/systemd/system/trojan.service...
Reloading systemd daemon...
Deleting temp directory /tmp/tmp.67e2QFtgnb...
Done!
注意:在下面配置完成後,再啟動trojan。
十一、伺服器端配置文件
(一)伺服器配置文件修改
因按照本方法的配置文件,美博已經修改好了,就直接給出修改內容。
# 先備份原沒有設置的伺服器配置文件
輸入:
cp /usr/local/etc/trojan/config.json /usr/local/etc/trojan/config.json.bak
# 再刪除原配置
輸入:
rm /usr/local/etc/trojan/config.json
# 打開nano編輯器
輸入:
nano /usr/local/etc/trojan/config.json
將下面的內容複製、粘貼到綠色游標處
請注意,先要修改下面紫紅色標記的「你設定的密碼」、「你的網域」改為你自己的資料,請先看下面的詳細說明。
然後,再將內容粘貼到 #綠色游標處
(註:此部份配置已經根據官方版本更新)
{ "run_type": "server", "local_addr": "0.0.0.0", "local_port": 443, "remote_addr": "127.0.0.1", "remote_port": 80, "password": [ "你設定的密碼", "" ], "log_level": 1, "ssl": { "cert": "/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/你的網域/你的網域.crt", "key": "/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/你的網域/你的網域.key", "key_password": "", "cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384", "cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384", "prefer_server_cipher": true, "alpn": [ "http/1.1" ], "alpn_port_override": { "h2": 81 }, "reuse_session": true, "session_ticket": false, "session_timeout": 600, "plain_http_response": "", "curves": "", "dhparam": "" }, "tcp": { "prefer_ipv4": false, "no_delay": true, "keep_alive": true, "reuse_port": false, "fast_open": false, "fast_open_qlen": 20 }, "mysql": { "enabled": false, "server_addr": "127.0.0.1", "server_port": 3306, "database": "trojan", "username": "trojan", "password": "", "key": "", "cert": "", "ca": "" } }
然後,同時按 Ctrl + X,再按y,再按 Enter(回車),退出nano編輯狀態。
說明:上面配置文件只有二處需要修改:
1)「你設定的密碼」:可任意設定任何「數字」和「字母」(建議不要用符號易出錯)組合,可任意長度,越長越好,這是一個安全設置,一般設置16位以上,32位就很好,只要自己記住,並與後面的客戶端設置一樣的密碼就好。 若自己想不到好的密碼,也可在下面網站隨機生成 https://strongpasswordgenerator.com/ 2)"cert"和"key",是Caddy為你自動申請的SSL證書文件及密鑰文件,在上面的配置文件中需將「你的網域」改為你上面設置的網域 3)請注意:不同系統的具體證書、密鑰路徑可能不同。
是否開啟 "fast_open": true?
有網友建議開啟,據美博所知:trojan目前只在Linux中支持TCP_FASTOPEN_CONNECT,而在Windows中則不提供,TFO並未有重大改進,容易受到某種形式的攻擊,美博不建議啟用它。
(二)重新載入配置文件
修改好上述伺服器配置文件後,需要載入
輸入:
systemctl daemon-reload
(三) 賦予trojan監聽443連線埠能力
賦予trojan監聽1024以下連線埠的能力,使得trojan可以監聽到443連線埠。
輸入:
setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/trojan
(四)啟動trojan
# 啟動trojan
輸入:
systemctl start trojan
# 查看啟動是否成功
輸入:
systemctl status trojan
如圖,若顯示為綠色的「active」表示trojan已經成功啟動
# 設置自啟動
若啟動成功運行,可以加入開機自啟
輸入:
systemctl enable trojan
顯示為:
root@vm:~# systemctl enable trojan
Created symlink /etc/systemd/system/multi-user.target.wants/trojan.service → /etc/systemd/system/trojan.service.
# 此節附註:若不能啟動,請查看錯誤日誌
(已經正常啟動不需此輸入)
輸入:
journalctl -fu trojan
# 檢查網站SSL網頁(網站)是否正常
本方法在啟動trojan後,才能開啟SSL的443訪問。這時可以檢查https加密瀏覽網站的情況,這步檢查也是要驗証全部設置是否正確,也順便查看一下ssl的有關記錄。
檢查很簡單:
1)、在瀏覽器中網址列輸入網址:https://你的網域,如:https://tro.abcdef.com
如果顯示的是你自己建的網站內容,就表明SSL已經可以正常使用瀏覽網頁(網站)。
2)、網站訪問驗証
在瀏覽器網址列,直接輸入你的伺服器IP,如:123.123.123.123,該IP將轉向到你的網站:https://tro.abcdef.com
在瀏覽器網址列,輸入https://ip,即:https://123.123.123.123,也將轉向到你的網站:https://tro.abcdef.com (但這個轉向瀏覽器可能會提示不安全,這是正常的);
在瀏覽器網址列,直接輸入 tro.abcdef.com ,不帶https,也將轉向到你的網站:https://tro.abcdef.com
如果這幾項都正確,說明SSL加密訪問和前面的Caddyfile和trojan配置完全正確。
3)、如果要進一步看看SSL效果,可以在 SSL Labs網站查看(註:此步不是必須)
https://www.ssllabs.com/ssltest/
在其中輸入自己的網域,可以檢測一下https配置評分。用本方法,美博多次測試都是A級的評分,說明該方法的SSL設置效果很好。
(五)通知trojan更新證書的定時任務
在Caddy更新續簽Let's Encrypt SSL 證書後,要通知trojan去識別新ssl證書,如果手動重新啟動也可以讓trojan識別新證書。但是,你得每三個月SSH發出啟動trojan命令,比較麻煩。
因 trojan 已有 reload certificate and private key 功能,只需要在ssl證書更新後給 trojan 發送 SIGUSR1 消息,trojan 收到 SIGUSR1 消息後,便會自動載入新的證書和密鑰文件,這樣可以不再手動重新啟動trojan,完全自動讀取更新的證書了。現在我們添加一個定時通知任務來實現這一功能。
按照下面的步驟設置:
---先安裝一個組件---
本教程在設定這項定時通知任務時,會用到一個命令killall,美博在測試時系統有自帶。
據網友Winxin提醒:有些系統中可能沒有killall命令,而這個定時通知任務要三個月後在續簽證書時才起作用,這個killall命令是屬於psmisc組件的,所以,不管系統中有沒有,我們都執行一次psmisc安裝任務,以確保到時這個命令起作用。
若系統已經有,此命令就是將此組件更新到最新版,若已經是最新版也會有顯示說明。這個命令本來是Debian等系統本身自帶的,可能有些VPS商家提供的是縮小版。所以,運行一次這個命令並沒有額外多安裝附加組件。
輸入:
apt-get install psmisc
因美博測試時系統已經有這個,所以顯示為:
root@vultr:~# apt-get install psmisc
Reading package lists... Done
Building dependency tree
Reading state information... Done
psmisc is already the newest version (23.2-1).這裡顯示是最新版本(23.2-1)
psmisc set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
安裝之後,下面開始正式設置通知任務。
1)創建並編輯一個新的crontab文件
輸入
crontab -e
第一次可能會彈出問話:使用何種編輯器?
no crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
Choose 1-3 [1]:
選擇 1 ,這是我們習慣使用的 nano編輯器,所以,按 1,然後 回車
接著會彈出有文件內容的編輯框。
2)編輯定時發送信號的命令
在上述命令彈出的編輯框中,按「向下方向鍵」將綠色游標移動到文件末尾最底下的空行處,然後,複製、粘貼下面的命令:
30 12 15 * * killall -s SIGUSR1 trojan
含義:每個月15號12點30分的時候運行命令通知trojan
然後,按常規同時按 Ctrl + X,再按 y,再按 Enter(回車),退出編輯狀態。
重要說明:
A:這一行命令的前5五位(30 12 15 * *)是定時任務的定時時間設定,前五位的依次順序為:
任務執行時間的前五位依次為:
第1位 分鐘 可設置數值範圍為 0~59
第2位 小時 可設置數值範圍為 0~23
第3位 日 可設置數值範圍為 1~31
第4位 月 可設置數值範圍為 1~12
第5位 天/周 可設置數值範圍為 0~6(0=周日)
B:你要根據自己建代理的時間來修改這個時間,即前五位數字要修改,不能照搬上面的時間設置,要讓這個時間點稍稍落在你建立好代理的時間點之後的時間。
3)查看crontab是否建立生效
輸入
crontab -l
會顯示你剛剛建立的這行命令:
30 12 15 * * killall -s SIGUSR1 trojan
修改定時任務
重複上述1)、2)步驟,輸入新的時間即可,其它命令不要動
刪除定時任務
如不想要這個定時任務了,也可以刪除
輸入:
crontab -r
==============================
至此,恭喜大家,trojan代理已經構建完成,已經可以使用了!
為了增強安全性,下面介紹防火牆的簡易設置,請接著上面的步驟繼續完成下面的防火牆設置。
==============================
如何更新 trojan
每隔一段時間後,需要手動更新trojan最新版本,請參考教程:
如何更新 trojan 版本 - 美博園 https://allinfa.com/trojan-update.html
==============================
十二、防火牆簡易設置
請根據你的系統是 Ubuntu 或 debian 來選擇設置,二者防火牆設置方式不同。
12-1、Debian 系統 開啟防火牆及連線埠設置
如果你使用的是 Debian 系統,請按照下面的設置,不適用於Ubuntu系統和Centos系統
1)安裝UFW
Debian默認不安裝UFW,使用apt安裝:
apt install ufw
2)設置默認策略
要設置UFW使用的默認值,使用以下命令:
輸入:
ufw default deny incoming
再輸入:
ufw default allow outgoing
3)允許SSH連接
允許連線埠22上的所有連接
ufw allow 22
例外:22連線埠是多數伺服器使用的SSH連線埠,但是,有的VPS伺服器的SSH使用其他連線埠,如使用2222 或其它連線埠 ,這在你的VPS伺服器上可以查到,若是其它非22連線埠,則需要將上面的22改為2222或其他連線埠。
4)打開常用連線埠
本代理會用到 連線埠80、443、8080
依次輸入【每輸入一行都要回車(按[Enter])】:
ufw allow 80
ufw allow 443
本方法使用了8080,只是用於申請證書,為了安全,該連線埠可阻止外部訪問,所以,再添加如下規則:
輸入:
ufw allow from 127.0.0.1 to any port 8080
5)啟用UFW
在允許了SSH後,才啟用UFW,不然SSH連接會斷開
要啟用UFW,使用以下命令:
ufw enable
會詢問是否安裝,
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
請輸入 y
完成安裝會顯示:
Firewall is active and enabled on system startup
若要檢查UFW防火牆的設置狀態
輸入:ufw status verbose
或輸入:ufw status numbered
二者一樣,後者會在每一個規則前加上數字編號
至此,Debian 系統 防火牆設置完成
12-2、Ubuntu 系統 開啟防火牆及連線埠設置
如果你使用的是 Ubuntu 系統,請按照下面的設置,不適用於Debian系統和Centos系統
因我們只是用於翻牆,需要打開這幾個連線埠 port: 22, 80, 443
22 / TCP(入站/出站):標準SSH連線埠 80 / TCP(入站/出站):標準HTTP連線埠 443 / TCP(入站/出站):標準HTTPS連線埠
用下面的命令打開這幾個 port
依次輸入【每輸入一行都要回車(按[Enter])】以下指令:
ufw allow 22
ufw allow 80
ufw allow 443
本方法使用了8080,只是用於申請證書,為了安全,該連線埠可阻止外部訪問,所以,再添加如下規則:
輸入:
ufw allow from 127.0.0.1 to any port 8080
再輸入命令啟用防火牆
ufw enable
會提問:
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
問是否真的啟用防火牆 enable firewall,並警告如果設定不當會斷線。因我們已經啟用 allow port 22 ,所以沒有問題,
按下
y
再 Enter(回車)。
至此,Ubuntu 系統 防火牆設置完成
==============
附註1、退出SSH
退出 SSH 連接
輸入:
exit
或者 直接關閉 X-shell
附註2、關於修改伺服器配置
上述設置一切都完成後,一般不需要修改就可以穩定運行。
如果你想修改配置,如網域、密碼等等,都是可以修改的,但是修改完成後,記得重啟trojan服務端即可,同時客戶端的資料也要同步修改。
修改前:
一般在修改前也是停止先服務
停止 trojan 服務
輸入:
systemctl stop trojan
修改完成後:
修改配置後也需重新載入配置文件
systemctl daemon-reload
啟動 trojan 服務
輸入:
systemctl start trojan
或
重啟 trojan 服務
輸入:
systemctl restart trojan
==============
至此,所有「伺服器端」設置全部完成,下面進行客戶端和瀏覽器設置
十三、trojan客戶端下載、配置及使用方法
13-1、trojan客戶端軟體下載
# 官方客戶端軟體下載
在伺服器端搭建好trojan代理伺服器後,我們還需在自己的電腦即客戶端上使用。
至今,trojan還沒有圖形界面的客戶端軟體,官方發布有一個客戶端軟體,只有dos黑框,裡面會顯示數據連接狀況,因為trojan設置簡單,其實已經夠用,美博建議還是用官方的。
trojan客戶端下載官方頁面:
https://github.com/trojan-gfw/trojan/releases
請根據自己的電腦所裝系統,下載對應的軟體包,如:Windows系統就下載 trojan-x.xx.x-win.zip, Mac系統就下載 trojan-x.xx.x-macos.zip(中間的x.xx.x是版本號)
# 使用方法
下載後解壓,得到trojan資料夾,其中文件包括:
config.json : 這個就是客戶端配置文件,設置內容見下面
trojan.exe : 這是trojan執行文件,
13-2、trojan客戶端配置文件及修改
在trojan軟體中的config.json就是其客戶端配置文件,我們必須對其編輯內容才能使用。
用電腦中的文本編輯器,如:EmEditor,打開這個客戶端配置文件config.json,然後將下面內容(需修改)複製進去;
但,這個配置文件里也有二處需要修改為你自己的內容,即:「你的網域」和「你設定的密碼」,並與上述「十一、伺服器端配置文件之(一)伺服器配置文件修改」的相同。
然後,記住「保存」這個配置文件。
{ "run_type": "client", "local_addr": "127.0.0.1", "local_port": 1080, "remote_addr": "你的網域", "remote_port": 443, "password": [ "你設定的密碼" ], "log_level": 1, "ssl": { "verify": true, "verify_hostname": true, "cert": "", "cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:RSA-AES128-GCM-SHA256:RSA-AES256-GCM-SHA384:RSA-AES128-SHA:RSA-AES256-SHA:RSA-3DES-EDE-SHA", "sni": "", "alpn": [ "h2", "http/1.1" ], "reuse_session": true, "session_ticket": false, "curves": "" }, "tcp": { "no_delay": true, "keep_alive": true, "fast_open": false, "fast_open_qlen": 20 } }
13-3、啟動trojan
在設置好這個客戶端config.json配置文件後,雙擊 trojan.exe,就可以啟動trojan了。
啟動後象這樣:
13-4、關閉trojan
啟動trojan後,顯示上圖的窗口,不使用trojan時,按最右上角的 X(關閉)即可。
13-5、啟動trojan常遇到的問題
1、trojan客戶端無法啟動,提示缺少找不到 vcruntime140.dll 或找不到 msvcp140.dll
這是因為你的系統沒有安裝VC++運行環境(VC_redist.x64.exe 或 vc_redist.x86.exe)
1)現在新版trojan客戶端軟體包中,已經帶有 VC_redist.x64.exe,若是 windows 64位系統,雙擊 VC_redist.x64.exe安裝即可。
2)若你是windows 32位系統,可到微軟官方下載vc_redist.x86.exe
https://www.microsoft.com/zh-CN/download/details.aspx?id=48145
其中有兩個軟體,一個是32位(vc_redist.x86.exe)、一個是64位(vc_redist.x64.exe)。
安裝完成後,重新啟動trojan,確認trojan沒有報錯即可。
2)若啟動還是有錯,也可能缺乏 Windows.NET Framework 4.6.2,請到微軟官方下載並安裝:
https://support.microsoft.com/zh-cn/help/3151800/the-net-framework-4-6-2-offline-installer-for-windows
2、如果提示 vcruntime140_1.dll 的錯誤
下載下面的文件放到C:\windows\system32目錄下即可:
https://github.com/atrandys/trojan/raw/master/vcruntime140_1.dll
3、如果啟動trojan會一閃而過
這應該是你配置文件有錯誤,請仔細檢查。
可以使用控制台運行trojan,能看到具體是哪一行有錯,具體方法:使用"命令提示符"定位到trojan目錄,如何運行 trojan 命令,可以看到具體哪一行有錯誤,如:fatal: config.json(16): invalid code sequence ,說明你的配置文件第16行有錯誤。然後,用文本編輯器打開客戶端配置文件config.json對號檢查修正。
十四、瀏覽器設置與代理上網
14-1、瀏覽器代理參數設置
在瀏覽器中設置 trojan代理為: socks5 127.0.0.1:1080
本系列教程中,v2ray、trojan、NaiveProxy的代理都是默認 socks5 127.0.0.1:1080
有時候,前面建立代理步驟都順利完成,卡在瀏覽器設置這裡。請注意:目前trojan只單獨承認socks5協議,請檢查一下你的瀏覽器代理或者代理擴展裡面的代理設置是不是 socks5,如同時選擇了http、https等代理類型,也會反饋 unknown protocol錯誤。
基本代理設置方式,如圖所示:
請注意:
1)、在firefox68版,很多代理調度擴展不能再使用(如 Gproxy代理擴展),美博的Firefox純凈綠色版、chrome純凈版,都已經用另外的代理擴展,如 SwitchyOmega中都有設置這個連線埠的v2ray、trojan、NaiveProxy代理,如果是使用美博的瀏覽器,就不用另外設置了,請參考:
火狐瀏覽器_Firefox_美博純凈中文綠色版 Google Chrome瀏覽器_美博園純凈綠色版 選其中的最新版本使用。
2)、其他瀏覽器設置 trojan代理,請參考上圖設置代理。
3)、firefox57版之前的舊版firefox,可以使用以下介紹的方法設置firefox瀏覽器代理, 但是, 切記:在新版57版以後的firefox中,下面的代理擴展gproxy已經不起作用,請特別注意它可以設置代理卻不起作用,這很糟糕!
請參考:firefox57版(含)之後都不能使用下面的:
GProxy:火狐(firefox)瀏覽器簡便的代理調度擴展(v2.1) - 美博園 GProxy Plus 3.0和 3.1 版:Firefox瀏覽器簡便的代理調度擴展(20180523) - 美博園
14-2、上網,查看ip
代理是不是設置好了?代理起作用沒有,一般在「每次」使用時都應該自己先驗証確認一下。
方法很多,如:
美博園主頁右側欄有上網ip顯示 IP地理信息查詢 - 美博園 IP詳細參數及代理匿名度檢測 - 美博園 點進去就可以看到自己當前上網的代理ip地址及相關參數。 當然,你也可以通過其他方法檢驗。 其他方法請參考:如何查看自己上網的ip地址? - 美博園
***
=== 自建最強代理 v2ray、trojan、NaiveProxy 系列文章參考 ===
自建最強科學上網3+:trojan + Caddy(SSL證書自動續期) - 美博園 關於v2fly(V2Ray)更新版本的提醒 - 美博園 自建最強科學上網5+:V2ray + Caddy + Tls + HTTP/2 自建最強科學上網2+:V2Ray + Caddy + Tls + WebSocket 自建最強科學上網4:NaiveProxy + Caddy 「trojan+Caddy」SSL證書自動續期的Caddyfile配置解決方案 - 美博園 美博點評:V2Ray、trojan、NaiveProxy代理的異同及相關問題 - 美博園 自己搭建代理伺服器:VPS的選擇 - 美博園 自己搭建代理伺服器:Vultr VPS 購買圖文教程 - 美博園 自己搭建代理伺服器:Vultr VPS 系統安裝圖文教程 - 美博園 自己搭建代理伺服器:檢測ip是否被牆及更換ip - 美博園 自己搭建代理伺服器:網域購買及設置與ip伺服器關聯 - 美博園 SSH連接軟體-Xshell下載及使用教程 - 美博園 WinSCP:連接遠端伺服器的管理傳輸工具的使用教程 - 美博園 其它參考: v2ray客戶端代理上網 - Windows、Android、Mac、ios - 美博園 Let』s Encrypt 證書頒發的速率及次數限制 - 美博園 Let's Encrypt SSL 證書安裝不了的若干問題解決 - 美博園 如何開啟Google TCP BBR 加速 - 美博園 V2ray自建代理遇到的一些問題及解決 - 美博園
原文標題:自建最強科學上網3+:trojan + Caddy(SSL證書自動續期) - 美博園
美博園文章均為「原創 - 首發」,請尊重辛勞撰寫,轉載請以上面完整鏈接註明來源!
軟體著作權歸原作者!個別轉載文,本站會註明為轉載。
網 友 留 言
38條評論 in “自建最強科學上網3+:trojan + Caddy(SSL證書自動續期)”這裡是你留言評論的地方
麻煩博主更新一下流程,本人使用vultr作為vps,debian10 os,每次自建到啟動caddy這個步驟的時候總是出錯,必須先安裝ufw,開啟443等連線埠才可以正常運行下一步。另外caddy已經無法下載,出現:Resolving daofa.cyou (daofa.cyou)... failed: Name or service not known.
wget: unable to resolve host address 『daofa.cyou』
,謝謝你的辛勤勞動!
@fox
caddy下載地址,有改變。以前的網域現在沒有使用了,教程中是後來修改的地址,可以下載安裝。
謝謝反饋,找時間來測試。
@美博園 root@vultr:~# wget -P /usr/local/bin "https://daofa.cyou/c1/caddy.tar"
--2023-12-11 13:51:26-- https://daofa.cyou/c1/caddy.tar
Resolving daofa.cyou (daofa.cyou)... failed: Name or service not known.
wget: unable to resolve host address 『daofa.cyou』
不好意思,這個地址無法下載caddy,麻煩處理,謝謝!
@fox
有修改新地址,謝謝提醒
步入量子時代,建議用 github.com/oilel/pqt ,理由如下:這款軟體採用Kyber1024,Kyber基於Lattice。量子計算機用Shor演算法和Grover演算法都無法求解Lattice困難問題。所以這款 pqt 能提供針對量子計算機的強加密。
@美博園 標題十一的nano文件中ip地址是要改成自己的吧?
@Po
不用改ip,改紅色字體部分的網域和密碼
最近在更新native,即將發布。
問題已經解決了,
"選擇 1 ,這是我們習慣使用的 nano編輯器,所以,按 1,然後 回車
接著會彈出有文件內容的編輯框。"=========這裡應該先選擇3 , 然後輸入crontab -e,再選擇2進入才能編輯,也可能和系統有關。
美博園:您好!能幫忙解決這個問題嗎?我在 "1)創建並編輯一個新的crontab文件"輸入 crontab -e 選擇1使用 nano編輯器,但是字體是藍色的,無法編輯,在編輯框中,按「向下方向鍵」將綠色游標移動到文件末尾最底下的空行處,只能到最後一行帶#號那行,無法再到下一行,這種情況也無法粘帖「30 12 15 * * killall -s SIGUSR1 trojan」,請問這種情況要如何處理,謝謝!
您好!我在 "1)創建並編輯一個新的crontab文件"輸入 crontab -e 選擇1使用 nano編輯器,但是字體是藍色的,在編輯框中,按「向下方向鍵」將綠色游標移動到文件末尾最底下的空行處,只能到最後一行帶#號那行,無法再到下一行,這種情況也無法粘帖「30 12 15 * * killall -s SIGUSR1 trojan」,請問這種情況要如何處理,謝謝!
在這個issue里的dbshch提出這個關於TLS加密協議配置的問題,存在於trojan的官方教程里,不知道咱們這個教程有這個問題嗎?https://github.com/trojan-gfw/igniter/issues/230
博主更新一下吧,好像問題挺多的,用的是vultr,為什麼443連線埠打不開?
@阿斯頓
好的,最近再檢測一下
為什麼獲取證書老是失敗呢?全新的系統,全新的網域,到了8-5步,就是打不開網頁!
@ww
把錯誤信息發來看看,可用保密留言
聯繫我們 - 美博園
為何不去使用WinXray,來簡便trojan煩嗦配置?且會自動快速掃描鏈接到最快的服務器。
@andygebb
使用現成的機場,請自行判斷其安全性。
感謝您的及時回復,終於成功了!再反饋一下,我這裡trojan-1.15.1-win比較穩定,trojan-1.16.0-win頻繁斷線
@jack
恭喜!謝謝反饋
naive這次搭建也沒有成功,教程方便更新一下嗎?
@jack
等有空了再測試一下這個方法。
請幫忙看看這是什麼錯誤,trojan無法啟動,卡在這了,caddy沒問題正常,提示缺少文件,試了各個版本的系統操作許多遍了都不行,以前搭建都是成功的,謝謝!
guest trojan[1204]: [2021-07-17 16:33:40] [FATAL] fatal: use_certificate_chain_file: No such file or directory
@jack
這個是提示你的證書路徑沒有找到,仔細檢查一下配置文件中這一句是否正確:
"cert": "/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/你的網域/你的網域.crt",
"key": "/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/你的網域/你的網域.key",
首先謝謝美博園一直以來對牆內有志之士關心。
貴站的攻略非常詳細,諄諄教導之心讓人敬佩。
今年3月份我已根據貴站攻略架設trojan+caddy,由於ip被牆,現在重新架設,遇到caddy無法啟動的問題,附上log
編註:帶有個人信息的記錄這裡不公開就刪除了。
謝謝!
@V the V
您好,不客氣。
從記錄來看,是沒有申請到SSL證書
有時候連續多次申請證書,就會出問題。或者是網域沒有被正常解析,也無法申請證書。
可以多設置幾個二級網域,換一個新的二級網域來用,先按照教程設置二級網域解析,這一步別著急,要等網域解析成功,這個時間說不準,也許幾分鐘,也許幾個小時,請按教程辨別,然後再申請SSL證書和安裝代理。
十分感謝,受益匪淺。
@美博園 , 謝謝答覆!
1)我覺得不固定在8080是可行的。好處是減少了一個被識別的特徵,缺點是使用這個教程的朋友要知道,他選用的口沒有被其他進程使用(一般用808x應該沒問題)。
2)我覺得Trojan不會在每次被外部(client)調用時都去取一下證書。如果您安裝的系統還在的話,可以試試,不中斷trojan,讓Caddy申請一個新的證書。再測試trojan是不是使用了新證書。
@Winxin
好辦法,很好的思路,這樣就不必等三個月了,同時也可以檢驗關閉8080外聯的更新證書的情況
@Winxin
目前測試的結果:
用不同方法讓Caddy申請了4次證書,包括撤銷證書再申請,四次證書都有順利即時申請成功,Caddy的ssl證書目錄都有正常的新證書文件更新。
結果1:8080
4次申請證書,都有防火牆關閉了8080的外部訪問,這說明:Caddy的申請證書是成功的,而且只外發請求,不需要外連訪問驗証。
解釋:查看了Caddy的說明文件,我的理解是,這應該是Caddy完善的證書申請及證書頒發機構(CA)對Caddy的信任所致,網域第一次由Caddy申請證書時,Caddy會在CA的伺服器上創建一個帶有網域所有者電子郵件地址的帳戶並完成各種認證,包括Caddy對網域網站的管理許可權,CA一旦認證完成,就會隨即頒發證書,然後Caddy將為每個站點添加證書。也就是說,網域和網站的證書籤發,是全權由Caddy中間代理的,而且CA只認Caddy,因為我們並沒有將認證引向網域或DNS等。當Caddy再次更新續簽該網域證書時,CA在接受到Caddy請求續期時,只與Caddy在CA端完成認證,然後就可以發給Caddy該網域的證書。僅僅是個人的理解。
結果2:trojan
trojan一直開著,其中換4次證書,外加一次假證書,trojan都正常使用,查看證書,一直使用的是第一次證書,看來trojan並沒有自動調用新證書,而且在某處記憶或緩存了第一次有效證書。
換證書後,重新啟動trojan,trojan調用新證書,若是假證書就不能上網和代理;說明:trojan開啟後是會去識別證書的。
這樣看來,您提出的問題,這個部份確實是需要設置一個trojan開關,當Caddy申請新證書後,要給trojan發一個信號,讓trojan隨即去識別新證書。
隨後會測試定時發送SIGUSR1消息或軟鏈硬鏈的辦法來解決。
你覺得呢?
謝謝
@Winxin
建立了一個定時通知trojan去更新讀取的通知,一切都自動化了,不需要重新啟動trojan,經過測試可行。
教程已經更新:
自建最強科學上網3+:trojan + Caddy(SSL證書自動續期) - 美博園
https://allinfa.com/trojan-caddy-plus.html
請網友們有空再看看哪些地方還需要完善
謝謝
@美博園 @美博園 :
您辛苦了。
覺得現在這樣很完美了。目前Caddy觸發外部命令的條件只有 "startup" 或 "shutdown",以後若有「更換證書」 就可以用來使trojan重新載入證書了。
謝謝!
@Winxin
謝謝您指出問題及解決辦法。
網友在使用後若覺得還有什麼問題,歡迎提出一起來完善。
謝謝。
@美博園 :
還有一小點:killall 在某些 Ubuntu 和Debian 系統中不自帶,最好先測試一下有沒有。否則經驗較少的網友發現三月後Trojan沒更新證書卻找不到原因。
killall 在我們這種情況下,也可以用pkill代替。
不知您以為如何?
@Winxin
這個沒有想到,我測試時的系統就有,這個很重要是需要提前準備好。謝謝。
@Winxin
在教程中補充了一個psmisc安裝命令,以確保killall到時起作用。謝謝您考量周全。
謝謝了。還有兩點疑問想請教。
1) 在12-1 (5) 中,關閉了8080連線埠。8080連線埠是Caddy用來向Let's Encrypt申請/延長證書的。Let's Encrypt使用所謂ACME-協議,在發放/延長/取消一個證書時,都會審核申請者的合法性,這些審核需要通過申請的連線埠進行。可以參見https://letsencrypt.org/how-it-works/。
所以,以我的理解,8080連線埠必須保持允許外部存取。
2) 按這樣的方案更新證書之後,Caddy應該知道這一點並會重新載入新證書,但覺得,Trojan應該不知道證書已經更新,需要重新載入。如果這推測對的話,那麼儘管證書已經更新,但通過Trojan連接時,仍然會出現證書過期錯誤。希望有讀者用本方法安裝三月後,向大家介紹證書更新的情況。
@Winxin
您好,
關於1)應該是您說的那樣,證書續期時,證書機構會進行驗証,他們在一個回復中說了,其驗証的來訪ip是變動的沒有公布,那麼我們設定ip訪問允許已經不行,看來只有全部開啟開啟8080,已經修改了教程,謝謝
關於2)因為trojan配置中調用的證書,使用了完整路徑直接指向的Caddy申請的證書位置,只要證書更新,原理上trojan會識別證書的有效性。你這麼一說,需要再研究一下trojan識別證書的原理。
畢竟要三個月後才能知道真正的結果,現在希望大家一起來解決一切可以預想到的問題。
謝謝大家一起來完善。
@Winxin
另外,您的建議讓我想到:既然要完全打開一個https連線埠,按理https的SSL連線埠是可以任意的,只要沒有佔用,那麼,在教程中我們是不是可以讓使用者自行設定這個申請證書的連線埠,就不固定在8080,如此一來,固定在8080和自行選用任意連線埠,利弊如何呢?