美文网首页Linuxlinux
4 - Ubuntu 16.04 + SSR翻墙

4 - Ubuntu 16.04 + SSR翻墙

作者: Miliimoulins | 来源:发表于2018-04-22 12:44 被阅读17326次

    身为一名程序媛翻墙是必须的,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:

    • 首先一般这种情况下,如果你不是直接关闭的当前terminal,则你的Python进程可能还没有杀掉,所以 ps aux|grep python,然后kill -9 process_number(那个python进程的process number)。

    • 然后重新启动ss服务。ps:我建议用screen命令来执行,至少不用担心误杀进程:screen python ~/shadowsocksr/shadowsocks/local.py -c /etc/shadowsocks.json。pps:screen模式下,ctrl+a,然后d(detach),或者直接可以关闭当前terminal。

    • 如果还是不能上网: 重启polipo: /etc/init.d/polipo restart

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

    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

    相关文章

      网友评论

      • b4db59aa02d0:用genpac配置pac代理可以不用担心浏览器的问题:blush::blush::blush:
      • 小鱼儿他老汉:SSR是否必须有自己代理服务器?如果代理服务器也被墙了怎么办?
      • 小小渡河:一看是程序媛,必须得关注😇😇
      • HelloNOW:非常感谢。太详尽了。收藏
      • shawnl111:您好,请问一下,我到curl www.google.com这一步,报错502 Server dropped connection是怎么回事呢? 还有,教程上安装的是ssr,但是第4点第一句说的却是ss使用socks5协议,这可以通用的吗
      • 0335ba3d2f79:反正开机都要手动启动SSR,直接复制一遍脚本也没啥,另外终端关了后ssr并不会关吧?我这边的测试是没有关的。不过Chrome和火狐都设置一下SwitchOmega比较好,国内的网站更快。最后:程序员小姐姐就是可爱哈哈哈哈
      • 9c8f3c859a5a:这样所有的连接走的都是国外服务器吧,能不能让国内的网站按原来的方式连接??
        就是其他平台客户端上的仅代理中国大陆无法访问的地址.
      • 8495b8346447:请问 第四步产生 Failed to connect to 127.0.0.1 port 8123: 拒绝连接
        是什么原因 该怎么解决
      • 小pxu:SwitchOmega的东西可以参考这个看,说是可以自动根据使用场景切换,https://blog.csdn.net/u010658816/article/details/79344970
      • ac415effa0a9:非常感谢,火狐可以上了,google全局设置也不行
        ac415effa0a9:@粗茶甜儿 非常感谢 我自己全局设置漏了一下
        Miliimoulins:按照前面一步步来应该可以的
      • dc7d798358d1:太棒了,谢谢作者这篇文章,Linux下实在有点头疼,Windows好多了,我是在vultr买的服务器,在Windows下搭好梯然后换Ubuntu17.10跟着你的教程完成了,确实厉害
        Miliimoulins:很高兴能帮助到你:blush:
      • Miliimoulins:@kbxwn 看一下步骤5,修改全局
      • Chamster:您好,有幸能够看到你的这篇教程,看完之后我有几个问题想要问您,第一个就是那个polipo可不可以用SwitchOmega来代替,还有就是通过什么设置可以使得终端也可以翻墙还有全系统都可以翻墙?
        awsome365:SwitchOmega是浏览器插件。配置完shadowsocks,用这个插件就可以上网(插件需配置)。只是浏览器翻用不到polipo。SwitchOmega有个好处就是可以用pac智能翻,作者在文中配置全局代理会导致访问国内网站速度变慢,不用omega的话建议设置系统自动代理(下载gfw的pac文件,在自动代理那一栏配置下载的pac路径,这样系统会根据pac文件识别是否调用socks5)。polipo是将socks5转为http,适用不是只走http的终端翻。除了polipo,proxychains也挺好用。有兴趣可以google下
        Chamster:@粗茶甜儿 好的,谢谢您的回复,我试一下,非常感谢
        Miliimoulins:@Chamster 我没试过SwitchOmega,你可以试试看。终端里就是步骤4说的基于Polipo转换HTTP代理。步骤5修改系统设置里的全局网络来全系统翻墙。

      本文标题:4 - Ubuntu 16.04 + SSR翻墙

      本文链接:https://www.haomeiwen.com/subject/fpaqlftx.html