1. 程式人生 > >Ubuntu 18.04環境下搭建SSR(shadowsocksR)詳細流程

Ubuntu 18.04環境下搭建SSR(shadowsocksR)詳細流程

Ubuntu 18.04環境下搭建SSR(shadowsocksR)詳細流程

配置SSR客戶端

Shadowsocks與ShadowsocksR的區別:
SS是linux官方推出的網路代理原版,SSR是原版基礎上衍生出來的第三方版本,相容原版協議,但是比原版多了很多引數設定,即偽裝功能(協議和混淆)。
SSR的使用更方便,設定引數等操作更靈活,增加了一些人性化功能,比如服務連線統計、連線管理、協議轉換、多重代理等。

  1. 下載ssr客戶端
    在github上clone客戶端工程到當前目錄,完成之後當前目錄下會有一個叫shadowsocksr的資料夾
    git clone https://github.com/ssrbackup/shadowsocksr

  2. 配置ss檔案
    進入剛剛clone下來的資料夾,有一個檔案叫config.json,這是配置檔案的模板,裡面就是我們需要設定的代理引數,複製一份到/etc/shadowsocks.json:

    cp config.json /etc/shadowsocks.json

    然後對這個檔案進行配置:

    sudo gedit /etc/shadowsocks.json

    開啟檔案之後,我們看到的具體內容就包含了我們需要配置代理的詳細引數,具體情況如下圖所示:

{
    "server": "0.0.0.0",
    "server_ipv6": "::",
    "server_port": 8388,
    "local_address": "127.0.0.1",
    "local_port": 1080,

    "password": "m",
    "method": "aes-128-ctr",
    "protocol": "auth_aes128_md5",
    "protocol_param": "",
    "obfs": "tls1.2_ticket_auth_compatible",
    "obfs_param": "",
    "speed_limit_per_con": 0,
    "speed_limit_per_user": 0,

    "additional_ports" : {}, // only works under multi-user mode
    "additional_ports_only" : false, // only works under multi-user mode
    "timeout": 120,
    "udp_timeout": 60,
    "dns_ipv6": false,
    "connect_verbose_info": 0,
    "redirect": "",
    "fast_open": false
}

主要用到的配置是下面幾個選項,但是具體配置哪些引數還得看SS供應商給的引數情況,儘量多填但是要保證正確,如果有錯的話代理是不能通過的:

 	"server": "0.0.0.0",		//伺服器ip地址
 	"server_port": 8388,		 //伺服器埠
 	"password": "m",			//伺服器密碼
 	"method": "aes-128-ctr",	//加密方式
 	"protocol": "auth_aes128_md5",		//協議
 	"protocol_param": "",					//協議引數
 	"obfs": "tls1.2_ticket_auth_compatible",		//混淆
 	"obfs_param": "",								//混淆引數

3.啟動ssr客戶端:

python ~/shadowsocksr/shadowsocks/local.py -c /etc/shadowsocks.json        

注:如果出錯:

IPv6 support
Traceback (most recent call last):
  File "local.py", line 81, in <module>
    main()
  File "local.py", line 43, in main
    config = shell.get_config(True)
  File "/home/miliimoulins/shadowsocksr/shadowsocks/../shadowsocks/shell.py", line 299, in get_config
    check_config(config, is_local)
  File "/home/miliimoulins/shadowsocksr/shadowsocks/../shadowsocks/shell.py", line 129, in check_config
    encrypt.try_cipher(config['password'], config['method'])
  File "/home/miliimoulins/shadowsocksr/shadowsocks/../shadowsocks/encrypt.py", line 46, in try_cipher
    Encryptor(key, method)
  File "/home/miliimoulins/shadowsocksr/shadowsocks/../shadowsocks/encrypt.py", line 90, in __init__
    random_string(self._method_info[1]))
  File "/home/miliimoulins/shadowsocksr/shadowsocks/../shadowsocks/encrypt.py", line 119, in get_cipher
    return m[2](method, key, iv, op)
  File "/home/miliimoulins/shadowsocksr/shadowsocks/../shadowsocks/crypto/sodium.py", line 71, in __init__
    load_libsodium()
  File "/home/miliimoulins/shadowsocksr/shadowsocks/../shadowsocks/crypto/sodium.py", line 42, in load_libsodium
    raise Exception('libsodium not found')
Exception: libsodium not found

