Create a gist now

Instantly share code, notes, and snippets.

Embed
shadowsocks on openwrt

配置 shadowsocks

架设好 shadowsocks 服务端,在路由器上安装 shadowsocks 客户端,并配置 /etc/config/shadowsocks.json ,假设本地监听端口为 1080 。启动 shadowsocks

/etc/init.d/shadowsocks start

配置 privoxy

安装 privoxy openwrt 版。

opkg install privoxy

修改 /etc/privoxy/config ,假设监听端口为默认的 8118 。修改 listen-address 为 0.0.0.0:8118,其它默认,在文件结尾添加如下配置

forward-socks5 / 127.0.0.1:1080 .                            
forward 192.168.*.*/ .                                       
forward 10.*.*.*/ .                                          
forward 127.*.*.*/ .                                         
forward localhost/ . 

意思是将请求转发给我们用 shadowsocks 开启的 socks5 代理,后面的规则让本地和局域网不经过代理直连。

至于 privoxy 的 *.action 和 *.filters 配置这里就不做了,因为后面我们用 PAC 做自动代理。启动 privoxy

/etc/init.d/privoxy start

自动分发 PAC 文件

生成 PAC 文件,这里我直接下载了曲径的 pac 文件修改了代理地址为路由器上的地址,即 192.168.1.1:8118 ,保存为 proxy.pac 并 scp 到路由器上。我的路由装了 luci 所以我就直接把 proxy.pac 放到 /www 目录中,这样 PAC 的地址就是 http://192.168.1.1/proxy.pac

这里利用 WPAD 协议自动分发 PAC。修改 /etc/config/dhcpconfig dnsmasq 选项下面增加配置

list dhcp_option '252,http://192.168.1.1/proxy.pac'

保存,重启 dnsmasq。 /etc/init.d/dnsmasq restart

设备配置

  • OS X - Network Preferences 里面配置 Proxies 为 Auto Proxy Discovery
  • Windows - Internet Explorer 连接、局域网设置为自动检测代理
  • iOS - 热点代理设置为自动,地址留空
  • Android/Windows Phone - 手动填写 http 代理地址吧。。。

感觉 Apple 的 iOS/OS X 系统这些细节做的非常好,真是方便。

@lbp0200

This comment has been minimized.

Show comment
Hide comment
@lbp0200

lbp0200 Nov 5, 2014

我现在也是这样做的,想把pac的功能放进privoxy里,貌似不行,在找替代品,有个程序可以实现,可惜是go写的,不知道怎么安装到路由器里

lbp0200 commented Nov 5, 2014

我现在也是这样做的,想把pac的功能放进privoxy里,貌似不行,在找替代品,有个程序可以实现,可惜是go写的,不知道怎么安装到路由器里

@Akagi201

This comment has been minimized.

Show comment
Hide comment
@Akagi201

Akagi201 Mar 7, 2015

@lbp0200 哪个程序?

Akagi201 commented Mar 7, 2015

@lbp0200 哪个程序?

@lbp0200

This comment has been minimized.

Show comment
Hide comment
@lbp0200

lbp0200 Mar 26, 2015

哈哈,刚才找资料,又跑到这里来了,貌似更新了,good,非常好用。

lbp0200 commented Mar 26, 2015

哈哈,刚才找资料,又跑到这里来了,貌似更新了,good,非常好用。

@houzi-

This comment has been minimized.

Show comment
Hide comment
@houzi-

houzi- Apr 13, 2015

使用WPAD协议对Android不兼容!出现OpenWrt的WiFi Android手机连不上!这是为什么?不知道作者遇到过没?

houzi- commented Apr 13, 2015

使用WPAD协议对Android不兼容!出现OpenWrt的WiFi Android手机连不上!这是为什么?不知道作者遇到过没?

@yangcin

This comment has been minimized.

Show comment
Hide comment
@yangcin

yangcin Nov 3, 2015

如二级路由设置为172.16,是不是这个也得加在 /etc/privoxy/config 里?

yangcin commented Nov 3, 2015

如二级路由设置为172.16,是不是这个也得加在 /etc/privoxy/config 里?

@Firxiao

This comment has been minimized.

Show comment
Hide comment
@Firxiao

Firxiao Mar 5, 2016

"配置 privoxy “ 这一步可以省略
只需在proxy.pac中直接将var proxy 改为你路由器的的地址+ss客户端监听即可 如下:

var proxy = "SOCKS5 192.168.1.1:1080; SOCKS 192.168.1.1:1080; DIRECT;";

Firxiao commented Mar 5, 2016

"配置 privoxy “ 这一步可以省略
只需在proxy.pac中直接将var proxy 改为你路由器的的地址+ss客户端监听即可 如下:

var proxy = "SOCKS5 192.168.1.1:1080; SOCKS 192.168.1.1:1080; DIRECT;";

@Rabbit52

This comment has been minimized.

Show comment
Hide comment
@Rabbit52

Rabbit52 May 2, 2016

15.05.1 下测试要重启路由器后才能分发成功,只重启 dnsmasq 不行。另外 pac 在 ios 上能代理浏览器,不能代理某些客户端,比如说 twitter,楼主有研究吗?

Rabbit52 commented May 2, 2016

15.05.1 下测试要重启路由器后才能分发成功,只重启 dnsmasq 不行。另外 pac 在 ios 上能代理浏览器,不能代理某些客户端,比如说 twitter,楼主有研究吗?

@Rabbit52

This comment has been minimized.

Show comment
Hide comment
@Rabbit52

Rabbit52 May 2, 2016

应该是不支持 spdy 协议的原因

Rabbit52 commented May 2, 2016

应该是不支持 spdy 协议的原因

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment