Ubuntu编译运行Redsocks2实现透明代理

之前我写过一篇文章《WiFi热点分享ShadowSocks流量实现全局透明代理》里面详细解释了如何使用SSH(或Shadowsocks等其他socks5代理)+redsocks+iptables实现Ubuntu笔记本电脑分享一个Wifi,然后让所有连接这个wifi的客户端都实现透明代理(科学上网),但是这样做受限于redsocks的稳定性问题,因为当时的redsocks是通过Ubuntu的apt-get安装的,版本很旧而且已经停止更新,bug主要表现在。

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

3、redsocks1的-p参数有bug,不能生成对应的pid文件。

目前国内带有代理功能的Openwrt路由器普遍使用semigodking 改写的redsocks2,而且redsocks2更新很频繁,经常会有bug修复和新功能出现,所以最好的方式是我们自己去编译github上的源码然后安装使用,编译过程很简单,两分钟即可搞定,从此摆脱redsocks1的bug。

redsocks2的作者应该是个恩山的大神,原贴地址:http://www.right.com.cn/FORUM/forum.php?mod=viewthread&tid=163936,在此要非常感谢大神提供的优秀的透明代理工具

首先找个没有权限限制的目录,比如用户目录下的Downloads,然后克隆github上的c代码

git clone https://github.com/semigodking/redsocks
然后cd到项目根目录

cd ./redsocks
然后安装一个依赖库  libevent2才能编译,否则会报错

sudo apt-get install libevent-dev

然后就可以开心的编译了

make
编译完成之后,会在当前目录下生成一个redsocks2的可执行文件


如果你编译失败,也可以用我之前用Ubuntu16.04编译好的可执行文件,下载地址:http://download.csdn.net/detail/lvshaorong/9664994

注:下载后需要右键,选择属性,找到“权限”选项卡,勾选“允许作为程序执行文件”

然后这个redsocks2文件可以拖出来执行,不过首先我们需要修改它的配置文件,这个目录中有个配置模板文件redsocks.conf.example

我们现在修改这个文件如下

base {// debug: connection progress & client list on SIGUSR1log_debug = off;//log记录连接进度和客户端列表// info: start and end of client sessionlog_info = on;//log记录客户端回话的开始和结束/* possible `log' values are:*   stderr*   "file:/path/to/file"*   syslog:FACILITY  facility is any of "daemon", "local0"..."local7"*///log = "file:/home/alex/log/redsocks.log";//指定log文件的位置,这里要填你本地的位置,而且文件夹必须存在// log = "file:/path/to/file";// log = "syslog:local7";// detach from consoledaemon = on;//on就在后台执行,off就占用当前终端来显示log,关闭终端redsocks也关闭,所以推荐后台执行on/* Change uid, gid and root directory, these options require root* privilegies on startup.* Note, your chroot may requre /etc/localtime if you write log to syslog.* Log is opened before chroot & uid changing.*/// user = nobody;// group = nobody;// chroot = "/var/chroot";/* possible `redirector' values are:*   iptables   - for Linux*   ipf        - for FreeBSD*   pf         - for OpenBSD*   generic    - some generic redirector that MAY work*/redirector = iptables;//转发工具,Ubuntu使用iptables即可/* Override per-socket values for TCP_KEEPIDLE, TCP_KEEPCNT,* and TCP_KEEPINTVL. see man 7 tcp for details.* `redsocks' relies on SO_KEEPALIVE option heavily. *///tcp_keepalive_time = 0;//tcp_keepalive_probes = 0;//tcp_keepalive_intvl = 0;
}redsocks {/* `local_ip' defaults to 127.0.0.1 for security reasons,* use 0.0.0.0 if you want to listen on every interface.* `local_*' are used as port to redirect to.*/local_ip = 0.0.0.0;//本地监听的地址,为了是iptables的端口转发生效,必须填写0.0.0.0local_port = 12345;//本地监听端口,如果12345被别的程序占了就换一个// listen() queue length. Default value is SOMAXCONN and it should be// good enough for most of us.listenq = 128; // SOMAXCONN equals 128 on my Linux box.// `max_accept_backoff` is a delay to retry `accept()` after accept// failure (e.g. due to lack of file descriptors). It's measured in// milliseconds and maximal value is 65535. `min_accept_backoff` is// used as initial backoff value and as a damper for `accept() after// close()` logic.// min_accept_backoff = 100;// max_accept_backoff = 60000;// `ip' and `port' are IP and tcp-port of proxy-server// You can also use hostname instead of IP, only one (random)// address of multihomed host will be used.// The two fields are meaningless when proxy type is 'direct'.ip = 192.168.1.21;//socks5服务器的ip和端口,可以是SSH或者Shadowsocks的port = 44401;// known types: socks4, socks5, http-connect, http-relay// New types: direct, shadowsockstype = socks5;//协议,一般SSH和Shadowsocks填socks5// Specify interface for outgoing connections.// This is useful when you have multiple connections to// internet or when you have VPN connections.// interface = tun0;// Change this parameter to 1 if you want auto proxy feature. // When autoproxy is set to non-zero, the connection to target// will be made directly first. If direct connection to target// fails for timeout/connection refuse, redsocks will try to// connect to target via the proxy.autoproxy = 0;//是否开启自动代理,0为不开启,推荐不要开启// timeout is meaningful when 'autoproxy' is non-zero.// It specified timeout value when trying to connect to destination// directly. Default is 10 seconds. When it is set to 0, default// timeout value will be used.timeout = 10;//自动代理超时// login = "foobar";// field 'login' is reused as encryption// method of shadowsocks// password = "baz";
}
//模板上还有redudp和reddns设置,但是运行时会报错,所以直接删掉
ipcache {// Configure IP cachecache_size = 4;   // Maximum number of IP's in 1K. stale_time = 900; // Seconds to stale an IP in cache since it is added// into cahce.// Set it to 0 to disable cache stale.port_check = 1;   // Whether to distinguish port number in addresscache_file = "/tmp/ipcache.txt"; // File used to store blocked IP's in cache.autosave_interval = 3600; // Interval for saving ip cache into file.// Set it to 0 to disable autosave.// When autosave_interval and stale_time are both 0, IP cache behaves like// a static blacklist. 
}// you can add more `redsocks' and `redudp' sections if you need.

模板上还有redudp和reddns设置,但是运行时会报错,所以直接删掉,如果想解决DNS污染的问题,可以参考我之前的两篇文章《 Ubuntu16.04用Pdnsd替换dnsmasq防止DNS污染》《 一分钟快速搭建Windows防污染DNS服务器——Pcap_DNSProxy》,或者通过Ubuntu apt-get的redsocks(redsocks第一代)进行udp转tcp的DNS查询,但是那样做会影响这台Ubuntu电脑本身的上网。但是如果你不处理DNS污染,你还是上不去facebook,google,twitter,Ins,youtube等网站的。

然后使用iptables将所有的tcp流量都转发到redsocks2进行代理即可,配置如下

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 12345  

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

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

然后就可以启动redsocks2了

redsocks2 -c <配置文件的地址>
然后使用netstat -ntlp观察12345端口是否被redsocks2监听即可

如果想实现手机,笔记本电脑通过该电脑进行透明代理,那么可以开启Ubuntu的wifi分享功能让手机连入,然后开心的fan wall了,Ubuntu16.04开启Wifi分享功能网上说的很多,我这里就不浪费篇幅了

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

如果想让局域网其他的电脑通过你的电脑进行透明代理,那么只需要让局域网的其他电脑将网关设置为你的电脑的局域网IP地址即可。Ubuntu默认就可以做网关使用,只要你的电脑网关配置正确即可,如果我的电脑ip是192.168.1.81的话,真实的网关是192.168.1.254,那么局域网内其他电脑可以做如下配置


像Openwrt这样的系统默认是不能做网关的,因为FORWARD表默认被DROP了,我们可以通过iptables手动打开

sudo iptables -I FORWARD -j ACCEPT


另外,如果你不使用SSH进行代理,而是Shadowsocks,那么不需要用redsocks多走一层,直接用ss-redir即可,方法可以看我之前的一篇文章《Ubuntu编译运行ss-redir打造透明代理Wifi环境》


