Ubuntu编译运行ss-redir打造透明代理Wifi环境

标签: iptables 路由器 ubuntu openwrt
15421人阅读 评论(21) 收藏 举报

研究了一阵子的Openwrt路由器,主要是让影s梭s作为一个服务跑在openwrt路由器上,然后该路由器就实现了透明代理功能,连入该路由器Wifi的设备都实现了代理,达到了科学上网的效果。后来又一想,既然Openwrt可以,那Ubuntu应该也没啥问题,于是着手开始研究。

首先Openwrt用的ss是libev的版本,也就是c语言直接编译过来的版本,其源代码可以从这里(https://github.com/ss/ss-libev)下载到。libev版本包含ss-server,ss-local,ss-redir,ss-tunnel,其中ss-redir是做透明代理用的服务程序,需要配合iptables使用。但是,网上多数的Ubuntu+ss文章都是介绍的python版本和ss linux版本,而这两个版本都是只有ss-server和ss-local 两个服务,ss-local只能开放一个代理端口,然后让浏览器使用类似swichysharp类似的软件设置代理,这样的方式虽然安装容易但是只能让浏览器走代理,不能实现全局的透明代理。


针对python版的ss-local客户端,可以使用redsocks进行透明代理,这种方法在我之前的一篇博客《WiFi热点分享ss流量实现全局透明代理》中写过

不过这种方式有几个弊端

1、redsocks服务只能代理tcp流量,不能代理udp流量

2、redsocks有bug,不能关闭已建立的连接,一旦超越linux的最大限制,就会报“Too many open files”异常,导致服务瘫痪,需要每隔一段时间进行重启
3、在我的使用还发现这种方式经常会让NetworkManager对无线网卡的管理崩溃,导致搜索不到wifi信号,需要经常重启NetworkManager

4、图形界面版的ss-qt5有bug,在连接数多的时候会崩溃掉

所以我们要安装ss-libev这个库并开启ss-redir服务进行全局代理

这样做的好处有很多

1、ss-libev版占用内存比python版更小,在30块钱路由器上都能跑很溜的程序在Ubuntu上肯定没什么问题

2、可以随时下载最新源码编译最新的软件包,比如在Ubuntu16.04上,直接使用apt-get install ss 安装的版本很旧,连rc4-md5的加密都不支持

3、无需借助其他第三方程序如redsocks,大大提高了系统稳定性

4、deb包安装完成后会自动加入环境变量,而python版是没有环境变量的


好了进入正题,如何安装部署ss-libev版呢

作为一名Ubuntu用户,首先我们可以登录ss的github的官网去下载相关c源代码,然后编译成deb包,因为创造ss的大神 clowwindy已经退隐江湖,所以我们可以从还在更新着的其他人的分支上去clone,比如这个https://github.com/madeye/shadowsocks-libev

当然目前我已经把Ubuntu常见的版本已经编译出来了,大家可以直接下载使用(在多台电脑上亲测可用)\

V2.5.5版(稳定版)

14.04及以上系统下载连接 http://download.csdn.net/detail/lvshaorong/9721087

16.04及以上版本下载地址:http://download.csdn.net/detail/lvshaorong/9662213


V3.0.3版(2017.03 最新版)

16.04及以上版本下载地址:http://download.csdn.net/detail/lvshaorong/9773002


使用dpkg命令可以直接安装该deb包

sudo dpkg -i ./ss-libev_2.5.5-1_amd64.deb


安装完成之后可以使用ss-redir -h命令来检查是否安装成功


然后我们需要写一个文本文件,里面是个json字符串,写明服务器地址,密码,监听端口等信息,如下


注意这里的“local_address”一定要填写0.0.0.0,默认是127.0.0.1,但是默认是无法使用iptables进行端口转发的,所以要设置为0.0.0.0,其他的内网地址也不行,比如192.168.1.81,我试过

配置好用户名密码之后就可以开启ss服务了,方法很简单

sudo ss-redir -c <上面json配置文件路径> -v -u
上面的-v是指开启罗嗦模式,也就是把端口转发情况全部打印出来,方便我们调试错误

-u 是指开启udp转发,如果你的服务器支持那么推荐开启

如果出现如下报错


那说明json中配置的1081端口已经被别的程序占用了,这时我们可以通过netstat -ntl检查端口占用情况,然后选一个没有被占用过的端口


下面是最重要的一步,开启iptables端口转发,其作用就是将无线网卡收集到的数据包转发给ss走代理,所以要写一点iptables路由规则,如下

iptables -t nat -A PREROUTING -d 127.0.0.0/24 -j RETURN
iptables -t nat -A PREROUTING -d 192.168.0.0/16 -j RETURN
iptables -t nat -A PREROUTING -d 10.42.0.0/16 -j RETURN
iptables -t nat -A PREROUTING -d 0.0.0.0/8 -j RETURN
iptables -t nat -A PREROUTING -d 10.0.0.0/8 -j RETURN
iptables -t nat -A PREROUTING -d 172.16.0.0/12 -j RETURN
iptables -t nat -A PREROUTING -d 224.0.0.0/4 -j RETURN
iptables -t nat -A PREROUTING -d 240.0.0.0/4 -j RETURN
iptables -t nat -A PREROUTING -d 169.254.0.0/16 -j RETURN

iptables -t nat -A PREROUTING -p tcp -s 10.42.0.0/16 -j REDIRECT --to-ports 1081

其中修改的是PREROUTING表,这样只会对Wifi网卡的流量起作用,而不会对本机起作用,如果想让本机起作用,可以把相同的规则加上server的ip return加到OUTPUT表上

上面的10.42.0.0/16是Ubuntu系统分享wifi后,wifi子网连入设备的IP地址,上面最后一句话的意思就是把所有来自Wifi的数据包都发送到ss-redir的监听端口1081去

可以用

sudo iptables -t nat -L -n
来检查iptables路由规则,正确的情况应该如下图


另外,ss-redir还支持udp转发,方法是在上面路由规则上再加一句

iptables -t nat -A PREROUTING -p udp -s 10.42.0.0/16 -j REDIRECT --to-ports 1081

在开启了UDP转发之后,Shdowsocks就彻底可以当VPN使用了,因为全部的流量都已经得到转发,这在python版里是实现不了的。


这里要注意一下,使用如上配置之后是可以将TCP流量代理到SS服务器的,但是有些网站如Facebook,google还是打不开,原因是DNS目前仍然从本机发出,使用UDP协议且不经过代理,所以对于这些网站会被DNS投毒解析到一个错误的IP,访问这个错误的服务器当然不会成功,所以下一步我们要解决DNS的问题

此时需要使用Pdnsd或者ss-tunnel服务,用来防止DNS污染

然后修改修改系统默认的DNS服务器地址为上面我们开启的pdnsd或ss-tunnel的监听地址

sudo nano /etc/resolv.conf


这一步的详情请参考我之前写的两边DNS文章《Ubuntu16.04用Pdnsd替换dnsmasq防止DNS污染》《一分钟快速搭建Windows防污染DNS服务器——Pcap_DNSProxy》搭建自己的DNS服务器

好了,现在可以开启wifi功能让手机连入,然后开心的fan wall了,Ubuntu16.04开启Wifi分享功能网上说的很多,我这里就不浪费篇幅了

http://jingyan.baidu.com/article/363872ecd8f35d6e4ba16f97.html

附图:通过netstat命令检查ss是否正在运行



关于编译:

编译ss-libev库其实很简单,根据github上的说明两行代码就可以搞定,记得要执行apt-get update就好

git clone https://github.com/shadowsocks/shadowsocks-libev.git
sudo apt-get update
cd shadowsocks-libev
sudo apt-get install --no-install-recommends build-essential autoconf libtool libssl-dev \
    gawk debhelper dh-systemd init-system-helpers pkg-config asciidoc xmlto apg libpcre3-dev
dpkg-buildpackage -b -us -uc -i
cd ..
sudo dpkg -i shadowsocks-libev*.deb


查看评论

中国下一个泡沫是什么?是媒体

中国下一个泡沫是什么?是媒体  05-10 19:17  本文点击次数: 6114   【ChinaByte 综合消息】   易凯网络资本公司首席执行官 王冉/文  一个泡沫刚刚破灭,又一个泡沫悄然升...
  • tchaikov
  • tchaikov
  • 2001-05-13 22:25:00
  • 922

iptables+tproxy实现ss-redir的UDP转发的方法

在OpenWrt路由器上配置Shadowsocks实现Socks5代理,使用ss-redir做透明代理转发tcp流量很简单,只需在NAT 表的PREROUTING链中加一句端口转发就可以了,但是SS相...
  • lvshaorong
  • lvshaorong
  • 2016-11-17 18:42:53
  • 14866

linux 用 shadowsocks + iptables + ss-redir 实现全局代理

linux 用 shadowsocks + iptables + ss-redir 实现全局代理 第一次写博客,如果有不足的地方还请大家指出,谢谢!! 为了实现socks5全局代理我研究了很多天,...
  • chouzhou9701
  • chouzhou9701
  • 2017-12-15 19:10:28
  • 561

交叉编译ss-redir

本文适合有一定linux基础的人阅读,不会写的非常细,主要是编译时踩过的一些坑。 ss-redir透明代理介绍ss-redir与一般shadowsocks客户端不同,ss-redir运行于linux环...
  • he012821397
  • he012821397
  • 2017-12-04 10:44:14
  • 149

WiFi热点分享S-S流量实现全局透明代理

平时使用SS或SSH做代理的时候,独乐乐不如众乐乐,如何把我连上ss的电脑做成热点,通过wifi分享给周围其他的人呢?又如何将ss变成一个全局的代理,而不仅仅限于浏览器和少数几个支持代理的软件呢?将一...
  • lvshaorong
  • lvshaorong
  • 2016-09-12 09:06:08
  • 9405

分享一个用树莓派+SS+ChinaDNS+bandwagon 做网关的帖子

这个方案合适有树莓派硬体、不想在路由器做更改的朋友,这是一个网内全部都可以翻,也会根据访问目的IP(国内和非国内进行路由,不会全部数据走SS),当然如果有更好的方案或者错误请指出。 准备工作: 1:...
  • lostgdi
  • lostgdi
  • 2015-01-12 16:00:09
  • 14740

Ubuntu 使用Openwrt SDK交叉编译ipk包过程全纪录(超多图)

本文从在Ubuntu中下载SDK,git克隆最新代码,make menu,编译ipk包,解决编译错误,安装ipk,解决安装ipk中碰到的依赖,部署iptables和ss-redir,安装luci界面,...
  • lvshaorong
  • lvshaorong
  • 2016-10-28 00:09:05
  • 14866

OpenWrt基于HAProxy的透明代理负载均衡和高可用部署

Openwrt已经预编译好了HAProxy帮助我们做负载均衡,而且我在网件 wndr4300路由器上代理ss运行非常稳定,而且还可以使用web页面观察HAProxy的运行情况和各个代理节点的情况。本文...
  • lvshaorong
  • lvshaorong
  • 2016-11-04 16:30:34
  • 6235

Socks5代理(SSH)转国内PPTP的方法

SSH这种Socks5代理工具最常用的一种使用方法是在浏览器上配置代理端口,然后指向该工具监听的1080端口的方式进行代理,这是Windows系统用户最常见的方式,这样无法进行全局代理和UDP代理。而...
  • lvshaorong
  • lvshaorong
  • 2016-11-09 13:32:12
  • 6780

openwrt解决dns污染方案 pdnsd+dnsmasq

以前一直在路由器上改域名 ip 来解决 google 系列服务无法使用的问题, 不过斯巴达以来 google 就没有一个相对稳定的 ip 可以指定了, 经常是好了一天第二天又失效了, 被逼着走代理之类...
  • dai_xiangjun
  • dai_xiangjun
  • 2016-03-03 18:00:19
  • 6176
    个人资料
    持之以恒
    等级:
    访问量: 64万+
    积分: 6586
    排名: 4566
    文章分类
    最新评论