V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
function007
V2EX  ›  问与答

squid 能达到和 sniproxy 类似的效果吗?单 HTTP 的话

  •  
  •   function007 · 2016-01-22 04:38:58 +08:00 · 3841 次点击
    这是一个创建于 3010 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为内网 squid 上有缓存,想利用起来,让它来监听 80 端口, sniproxy 负责 443 。 squid 的设置支持实现类似效果吗?

    @ryd994 请问你在 https://www.v2ex.com/t/181289 提到的 squid interception 可以给一下资料的传送门吗?十分感谢。我只搜到了对单个后端的反代,任意域名的 http 请求反代没找到任何资料。。

    7 条回复    2016-01-22 14:56:17 +08:00
    function007
        1
    function007  
    OP
       2016-01-22 04:40:59 +08:00
    我戳,正文里是不能艾特人的么 @ryd994
    ryd994
        2
    ryd994  
       2016-01-22 05:40:14 +08:00
    善用 Google : http://wiki.squid-cache.org/SquidFaq/InterceptionProxy
    主要就是
    http_port 3128 intercept
    iptables -t nat -A PREROUTING -s 内网网段 -p tcp --dport 80 -j DNAT --to 缓存服务器 ip:3128

    sniproxy 类似:
    iptables -t nat -A PREROUTING -s 内网网段 -p tcp --dport 443 -j DNAT --to 缓存服务器 ip:端口

    务必仔细考虑防火墙规则,确保请求来自内网,不要变成公共代理
    function007
        3
    function007  
    OP
       2016-01-22 11:15:52 +08:00
    @ryd994 报这个

    FATAL: Bungled squid.conf line 4982: http_port 8072 intercept
    Squid Cache (Version 2.7.STABLE8): Terminated abnormally.

    是不是我版本太老了不支持这个特性。。

    squid 是搭在本地内网机器上的,作为上层 privoxy 的缓存。 sniproxy 监听服务器 127.0.0.1 ,用 qTunnel 对内网端口和 sniproxy 端口做的映射,两个都不存在公共代理的问题。
    本来是准备运行两个 qTunnel 进程,把内网设备的 80 和 443 转到服务器上 sniproxy 的相应端口去,然后内网的 DNS 把需要走那边过的域名直接解析到那台设备上。因为那台设备同时也运行有带缓存的 squid ,就想着能不能让它来负责 80 口的请求,可以少跑个进程顺便有缓存速度肯定快一些。。
    ryd994
        4
    ryd994  
       2016-01-22 14:09:04 +08:00 via Android
    @function007 centos 都 3.3 了你哪搞来的 2.7 ……
    intercept 换成 transparent
    function007
        5
    function007  
    OP
       2016-01-22 14:23:32 +08:00
    @ryd994 我是 x86 的 XP 啊, 3.5 只有 64 位的, 3.3 需要的 cygwin 装不下,我就只能用 http://squid.acmeconsulting.it/Squid27.html 这玩意了。。

    transparent 查到是透明代理的参数,结合防火墙规则把请求全部转给监听端口,然后把那台设备设为网关。我想做的是让 squid 像 sniproxy 一样做一个任意域名的反向代理,测试中用 transparent 参数监听 80 口然后直接把域名解析过去会自身死循环然后报 too many connects 。
    ryd994
        6
    ryd994  
       2016-01-22 14:27:48 +08:00 via Android
    @function007 一回事啊,只要能把连接劫持过来,结果一样
    你不要把自己也劫持了啊……
    function007
        7
    function007  
    OP
       2016-01-22 14:56:17 +08:00
    @ryd994 “你不要把自己也劫持了啊……”这句把我点醒了,第一次发现自己竟然可以 SB 到这种地步。。

    死循环是这样产生的:
    我在 A 上设置了 http_port 80 transparent ,在 A 上的 hosts 里把 www.ip.cn 的 ip 解析到了 127.0.0.1 ,然后用 A 的浏览器去访问 www.ip.cn 测试。。请求在发到 squid 的时候都是对的,问题是 squid 在进行反代获取内容的时候, www.ip.cn 这个域名被本地的 hosts 又指向了自己。。

    刚刚试了下在 B 设备上改 hosts 然后连接 A ,发现它工作的很好。。

    麻烦你了不好意思。。十分感谢你的耐心解答。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2778 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 12:10 · PVG 20:10 · LAX 05:10 · JFK 08:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.