Ubuntu服务器透明代理方案

一些程序会读取环境变量去主动寻找代理通道,但是多数程序都没有这样的功能。链接一些被关照过的国外服务器不是慢到死就是丢包丢到死,这道墙实在讨厌,更新一些东西都急死人。
本方案代理用SS,通过ProxyChains使其他程序通过代理通道链接网络。
实际上ProxyChains使用的原理并不十分稳定,却是最方便的无奈之举。程序会把socket相关函数包括connect和sendto等全部挂钩(hook),然后通过自己的函数通过代理重新链接。通常情况下这样的做法不会有问题,但是一旦目标程序涉及底层函数的时候就会出现无法意料到的错误甚至直接崩溃。


开始前自行确定远端SS服务器没有问题。实际环境为Ubuntu,同样适用Debian。

安装ProxyChains

sudo apt-get install -y proxychains

安装SS

sudo apt-get install -y python-gevent python-pip
sudo pip install shadowsocks

配置代理参数

vim /etc/proxychains.conf

改最后一行(端口号1080自行定义和SS本地代理端口一致即可)

socks5  127.0.0.1 1080

创建SS配置文件

vim ~/ss.json

写入配置并保存

{
    "server":"服务器IP",
    "server_port":服务器端口8388,
    "local_port":本地端口1080,
    "password":"密码",
    "timeout":600,
    "method":"加密方式"
}

后台运行

临时开一个screen用来后台运行代理

screen -S ss
sslocal -c ~/ss.json

测试

配置好了直接curl测试一下

proxychains curl google.com

不出意外输出

ubuntu@ubuntu:~# proxychains curl google.com
ProxyChains-3.1 (http://proxychains.sf.net)
|DNS-request| google.com
|S-chain|-<>-127.0.0.1:1080-<><>-4.2.2.2:53-<><>-OK
|DNS-response| google.com is 216.58.200.14
|S-chain|-<>-127.0.0.1:1080-<><>-216.58.200.14:80-<><>-OK
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

可以看到DNS也是通过代理通道获取的。另外SS并不能用来Ping,因为ICMP协议并不被SS所支持,TCP链接是可以的,UDP协议需要看服务端。

标签: none

评论已关闭