陈中正的网络日志

Shadowsocks笔记

前几天使用Shadowsocks时遇到了问题,因此了解一些Shadowsocks的相关知识点,整理了一个笔记。

1、Shadowsocks介绍

1.1、不同版本

可自由使用 shadowsocks(python 版、libev 版)、shadowsocksR(python 版、libev 版)的任意一个,没有限制。1

  • python 版的特点是没有 ss-redir、ss-tunnel,且不需要编译,只需 python 环境;
  • libev 则是使用 c 语言开发的,性能较好。

本文以使用广泛的 shadowsocks(python、libev)为例,shadowsocksR(python、libev)的安装方式类似,具体请谷歌。

1.2、原理介绍

234

2、Shadowsocks安装

  • python
自行搜索
  • libev
brew install shadowsocks-libev

3、Shadowsocks运行

  • 服务端
python /usr/local/shadowsocks/server.py -c /etc/shadowsocks.json -d start
  • 客户端
## python
nohup sslocal -c /etc/ss-local.json </dev/null &>>/var/log/ss-local.log &

## libev
nohup ss-local -c /etc/ss-local.json </dev/null &>>/var/log/ss-local.log &

4、Privoxy提供http代理

shadowsocks只提供了SOCKS5的代理,而没有提供http代理,而很多软件仅提供了http代理的支持,比如需要使用shell命令行扶墙,或者使用git同步android的源代码,再或者更新android SDK,该怎么办呢?

Privoxy,它可以作为代理的代理,为我们解决上述问题!5

安装配置需要自行搜索!

5、PAC设置站点黑白名单

5.1、PAC是什么6

代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来访问一个网址。

一个PAC文件包含一个JavaScript形式的函数“FindProxyForURL(url, host)”。这个函数返回一个包含一个或多个访问规则的字符串。用户代理根据这些规则适用一个特定的代理器或者直接访问。当一个代理服务器无法响应的时候,多个访问规则提供了其他的后备访问方法。浏览器在访问其他页面以前,首先访问这个PAC文件。PAC文件中的URL可能是手工配置的,也可能是是通过网页的网络代理自动发现协议(WPAD)自动配置的。

5.2、如何配置pac

mac配置:
Preferences -> Network -> Advanced -> Proxies -> Automatic Proxy Configuration

6、终端配置代理

有两种方式可以实现,

  • http_proxyhttps_proxyall_proxy环境变量:
    • 非强制性的环境变量,部分软件可能不遵守;
    • Some programs, such as wget and (used by pacman) curl, use environment variables of the form "protocol_proxy" to determine the proxy for a given protocol (e.g. HTTP, FTP, ...). proxy_env
  • proxychains-ng 的LD_PRELOAD环境变量:强制性的环境变量,用来实现动态库替换。

6.1、设置环境变量

  • 方法一:http_proxy
# privoxy 默认监听端口为 8118
proxy="http://127.0.0.1:8118"
export http_proxy=$proxy
export https_proxy=$proxy
export no_proxy="localhost, 127.0.0.1, ::1"

# no_proxy 环境变量是指不经过 privoxy 代理的地址或域名
# 只能填写具体的 IP、域名后缀,多个条目之间使用 ',' 逗号隔开
# 比如: export no_proxy="localhost, 192.168.1.1, ip.cn, chinaz.com"
# 访问 localhost、192.168.1.1、ip.cn、*.ip.cn、chinaz.com、*.chinaz.com 将不使用代理
  • 方法二:all_proxy
export all_proxy="socks5://your.proxy:1080"

6.2、proxychains 方式

6.2.1. proxychains 原理

proxychains-ng 原理
简单的说就是这个程序 Hook 了 sockets 相关的操作,让普通程序的 sockets 数据走 SOCKS/HTTP 代理。

其核心就是利用了 LD_PRELOAD 这个环境变量(Mac 上是 DYLD_INSERT_LIBRARIES)。

在 Unix 系统中,如果设置了 LD_PRELOAD 环境变量,那么在程序运行时,动态链接器会先加载该环境变量所指定的动态库。也就是说,这个动态库的加载优先于任何其它的库,包括 libc。

ProxyChains 创建了一个叫 libproxychains4.so(Mac 上是 libproxychains4.dylib)的动态库。里面重写了 connect、close 以及 sendto 等与 socket 相关的函数,通过这些函数发出的数据将会走代理,详细代码可以参考 libproxychains.c。

在主程序里,它会读取配置文件,查找 libproxychains4 所在位置,把这些信息存入环境变量后执行子程序。这样子程序里对 socket 相关的函数调用就会被 Hook 了,对子程序来说,跟代理相关的东西都是透明的。

6.2.2. proxychains MAC下安装

关闭SIP -> 下载 -> 安装 -> 配置 -> 启动

具体参考proxy_chains_ng

Categories:  网络 

MySql 索引 »