可能因為當前python版本為系統自帶的python2.7,卻很多東西,將python預設版本改為python3就可以,具體修改方法可以參考

Ubuntu16.04下完美切換Python版本

修改之後再執行上面指令就可以執行成功啦:

IPv6 support
2018-12-06 11:11:05 INFO     util.py:85 loading libsodium from libsodium.so.23
2018-12-06 11:11:05 INFO     local.py:50 local start with protocol[auth_aes128_md5] password [NAUgcj] method [chacha20] obfs [http_post] obfs_param [tvb.com]
2018-12-06 11:11:05 INFO     local.py:54 starting local at 127.0.0.1:1080
2018-12-06 11:11:05 INFO     asyncdns.py:324 dns server: [('127.0.0.53', 53)]

  1. 轉換HTTP代理
    shadowsocks預設是用socks5協議的,對於終端的get、wget等走的是http協議的地方是無能為力的,所以需要轉換成http代理,加強通用性,這裡使用的轉換方法是基於Polipo的。
sudo apt-get install polipo      # 安裝Polipo
sudo gedit /etc/polipo/config    # 修改配置檔案

將下面的內容整個替換到檔案中並儲存:

# This file only needs to list configuration variables that deviate
# from the default values. See /usr/share/doc/polipo/examples/config.sample
# and "polipo -v" for variables you can tweak and further information.
logSyslog = false
logFile = "/var/log/polipo/polipo.log"

socksParentProxy = "127.0.0.1:1080"
socksProxyType = socks5

chunkHighMark = 50331648
objectHighMark = 16384

serverMaxSlots = 64
serverSlots = 16
serverSlots1 = 32

proxyAddress = "0.0.0.0"
proxyPort = 8123

重啟Polipo:

/etc/init.d/polipo restart

驗證代理是否正常工作:

export http_proxy="http://127.0.0.1:8123/"
curl www.google.com

如果正常工作的話,就會返回一大串東西,其實就是從Google網頁上抓下來的內容,這樣終端裡面也可以訪問外網了。另外,在瀏覽器中輸入http://127.0.0.1:8123/便可以進入到Polipo的使用說明和配置介面。

  1. 配置瀏覽器
    無論對於firefox或者chrome,有的配置方法對與firefox管用,但是對於chrome卻不管用,所以這裡我們直接來修改全域性網路,對於firefox和chrome都適用。
    開啟setting -->Network -->Network Proxy : Method:Manual
    下面的幾欄都設定為:127.0.0.1 埠:8123 儲存或者應用到全域性(Apply system wide

  2. 至此,恭喜你,所有該設定的都已經設定完成了。

注意

每次開機後都要執行:python ~/shadowsocksr/shadowsocks/local.py -c /etc/shadowsocks.json來啟動ss服務。而且如果直接ctrl+c關掉程序或者關閉當前終端都會直接讓網路掛掉,百度網都上不上去,重啟電腦也沒用,所以處理方法是:

Solution:

  1. 首先一般這種情況下,如果你不是直接關閉的當前terminal,則你的Python程序可能還沒有殺掉,所以 ps aux|grep python,然後kill -9 process_number(那個python程序的process number)。
  2. 然後重新啟動ss服務。ps:我建議用screen命令來執行,至少不用擔心誤殺程序:screen python ~/shadowsocksr/shadowsocks/local.py -c /etc/shadowsocks.json。pps:screen模式下,ctrl+a,然後d(detach),或者直接可以關閉當前terminal。
  3. 如果還是不能上網: 重啟polipo:/etc/init.d/polipo restart
  4. 驗證:export http_proxy="http://127.0.0.1:8123/"curl www.google.com

更方便的處理方法,寫個指令碼:

我們可以在比如/home下新建個檔案叫做shadow.sh,在裡面寫上我們啟動ssr客戶端需要的命令,然後儲存即可。因為有時候會遇到啟動ss服務後依舊內網外網都不能上,就每次都自動重啟一下polipo吧:

#!/bin/bash
#shadow.sh
screen python ~/shadowsocksr/shadowsocks/local.py -c /etc/shadowsocks.json
/etc/init.d/polipo restart

到終端執行命令 sh /home/shadow.sh,成功的話會有資訊輸出。你也可以到瀏覽器去試試。

至此:開機後開啟終端執行:sh /home/shadow.sh,就可以自由上網了。