后记:

在运行了一段时间后发现,redsocks2在上游代理出现问题的时候,还是会向Redsocks1一样使NetworkManager崩溃导致无线网卡停止工作,但是频率不redsocks1降低了很多。

我写了一个启动,停止和终止redsocks2的脚本,可以放在定时任务里定时重启,记得使用root权限,分享给大家

启动脚本 start.sh

/home/alex/redsocks2 -c ./config/redsocks.conf

停止脚本,注意下面不是单引号,而是键盘左上角那个引号,stop.sh

kill -9  `pgrep redsocks2 `

重启脚本

start.sh
stop.sh

除了使用pgrep自动探测pid以外,还可以在启动脚本里添加-p参数,然后使用kill `cat /home/alex/pid/redsocks2.pid`(参数是我自己规定的pid文件位置)获得pid,但是这样麻烦,就不用这种方式了。




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39850.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

透明代理和反向代理

&#xfeff;&#xfeff; 透明代理和反向代理 传统网络&#xff1a; 透明代理&#xff1a; 实现机制&#xff1a;划分Vlan 反向代理&#xff1a; 实现机制&#xff1a; 配置DNS解析以及WAF中配置防护Web服务器的N…

Squid 正反向 / 透明代理

squid是什么&#xff1f; Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的&#xff0c;接受来自人们需要下载的目标&#xff08;object&#xff09;的请求并适当地处理这些请求。也就是说&#xff0c;如果一个人想下载一web页面&#xff0c;他请求Squid为他取得…

透明代理(NAT)

透明代理的实现目前Linuxn内核提供两种实现的方式&#xff1a;NAT和TPROXY。Nat 方式其实就是内内核通过地址转换实现的&#xff1b;而 TPROXY 是内核通过对设置的数据包打标记&#xff0c;然后通过策略路由将打标记的数据包重定向到本地监听进程上。此次我们借助iptables的nat…

akshare量化交易数据集的获取

本文介绍量化交易的数据集&#xff1a;akshare包的安装和调用。akshare的 数据比较全&#xff0c;可以获得 股票、期货、外汇、基金、债券 的历史和实时数据&#xff0c;而且是免费的。 安装 !pip3 install akshare --upgrade 运行结果&#xff1a; 调用包 import pandas as…

突破8140亿美元的加密货币市场, 2019年将走向何方?

作者 | Ash Egan 编译 | Guoxi 2010 年 5 月 22 日&#xff0c;程序员 Laszlo Hanyecz 用一万个比特币购买了两个披萨&#xff0c;相当于一个比特币仅价值 0.003 美分&#xff0c;加密货币第一次有了价值。 2017 年年中&#xff0c;加密货币市场总价值突破千亿美元&#xff0c;…

时间序列预测某加密货币

加密i货币是一种加密和去中心化的数字交换媒介。许多人使用加密货币作为一种投资形式&#xff0c;因为它即使在短时间内也能带来丰厚的回报。比特币、狗狗币是当今流行的加密货币之一。如果你想知道如何通过机器学习预测任何加密货币的未来价格&#xff0c;这篇文章适合你。在本…

中国巨头在NLP领域的大模型布局

什么是大模型&#xff1f; 大规模模型&#xff08;large-scale model&#xff09;是近年来人工智能领域的一个热点话题&#xff0c;因为它们可以对自然语言处理&#xff08;NLP&#xff09;和其他任务进行更准确和深入的处理。由于大模型需要庞大的计算资源和数据支持&#xf…

模拟股票交易:买入、卖出

1.1创建Strategy模块 此模块用于策略开发&#xff0c;产生交易信号。 1.2创建周期选股策略 什么为周期&#xff1f;简单来说&#xff0c;就是周四买入&#xff0c;周一卖出。这就是一个周期。 1.3生成交易信号 明确哪个交易日买入 哪个交易日卖出&#xff0c;用1和-1 标注。帮…

十大优秀编程项目,让你的简历金光闪闪

