如何根据我连接的网络更改代理设置?

我公司的企业网络要求我设置一个网络代理来访问网络,但是当我在其他地方时,我不需要它。 Ubuntu中的代理设置(系统 – >首选项 – >代理服务器)允许我创建我可以手动选择的“位置”。 然后我有一个“默认”位置(没有代理)和一个“工作”位置(我公司的代理服务器)。

有没有办法让Ubuntu根据我正在使用的连接自动选择“工作”位置? 我以为我可以使用IP子网(非常具体)来检测我的位置,但我不知道如何设置它…

编辑:我真的需要在系统级别设置代理设置。 我的所有网络连接(IMAP,SMTP,聊天等)都需要通过代理。 不仅是网络浏览器。

我可以想到一种方法,但设置它将有点模糊。

基本上你可以使用PAC文件

在您的系统上安装Web服务器,任何小型Web服务器都可以,您不需要像apache这样庞大的系统。

使用基于源地址匹配的PAC指令创建文件wpad.dat ,然后将系统配置为使用正确的代理。

在firefox中,将代理配置为指向本地PAC文件。 它可能类似于http://localhost/wpad.dat

您的PAC文件看起来可能有点像这样( 未经测试 )。 有关更多PAC示例,请参见此处

 function FindProxyForURL(url, host) { // If on a internal/LAN IP address, send traffic direct. if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0")) { return "PROXY 1.2.3.4:8080; PROXY 4.5.6.7:8080; DIRECT"; } else { return "DIRECT"; } } 

我从来没有尝试过,而且我不在系统中进行测试,但您甚至可以使用firefox中的file:// URL指定PAC文件,这意味着您可以跳过设置Web服务器。

当然,也有快速简便的解决方案,但是当您在不同地点之间移动时,它确实需要您付出一点努力。 安装Quick Proxy Firefox扩展,只需单击工具栏上的按钮即可打开或关闭代理。 如果您愿意使用Firefox扩展程序处理此问题,您还可以尝试FoxyProxy ,它支持设置多个代理配置文件,并且您可以轻松地在配置文件之间切换。

在Ubuntu 10.10中,.pac脚本运行良好。 正如Zoredache所解释的那样,设置一个web服务器,在那里放一个pac文件,打开System-> Preferences-> Network Proxy,并将“Autoconfiguration URL”设置为pac文件位置。

检查自己的IP地址的PAC文件示例:/var/www/selectProxy.pac:

 function FindProxyForURL(url, host) { if (myIpAddress() == "192.168.22.63") { return "PROXY 192.168.22.8:8080"; } else { return "DIRECT"; } } 

在网络代理首选项中:URL将是:

 http://localhost/selectProxy.pac 

作为Zoredache答案的补充,您可以使用/etc/network/if-up.d中的脚本在/etc/profile.d/中生成包含代理shell变量的代码段。 请注意,这仅适用于新shell。

此外,此方法可能用于生成WPAD文件,您可以指向任何支持此文件的浏览器。

这是一个很老的post,但我发现了这个。 看看: http : //marin.jb.free.fr/proxydriver/

您可以安装为Ubuntu提供的.deb包。 这基本上是一个shell脚本,可在网络更改时更改环境变量。 您可以通过编辑/etc/proxydriver.d/创建的配置文件(自动)来配置每个网络的设置

我也有同样的问题。 请概括任何答案以包括我的情况。

我在家里用无线笔记本电脑: – 总是eth1接口静态IP地址(192.168.1.10)

当我上class时,我将其插入: – 始终eth0接口动态IP地址(10.10.xx.xx),和代理:10.10.123.123端口8888

我希望Ubuntu根据我正在使用的接口自动设置IP地址和代理。

(我在/ etc / network / interfaces中搞砸了[参见“man interfaces”和/etc/resolv.conf无济于事。

我使用PAC文件方法,它适用于浏览但不适用于许多其他不了解PAC文件的应用程序 – 我猜测当一个应用程序通过API请求“代理配置”时,他们只是得到了如果您使用PAC文件URL,则返回该文件。

对于没有代理支持或不理解PAC文件(如Empathy)的用户应用程序,我使用tsocks(因为我使用SSH隧道进行代理支持)。

将JavaScript引擎或PAC解析器链接到支持基本代理配置的每个应用程序似乎有点矫枉过正。 这似乎是一个案例,可以通过API调用获得一些底层平台支持,该API调用实际上解释PAC文件并返回结果,而不是它的URL。

这是一篇很老的post,但我来到这里寻找一种方法来做到这一点并找到了不同的答案。 我正在使用的答案在于一个名为“whereami”的包,它要求您在detect.conf文件中定义工作的子网,然后在whereami.conf文件中定义代理服务器。 应该工作,我会发布我遇到的任何问题。

祝好运!