ss-redir透明代理

发布时间 2023-05-06 13:08:11作者: 东大网管

原文:

https://www.twblogs.net/a/5b8409092b717776d3c7535d/?lang=zh-cn

 

ss-redir透明代理:

ss-libev 提供了ss-local,ss-redir,ss-tunnel,ss-server;

顾名思义,ss-local是ss的客户端,提供了sock5代理,但是一般只有浏览器才能使用sock5代理,要想充当“全局代理”可以通过privoxy。注意,这里说的是“充当全局代理”,因为ss-local+privoxy方式并不是真正意义上的全局代理,只不过是设置了终端终端的http/https的代理。要想做到真正的全局透明代理,可以使用ss-redir+iptables。

透明代理:

透明代理的作用是为了突破某些网络限制,访问网络资源。透明代理对于客户端来说是透明的,客户端不需要进行相应的代理设置,就能使用透明代理来访问互联网。

ss-server:

ss服务端。

ss-local:

ss客户端,也就是本地运行的sock5客户端。

ss-local主要提供sock5代理,根据OSI模型,sock5是会话层协议;sock5代理支持TCP、UDP。

ss-redir:

redirect,也就是重定向,也是在本地运行的程序,不过可以提供透明代理。

1. 首先通过iptables将本机的数据包全部重定向至redir监听的端口

2. 当上层应用发出数据包后,首先被iptables重定向至ss-redir,ss-redir将数据包打包并加密,通过与ss服务器建立的ss隧道,将包发至ss的服务器。

3. ss-server接收到数据包后,先解密,然后根据数据包中的目标ip地址,将其发送至目标服务器。

4. 目标服务器做出应答后,将应答数据返回给ss-server,然后ss-server通过ss隧道将其传回给ss-redir,最后ss-redir返回给上层应用。

从上面可以看出,发出的数据包的目标ip地址和端口始终没有改变。

ss-tunnel:

ss-libev提供的本地端口转发工具,通常用于解决dns污染的问题。

首先,ss-tunnel会在本地监听一个端口(假设为127.0.0.1#5353),那么发往127.0.0.1#5353的数据包,ss-tunnel会通过与ss-server监理的ss隧道,将其发往ss-server,ss-server根据ss-tunnel设置的远程地址和端口(8.8.8.8:53),将数据包发往8.8.8.8:53,8.8.8.8:53响应后,返回数据给ss-server,ss-server再将其返回给ss-tunnel,最后ss-tunnel返回给上层应用。

对比ss-redir。ss-tunnel的目标ip和目标端口都发生了变化,开始的地址是127.0.0.1#5353,然后经过ss-tunnel后,地址变为了8.8.8.8:53.

如何解决dns污染:

1、ss-redir转发tcp、udp流量(包括dns),这时系统dns设置为国外公共dns(例如8.8.8.8),dns查询走ss通道,由于dns还是走的udp(非明文),在某些网络环境下udp丢包会比较严重。

2、ss-redir转发tcp、udp流量(除了dns),用ss-tunnel来建立udp转发,将dns通过ss隧道,转发至8.8.8.8:53等上游公共dns服务器。此时的dns解析依旧是udp方式(非明文),某些网络环境下udp丢包比较严重(系统dns设置为127.0.0.1)

3、ss-redir转发tcp、udp流量(除了dns),通过dns-forwarder之类的工具,将udp/53方式的dns查询转换成tcp方式,然后再将该tcp方式的dns查询数据通过ss-redir的tcp转发,将其发送至dns服务器,完成解析(系统dns设置为127.0.0.1)

4、.....

......