全文共3241字,预计学习时长6分钟 被问到如何学习编程时,最常听到的问题就是:“有没有什么新项目的好点子?” 一些老套的答案有:“做一个象棋游戏”或者“命令行界面”。 这些答案没有错,但这些例子不符合现代编程的需要。现代软件编写需要经常使用软件服务化(SaaS)和…

多测师肖sir_高级金牌讲师_简历制作

一、简历制作 1、先查找1个合适的模板 1.1比如伍佰钉,wps,我这里收集的模板,以前学长学姐的简历 要求:1.模板格式要易于编辑和修改,网上有免费的模板; 2、需要太过于个性化(颜色,模块,字体(建议:小四,五号)) 3、班级同学之间的简历不重复(模板一样+技能一样) 4…

基于springboot的简历系统的实现

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;简历系统当然也不能排除在外。简历系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;采用…

基于Python技术简历整合分类猎头系统的设计与实现

开发工具(eclipse/idea/vscode等)&#xff1a;pycharm 数据库(sqlite/mysql/sqlserver等)&#xff1a;mysql 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 结构设定. 设置会员和管理员两个身份&#xff0c;会员登录可以查看修改自己账号的个人信息&#xff0c;新…

产品经理/互联网非技术岗如何写一份好的简历?

本文将以互联网非技术岗的简历撰写为主题&#xff0c;分享简历的本质与关键&#xff0c;以及如何写一份合格的简历、简历上需要避开的坑。希望大家看完后能解决90%的简历问题。 文章内容概括&#xff1a; 简历的本质和关键如何写一份有效简历必须避开的地雷用了3年的word简历…

基于SpringBoot的简历管理系统

项目背景 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;简历系统当然也不能排除在外。简历系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;…

PHP 图片去除水印 去除logo

使用插件 ffmpeg 点这里 不使用插件 也可以 <?phpfunction CLEAR_ICO($filename,$savename,$Clear_W,$Clear_H,$Clear_X,$Clear_Y){// $filename ;//读取图片名// $savename ;//保存图片路径// $Clear_W ;//去除水印宽// $Clear_H 30;//去除水印高// $Clear_X 254…

如何去掉图片上的水印,四个步骤,方法超级容易又简单

很多时候我们要使用图片的时候&#xff0c;都是从网上下载的&#xff0c;但是网上下载的图片一般都是带有水印的&#xff0c;我们要使用的话就要去除上面的水印。那如何去除图片上的水印呢&#xff1f;今天我就教大家一个简单的方法 而且是不用下载任何去除水印软件的喔。直接在…

如何在图片上加水印防止盗图?

如何在图片上加水印防止盗图&#xff1f;大家都知道&#xff0c;互联网是一个开放的平台&#xff0c;在互联网上可以获取任何你想要的文件或者资料&#xff0c;不仅简单而且成本非常低&#xff0c;所以有很多人会在网上盗用别人的图片&#xff0c;然后为自己所用&#xff0c;这…

用 OpenCV 去除图片中的水印,骚操作!

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达本文转自|AI算法与图像处理 这两天在 Stackoverflow 上面看到了一个有趣的案例&#xff0c;是关于OpenCV 的一个讨论&#xff0c;讨论的主题就是如何用 OpenCV 来去除下面…

什么软件可以去除照片水印?这3种方法可以帮你轻松搞定

大家有过这样的烦恼吗&#xff1f;在网上看到一张喜欢的图片&#xff0c;想要将它保存下来做壁纸&#xff0c;但是却发现图片里面有个大大的水印&#xff0c;十分影响效果。或者是在网上看到一张喜欢的头像&#xff0c;里面也有着一个大大的水印&#xff0c;我们该放弃这张图片…

学会这3个小技巧,轻松去图片水印

有些小伙伴在浏览个别平台时&#xff0c;会看到一些心水的图片&#xff0c;就想保存下来&#xff0c;拿来当头像壁纸&#xff0c;或是发朋友圈时用来配图。但是有些图片下载后会发现自带着平台水印&#xff0c;虽然理解它们是为了保护自身权益&#xff0c;但我们并不是进行商用…