centos7 搭建trojan實現"代理上網"

前言

    前段時間,爲了上網,大家懂的,買了服務器搭了ss,本來好好的,但是在手機上連接玩了一會,就出事了,發現ip已經無法訪問了,服務器也登錄不上了,就這樣非常速度的就over了,果然ss還是很容易很識別到,爲了不那麼容易被識別到,爲了能愉快的上網,我百般搜尋,發現了一個很有趣的項目: trojan

github地址: https://github.com/trojan-gfw/trojan

按照github上的項目說明就是:一種無法識別的機制,可以幫助您繞過GFW。號稱理論上無法識別,絕對穩定。目前最新爲1.12.2版,其整體思路大概就是將流量模仿爲最常見的https,以達到誘騙GFW的目的,詳細的介紹請直接查看官方文檔,官方文檔寫的也很詳細,看不懂英文沒關係,直接chrome瀏覽器翻譯就好。

官方文檔:https://trojan-gfw.github.io/trojan/

 

 

在搭建前,得說一下,得說明一下幾點:

1. 此項目目前只支持pc端客戶端,安卓移動端還在測試,還沒有發佈第一版的穩定版,但是有測試版可以試用,也是可以用的。

2. 此種方式部署起來比較複雜麻煩,但是安全穩定。各有利弊,嫌麻煩的話,還是用最簡單的ss就行。

 

 

正文

    好了,下面開始進行搭建

環境:

centos7

trojan1.12.2

 

1. 準備服務器

    服務器,centos7,最低配,1核1G,有帶寬。自行購買。國外的服務商還是很多的。購買服務器這裏就不說了

 

2. 部署trojan服務端

下載最新安裝包到服務器上,複製此連接地址到服務器上進行下載:

# github上下載最新版本壓縮包
$ cd /opt
$ wget https://github.com/trojan-gfw/trojan/releases/download/v1.12.2/trojan-1.12.2-linux-amd64.tar.xz

# 解壓
$ tar -xvf ~/trojan-1.12.2-linux-amd64.tar.xz

# 複製服務端配置文件
$ cd trojan
$ cp examples/server.json-example ./server.json

# 默認的配置文件爲config.json,此配置文件爲客戶端配置,上一步複製了服務端示例配置爲server.json
# 修改服務端配置server.json
$ vim server.json
----------------------------------------------------------------------------
{
    "run_type": "server",
    "local_addr": "0.0.0.0",
    "local_port": 443,
    "remote_addr": "127.0.0.1",
    "remote_port": 80,
    "password": [
        # 密碼,這裏需要自己修改
        "yourpassword"
    ],
    "log_level": 1,
    "ssl": {
        # ssl證書路徑,需要自己修改,只修改這兩處,其他默認
        "cert": "/opt/certs/2314879_abcdefg.xyz.pem",
        "key": "/opt/certs/2314879_abcdefg.xyz.key",
        "key_password": "",
        "cipher": "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256",
        "prefer_server_cipher": true,
        "alpn": [
            "http/1.1"
        ],
        "reuse_session": true,
        "session_ticket": false,
        "session_timeout": 600,
        "plain_http_response": "",
        "curves": "",
        "dhparam": ""
    },
    "tcp": {
        "prefer_ipv4": false,
        "no_delay": true,
        "keep_alive": true,
        "fast_open": false,
        "fast_open_qlen": 20
    },
    "mysql": {
        "enabled": false,
        "server_addr": "127.0.0.1",
        "server_port": 3306,
        "database": "trojan",
        "username": "trojan",
        "password": ""
    }
}
----------------------------------------------------------------------------

 

