Linuxlinux

4 - Ubuntu 16.04 + SSR翻墙

2018-04-22  本文已影响17326人  Miliimoulins

身为一名程序媛翻墙是必须的,mac和windows下都有现成的shadowsocks客户端,直接配置就好,在linux下翻墙稍微麻烦一些。不会翻墙都不好意思说自己是Linux用戶。本文提供一套可行的linux翻墙方案,当然前提是你要有SS账号提供商提供的服务器地址,端口等。

这是一个系列:
1、Ubuntu系统安装
2、Ubuntu 16.04 + nvidia + cuda9.1
3、Ubuntu 基本工作环境 + 深度学习环境配置
4、Ubuntu 16.04 + SSR翻墙

配置SSR客户端

Shadowsocks 与 Shadowsocksr 区别:
SS是原版,SSR是原版基础上衍生出来的第三方版本,兼容原版协议,比原版多了一些伪装功能(协议和混淆)。
SSR 主要特点是增加了一些人性化功能,比如服务器连接统计、连接管理、协议转换、多重代理等。

1、下载ssr客户端
git clone https://github.com/ssrbackup/shadowsocksr
2、配置ss文件

进入刚刚clone下来的文件夹,有一个文件叫config.json/user-config.json,这是配置文件的模板,复制一份到/etc/shadowsocks.json

cp config.json /etc/shadowsocks.json

然后对这个文件进行配置:

sudo gedit /etc/shadowsocks.json

用下面替换该文件中的内容(具体的服务器地址,端口,密码,加密方式,协议插件,混淆插件从SS帐号提供商那里获取。):

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

    "password": " ",
    "method": "chacha20",
    "protocol": "auth_sha1_v4",
    "protocol_param": "",
    "obfs": "http_simple",
    "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
}

主要用到的配置是下面的这几个选项:

"server": "0.0.0.0",  # 服务器地址  对于ss:ping+域名,得到地址。
"server_port": 80890,    # 端口
"password": " ",    # 密码
"method": "chacha20",      # 加密方式
"protocol": "auth_sha1_v4",  # 协议插件
"obfs": "http_simple",    # 混淆插件
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版本为系统自带python 2.7,缺很多东西。将python默认版本改为anaconda python 3(安装见系列3,推荐用这个),这是一种临时修改python默认版本的方法:

export PATH=~/anaconda3/bin:$PATH
source ~/.bashrc

【如果直接修改python默认版本为anaconda3: sudo gedit ~/.bashrc 在最后一行添加: export PATH=~/anaconda3/bin:$PATH ,保存。然后:source ~/.bashrc
然后再执行: python ~/shadowsocksr/shadowsocks/local.py -c /etc/shadowsocks.json ,成功:

IPv6 support
2018-04-20 15:53:35 INFO     util.py:85 loading libsodium from /home/miliimoulins/anaconda3/lib/libsodium.so.23
2018-04-20 15:53:35 INFO     local.py:50 local start with protocol[auth_sha1_v4] password [b'jfahtt'] method [chacha20] obfs [http_simple] obfs_param []
2018-04-20 15:53:35 INFO     local.py:54 starting local at 127.0.0.1:1080
2018-04-20 15:53:35 INFO     asyncdns.py:324 dns server: [('127.0.0.1', 53)]
4、转换HTTP代理

Shadowsocks默认是用Socks5协议的,对于Terminal的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的使用说明和配置界面。

5、配置浏览器

之前参考别人的方法来配置了firefox,it worked,但是到了chrome方法就不适用了。我们可以直接来修改全局网络
打开system settings->network->network proxy
Method:Manual
下面都设置为:127.0.0.1 端口:8123
点击 Apply system wide

Done!!!Cheers!

注意:

每次开机后都要执行:python ~/shadowsocksr/shadowsocks/local.py -c /etc/shadowsocks.json 来启动ss服务。
有时候不走运的话,误杀该进程(关机 或者关闭当前terminal 或者ctrl z当前python进程)会发生非常烦人的事:内网外网都上不了,重启也没用,会提示你:

curl: (7) Failed to connect to 127.0.0.1 port 8123: Connection refused

Solution:

6、Ubuntu开机后自动运行

现在可以科学上网了,可是每次开机都要手动打开终端输入命令,虽然命令并不长,但是每次都去手动输入,显得自己很low,而且关掉终端代理就关闭了(如果不是用的screen命令),还会引发上面一系列问题。

Solution:

我们可以在比如/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,成功的话会有信息输出。你也可以到浏览器去试试。
【 如果用的不是screen, 直接python的话:这个时候你虽然输入的少了,可是关了终端还是会掉的,我们可以让它在后台运行,nohup sh /home/shadow.sh & 。】

至此:开机后打开终端运行:sh /home/shadow.sh,就可以自由上网了。

这里我们需要 /etc下编辑一个叫rc.local的文件,需要root权限 sudo gedit /etc/rc.local
[ 或者:在终端先su获取root权限( ps: 关于su 输入密码之后显示su: Authentication failure的解决办法:

sudo passwd root    # 输入的命令
[sudo] password for miliimoulins: 
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

然后再次su就可以进入root权限了):gedit /etc/rc.local ]

编辑:在exit 0前面添加:sh /home/shadow.sh

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

sh /home/shadow.sh>/home/d.txt
exit 0

然后ctrl+s保存。
这个时候你可以reboot重启,测试下看看能不能后台自动运行。对于一般的需要开机自启动的对象到这里没问题了。
但是本例不行。可以先去看下我们要它输出的d.txt竟然发现是 Must be connected to a terminal,打开浏览器果然是无法连接代理服务器。

经过一番搜索发现远离linux是找不到screen这条命令?
参考对于sslocal执行时的解决办法:需要添加路径,发现sslocalssserver这两个命令是被存在 /usr/local/bin下面的,其实不用去profile添加了,直接把这两个文件移动到/bin下,就可以了。
但是对于screen不行。
所以目前还是先在开机后,打开终端输入sh /home/shadow.sh吧hhhhhh,还是很方便的。
关于如何顺利的开机自启动screen命令,现在先不花时间去研究了,毕竟一行命令已经很方便了。至少在windows和Mac下开机了也要手动打开shadowsocks这个软件。后面有时间弄好了再更新。

Whatever, cheers!

参考目录:
1、https://blog.csdn.net/superbfly/article/details/54950451
2、https://www.jianshu.com/p/c336fd0bdfbe

上一篇 下一篇

猜你喜欢

热点阅读