如何使用 ip 表将互联网流量从本地重定向到代理服务器(DEBIAN 6)

如何使用 ip 表将互联网流量从本地重定向到代理服务器(DEBIAN 6)

所以我做了如图所示的拓扑。

拓扑结构

路由器有 3 个接口,如下所示:

eth0 到互联网端(带有 ip192.168.1.10/24网关192.168.1.254/24)。

eth1到服务器PC端(带有ip192.168.20.1/28

eth2 到客户端(带有 ip172.16.20.1/29

服务器和客户端连接并从路由器电脑获取互联网。 Server-pc 使用静态 IP (192.168.20.2),而客户端从 router-pc 上的 DHCP 获取自动 IP

我想在我的路由器 PC 上配置 iptables,以将客户端的互联网重定向到我的服务器 PC 上的代理服务器。因此客户端必须使用凭据来访问互联网(我已经在我的鱿鱼上配置了身份验证代理,并且已经在客户端手动配置了代理)。

我运行的防火墙是:

iptables -t nat -A PREROUTING -p tcp -s 172.16.20.0/29 -j DNAT --to 192.168.20.2

192.168.20.2是我的服务器的IP地址。那么,你能帮我修复我所做的配置,以便根据我的需要吗?

对不起,我的英语不好。谢谢。

答案1

首先:请注意,Debian 6“挤压”自 2013 年以来已不再支持主线,并且自 2016 年以来已不再提供长期支持。使用 Debian 6 以这种方式阻止互联网访问很可能是无效的,因为存在安全漏洞允许绕过限制、缺少使您无法实现所请求的规则集的功能,或两者兼而有之。我强烈地建议您将系统升级到受支持的 Debian 版本,最好是 Debian 9“stretch”。

其次,将经过身份验证的代理与透明代理模式相结合并不能很好地工作。问题是最终主机可能需要身份验证(例如,因为您正在登录到需要 HTTP 级别身份验证的 DAV 服务器),然后您的透明代理要么会吃掉这些凭据,要么会对它们感到困惑。

相反,我的建议如下:

  • 阻止所有不通过代理的流量:

    iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 443 -j REJECT
    iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 80 -j REJECT
    

    这将禁止所有不通过代理的互联网流量。

  • 配置您的 DHCP 服务器,以便它向客户端发送域名:

    subnet 172.16.20.1/29 {
        (...)
        option domain-name "example.com";
    };
    

    (使用您本地的域名,而不是example.com这里)

  • 配置您的 DNS 服务器,使其知道主机名wpad.example.com,该主机名应指向您的路由器(再次替换example.com您的域名)。
  • 创建文件 wpad.dat,并为其添加以下内容:

    function FindProxyForURL(url, host) {
        return "PROXY 172.16.20.1:3128";
    }
    

    请注意,这是简单的 Javascript;如果您想根据目标 URL 使用不同的代理,只需修改该函数即可。

    然后通过 HTTP 在路由器上提供该文件,名称为“/wpad.dat”。确保该文件的 MIME 类型是application/x-ns-proxy-autoconfigapplication/x-javascript-config

这样,您网络上的浏览器将自动配置为使用代理(前提是您已打开“自动检测设置”选项(如果相关)),并且不会在身份验证方面使您的用户感到困惑。

相关内容