配置文件解釋如下,以官方文檔:https://trojan-gfw.github.io/trojan/config  爲準。

  • run_type:運行特洛伊木馬 server
  • local_addr:木馬服務器將綁定到指定的接口。::如果您知道自己在做什麼,請隨意將此更改爲其他地址。
  • local_port:木馬服務器將綁定到此端口
  • remote_addr:遇到其他協議時木馬服務器將連接到的端點地址
  • remote_port:遇到其他協議時木馬服務器將連接的端點端口
  • password:用於驗證的密碼數組
  • log_level:轉儲多少日誌。0:全部; 1:INFO; 2:警告; 3:錯誤; 4:致命; 5:關閉。
  • sslSSL具體配置
    • cert:服務器證書強烈建議由CA簽名
    • key:用於加密的私鑰文件
    • key_password:私鑰文件的密碼
    • cipher:要使用的密碼列表
    • prefer_server_cipher:是否更喜歡連接中的服務器密碼列表
    • alpnALPN要回復的協議列表
    • reuse_session:是否重用SSL會話
    • session_ticket:是否使用會話票證進行會話恢復
    • session_timeout:if reuse_session設置爲true,指定SSL會話超時
    • plain_http_response:使用此文件響應普通的http請求(原始TCP)
    • curvesECC使用的曲線
    • dhparam:如果留空,將使用默認(RFC 3526)dhparam,否則將使用指定的dhparam文件
  • tcpTCP具體配置
    • prefer_ipv4:當存在域的IPv6和IPv4地址時是否連接到IPv4地址
    • no_delay:是否禁用Nagle的算法
    • keep_alive:是否啓用TCP Keep Alive
    • fast_open:是否啓用TCP Fast Open(需要內核支持)
    • fast_open_qlen:服務器對尚未完成三次握手的TFO請求隊列大小的限制
  • mysql:見Authenticator

 

3. 配置說明與準備

    上面我們配置了server.json服務端配置,大部分直接默認即可,只需要修改密碼和ssl證書。這裏對於不明白的小白,我要解釋一下,ssl證書是web訪問時的加密證書,我們用瀏覽器訪問網頁時,會發現有的地址是http開頭,有的是https,https就是在http的基礎上進行了ssl加密的訪問,這個有什麼用呢,就是可以在傳輸數據時,通過ssl證書將數據加密,加密後的數據傳輸就會更加安全,數據傳輸到網頁的後臺後通過對應的ssl證書進行解密。然後處理相對的http的連接傳輸數據是明文的,就是如果數據傳輸中途,被別人截獲了,是可以清楚的看到你傳輸的數據的內容的,常見你的比如運營商劫持,就是你的電信運營商,在你瀏覽網頁時,劫持你的瀏覽數據,然後在數據中添加廣告什麼的。國內很常見,因爲國內網站很多都是http明文傳輸的,而國外如美國,是強制網站必須使用https進行傳輸的。

    ssl證書都是對應的一對,可以簡單理解爲一個加密一個解密,是一一對應的。而我們這次部署的trojan就是將流量僞裝成https的流量,所以同樣的需要使用ssl證書進行加解密,這樣數據即使被中間截獲了,也破譯不出數據的內容,也可以誘騙別人認爲是正常的https訪問流量,以此來規避gfw,增加安全性,你懂的。

    那麼ssl證書怎麼來的呢,有兩種方案,1:通過正規的方式,在ssl證書服務商處申請證書。使用這種正規的證書,網站在被瀏覽時,在瀏覽器上會顯示一個安全的綠色的🔒的圖案,顯示此網站傳輸數據是安全的,正規的。我們平時瀏覽器訪問的網站,大多是這樣的。2: 自簽證書。就是自己通過工具生成一對ssl證書,然後使用此證書進行加解密。功能是一樣的,但是使用說的證書的網站,訪問時瀏覽器會提醒證書不可信,不安全,會顯示紅色的🔒。

    那麼這裏我們要的ssl證書,應該用哪種呢,官方推薦是第一種,最好是正規的ssl證書,這樣最安全。那麼怎麼申請ssl證書呢。申請證書需要哪些東西呢:

    ssl證書是與域名綁定的,所以在申請ssl證書之前,我們需要一個域名。 

域名的話,之前有免費域名可以申請:freenom.com。 但是現在這個網站越來越不太穩定,有點問題,總是申請不上。另外,申請域名不能在國內的服務商處進行申請,比如阿里雲,騰訊雲等,因爲國內的域名需要備案(在政府那進行記錄,審批),然後才能使用,由於我們這用途,不可能去備案的,而且備案需要很長的時間。所以在國外的服務商處註冊域名,因爲國外的域名除了.cn的外,不需要備案,即買即用。這裏我在最便宜的域名服務商處購買的域名,地址如下:https://www.namesilo.com/

    雖然取個域名名稱,搜索一下,然後找最便宜的進行購買,最便宜的一般是0.99美元一年,一般是.top或者.xyz爲後綴的域名。如下:

選擇一個然後進行購買,購買時需要註冊用戶,雖然填填信息註冊就行了,註冊完成購買完成後,就有了自己的域名。

 

然後,域名有了,我們就可以申請ssl證書了,直接在阿里雲可以申請免費的ssl證書,用支付寶登錄即可。購買界面如下:

 

購買完成後,點擊申請,填入剛纔購買的域名,注意這裏要選擇手工DNS驗證:

 

申請完後後,會出現一個驗證消息,這個是需要你在你的域名處,添加這個解析,然後通過驗證後,才能證明這個域名是你的,才能成功申請到ssl證書。

 

然後進入域名,點擊藍色的小球,進入域名解析,添加一個txt的域名解析,將上面主機記錄填入域名最前面,記錄值填入,然後TTL填入3600,3600秒是這個網站最低的時間了,也就是最低3600秒後,這個解析就會生效。一般要不了那麼久,幾分鐘就可以了。另外,域名最開始有很多默認的域名解析,全部都刪除調,直接點下面紅色的X,然後除了做這個ssl證書的驗證解析外。我們再將你購買的服務器的外網ip地址,解析到此域名。新增A記錄。如圖我做了兩個,一個空的A記錄,還有一個www的A記錄。都是解析到一樣的服務器ip地址。

 

好的。做完了這些之後,稍等幾分鐘,然後去阿里雲ssl證書申請那裏,點擊驗證,驗證成功後,就可以拿到ssl證書了,然後在證書處選擇下載:

 

下載完成後,將其上傳到服務器上,解壓後,保存到指定目錄,然後就可以在配置文件中指定此目錄啦。參考的我server.json的配置。ok,到此就算完成證書和域名的準備。然後呢官網文檔還建議我們部署一個可用的http服務,用來欺騙gfw。

也就是說,我們可以隨便在網上下載一個靜態網站模版,然後啓動web服務,這樣當通過http訪問我們域名的時候,就可以訪問到這個靜態網站,而通過https訪問時,如果判斷是trojan客戶端的訪問,那麼就連接服務端,形成代理,如果不是,則返回http的網站頁面給他。哈哈,是不是比較雞賊。所以我們這裏隨便部署一個靜態網頁:

# 安裝apache
$ yum install httpd

# 百度上隨便找一個靜態網站下載下載,解壓
$ wget http://down.cssmoban.com/cssthemes5/cpts_1679_coq.zip
$ unzip cpts_1679_coq.zip

