https://gist.github.com/snower/f2852ea703b2ddffbec48b0fa294ffff
有时候访问很多连接或者速度不佳的网址时,但又不方便为整个程序设置代理,或者整个程序不支持设置代理,那么可以使用该脚本配合 hosts 和 iptables 就可以为特定域名配置通过代理访问远程网址了,解除也很方便,删掉 IP tables 就是直接访问不走代理了
使用方式也简单,在 arguments 数组中填写需要代理的域名和为这个域名指定一个单独端口,然后脚本启动的时候用-P 参数指定代理服务器地址就行了,hosts 和 iptables 添加信息在脚本中都有示例,而且该脚本运行机器和 iptabels 和 hosts 添加修改的机器不是同一台机器也是可以的
1
xingheng 2021-08-21 16:39:26 +08:00
楼主能解释一下原理吗?没看懂这个代理流量是怎么走的
|
2
sujin190 OP @xingheng #1 很简单啊,在 hosts 文件中为需要走代理的域名指定一个特定的 ip,然后在 iptables nat 的 OUPUT 中添加捕获这个 ip 的流量做 DNAT 改写目的地址到脚本启动对应域名配置的端口,这个端口在收到流量后加上 http 或者 socks5 协议信息,发往代理服务器,代理服务器就能正常的连接远程服务器了,通过这种方式可以在不给程序配置代理或者程序不支持代理的情况下也可以使用代理访问远程服务器了
如果你在 hosts 中写的 ip 地址就是这个域名正常解析的 ip 地址,那么其实只需要控制 iptables 记录就可以非常简单的控制是直接访问还是通过代理访问 当前脚本添加的代理协议地址只是比较简单的不支持账户密码认真的方式,我想大部分情况估计也够用了吧 |
4
xingheng 2021-08-21 17:22:25 +08:00
|
5
sujin190 OP @xingheng #4 有错误会打印出来,可以看看代理那边的日志看看是否正常收到请求了,不行抓包大法看看流量怎么转发的,应该可以看出来哪一步没有完成
|
6
sujin190 OP @xingheng #4 看这个地方的日志,似乎 iptables 并没有完成把流量转到脚本这边的过程
2021-08-21 19:04:03 I listen server at 0.0.0.0:443 to github.com:443 2021-08-21 19:04:03 I listen server at 0.0.0.0:9091 to raw.githubusercontent.com:443 2021-08-21 19:04:03 I use socks5 proxy 172.25.32.1:1099 forward to github.com:443 2021-08-21 19:04:03 I use socks5 proxy 172.25.32.1:1099 forward to raw.githubusercontent.com:443 2021-08-21 19:04:38 I socks5 proxy connected 127.0.0.1:49944 -> 172.25.32.1:1099 -> github.com:443 2021-08-21 19:04:39 I socks5 proxy closed 127.0.0.1:49944 -> 172.25.32.1:1099 -> github.com:443 864B 208.174K 835.56ms 正常的日志应该是这样的,2021-08-21 19:04:38 I socks5 proxy connected 127.0.0.1:49944 -> 172.25.32.1:1099 -> github.com:443 表示脚本收到 iptables 重定向的请求并完成了 socks5 协议建立连接的过程 |
7
xingheng 2021-08-21 19:23:50 +08:00
@sujin190 #6 最后面两行日志应该是 sevent 输出的,我这就是没有,1080 端口代理没有相关的日志,用浏览器下载 gist 文件也失败。
我找找怎么调试 sevent |
8
sujin190 OP @xingheng #7 其实更简单的是,你把监听端口改到 443,然后 hosts 把域名直到 127.0.0.1 就行,这样就不用管 iptables 做流量重定向了,只不过很多时候 443 端口可能已经被占用了,而且只有一个端口,那么也转发一个域名了
|
9
someonedeng 2021-08-23 23:49:22 +08:00
大概类似 privoxy 一类的东西?
|