# 將解壓後的文件,全部移動到/var/www/html下
$ mv cpts_1679_coq/* /var/www/html

# 開啓apache服務
$ systemctl start httpd
$ systemctl enable httpd

# 防火牆默認是沒開啓的,這裏就不做防火牆設置,如果有防火牆,就開放一下80,443的端口

然後,你訪問一下你的域名,就能進入自己的部署的靜態網站:

 

4. 啓動trojan服務端

    ok,到此所有的準備都完成了,現在就可以啓動trojan服務端了,trojan目前沒有後臺啓動的選項,我這裏通過nohup來實現後臺啓動,具體如下:

# 確保安裝openssl依賴
$ yum install openssl

# 啓動服務,指定server.json配置,啓動服務端
$ cd /opt/trojan
$ nohup ./trojan -c server.json > server.log 2>&1 &

# 查看端口監聽,可以看到443的端口監聽。則啓動成功
$ netstat -lnpt
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      5080/./trojan       

 

5. 客戶端使用

    服務端部署完成了,現在要進行客戶端的部署。這裏只說pc端,手機端的話,請查看此項目:https://github.com/trojan-gfw/igniter ,在這裏下載最新的手機端apk來進行試用。

pc端的話,有windows和macos。由於我這裏用的macos系統,所以就示範一下客戶端的常規安裝方式。

首先,下載安裝包,同樣github上,下載自己系統的二進制包。下載後,解壓,然後修改config.json配置文件。

{
    "run_type": "client",
    "local_addr": "127.0.0.1",
    "local_port": 1080,
    # 這裏填上你的域名
    "remote_addr": "amos-x.xyz",
    "remote_port": 443,
    "password": [
        # 你在服務端上設置的密碼
        "yourpassword"
    ],
    "log_level": 1,
    "ssl": {
        "verify": true,
        "verify_hostname": true,
        # ssl證書,更服務端的一樣的ssl證書,用來加密數據的
        "cert": "/usr/local/etc/trojan/2314879_amos-x.xyz.pem",
        "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-SHA256:ECDHE-RSA-CHACHA20-POLY1305-SHA256: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
    }
}
  • run_type:運行特洛伊木馬 client
  • local_addrSOCKS5服務器接口將綁定到指定的接口。隨意將其更改爲0.0.0.0::1::或其他地址,如果你知道自己在做什麼。
  • local_port:一個SOCKS5接口將綁定到此端口
  • remote_addr:服務器地址(主機名)
  • remote_port: 服務器端口
  • password:用於驗證的密碼(僅使用陣列中的第一個密碼)
  • log_level:轉儲多少日誌。0:全部; 1:INFO; 2:警告; 3:錯誤; 4:致命; 5:關閉。
  • sslSSL具體配置
    • verify:是否驗證SSL證書強烈推薦
    • verify_hostname:是否強烈建議驗證SSL主機名(在sni字段中指定)
    • cert:如果verify設置爲true,則CA可以提供服務器使用的相同證書或證書集合。如果將此字段留空,OpenSSL將嘗試查找系統CA存儲,並且可能會失敗。
    • cipher:要發送和使用的密碼列表
    • sniSSL握手中的服務器名稱指示字段。如果留空,則將其設置爲remote_addr
    • alpnALPN要發送的協議列表
    • reuse_session:是否重用SSL會話
    • session_ticket:是否使用會話票證進行會話恢復
    • curvesECC曲線發送和使用
  • tcpTCP具體配置
    • no_delay:是否禁用Nagle的算法
    • keep_alive:是否啓用TCP Keep Alive
    • fast_open:是否啓用TCP Fast Open(需要內核支持)
    • fast_open_qlen:服務器對尚未完成三次握手的TFO請求隊列大小的限制

 

按我的配置配置後,啓動trojan,由於trojan不是後臺服務。所以windows可以將其設爲後臺守護進程。具體操作的話,自行百度解決就可以來,這裏就不綴述了。

macos的話,可以通過brew來安裝。

# brew安裝trojan
$ brew install trojan-gfw/trojan/trojan
$ brew install trojan

# 安裝後,配置文件在/usr/local/etc/trojan/config.json
# 修改此配置文件後,使用此命令作爲後臺服務啓動
$ brew services start trojan

# 啓動後,查看端口監聽,可以看到1080端口的監聽,則爲正常啓動

 

6. 使用SwitchyOmega實現智能代理

    trojan客戶端啓動後,監聽1080端口,直接在瀏覽器上設置代理,指定爲本機的1080端口,然後訪問一下google,你就會發現,可以正常訪問了,協議要選擇socks代理。

 

 

但是這樣的話,通過瀏覽器的所有請求,都會經過代理,而我們都喜歡在訪問國內網站時,不通過代理,訪問國外網站時才通過代理,這樣即提高了速度,又節省了流量。

這裏使用chrome瀏覽器。如果又外網的,可以直接在chrome的應用中心搜索直接添加此插件。如果沒有的,可以百度下載此插件,本地導入插件。

導入後,打開此查看選項,進行配置:

 

此配置是配置代理的地址,協議爲socks5。然後配置auto switch智能代理模式,默認爲直接連接,不實用代理,如果滿足規則則使用代理,而規則則是gfw的牆的地址列表,此地址列表在github上維護的,地址爲:https://github.com/gfwlist/gfwlist 。然後gfwlist的列表url地址爲:https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt。 將此地址填入下面的規則列表網址,點擊更新列表,然後應用即可。

然後開啓chrome瀏覽器的此插件,選擇智能代理模式,然後就可以愉快的上網啦。

 

 

結束

    ok,到此就結束啦。就可以愉快的上網啦。這裏我沒有很詳細的說明windows的客戶端的使用,其使用方法與服務端是一樣的,只是配置不一樣,用不同的配置啓動就可以了。致於如果設置爲後臺守護經常,讓其開啓自啓動,則需要各位用windows的守護進程來自行解決來,因爲我這裏是macos,所以只給出來macos的後臺運行的方式。沒有實際測試windows的,還請見諒。不過原理都是一樣的。😁

    有什麼問題,歡迎留言。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章