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


20

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

有没有一种方法可以使Ubuntu根据我使用的连接自动选择“工作”位置?我以为我可以使用IP子网(非常特定)来检测我的位置,但是我不知道如何设置它。

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

Answers:


7

我可以想到一种方法,但是设置起来会有些晦涩。

基本上可以使用PAC文件

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

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

在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";
  }
}

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

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


有趣的...我必须测试。我会告诉你结果如何。我认为Firefox扩展不会做:代理用于所有协议,而不仅仅是HTTP。然后,我也需要它来处理移情,进化等所有事情。
小贾瓦

哦,还有另一件事。您可以要求IT人员设置WPAD。然后您可以使用自动代理选项。
Zoredache

好吧...恐怕IT不能做任何事情。我可以提出请求,但是我当然不会发生任何事情。没有商业理由就意味着没有资源去做。而且我自己做起来比写下理由要快:-)
Little Jawa

好。多一点阅读后,我对这种解决方案不满意。看来它可以工作(我还没有尝试实现它),但是它在整个系统中都不可用。它仅适用于Web浏览器,因为(根据findproxyforurl.com/index.html),该系统仅在Web浏览器中受支持(因为它依赖Javascript)。
小贾瓦

5

在Ubuntu 10.10中,.pac脚本运行良好。正如Zoredache解释的那样,设置一个Web服务器,在其中放置一个pac文件,打开“系统”->“首选项”->“网络代理”,然后将“自动配置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

3

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

此外,此方法可能用于生成WPAD文件,您可以将其指向支持该功能的所有浏览器。


2

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

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


2
虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
伊莱亚·卡根

0

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

我在家中以无线方式使用笔记本电脑:-始终为eth1接口的静态IP地址(192.168.1.10)

我上班时将其插入:-始终为eth0接口动态IP地址(10.10.xx.xx),以及一个代理:10.10.123.123端口8888

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

(我把/ etc / network / interfaces弄乱了(请参阅“ man interfaces”和/etc/resolv.conf都没有用。


1
据我了解:您的Wifi卡具有静态IP-则已“自动”设置。并且您的有线网络是通过DHCP设置的-这也是自动的。那么,关于IP设置,您还想添加些什么呢?我了解代理服务器的需要,但不了解IP。
小贾瓦

你知道,我认为你是对的。Holdiays之后,我又回到工作了,它似乎正在自动工作。我认为唯一的问题是代理。我明天再调查。

0

我使用了PAC文件方法,这种方法在浏览时效果很好,但对于许多其他无法理解PAC文件的应用程序却效果不佳-我猜想,当某个应用程序通过API要求“代理配置”时,它们只会如果使用PAC文件URL,则返回。

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

将JavaScript引擎或PAC解析器链接到支持基本代理配置的每个应用程序似乎有点过头了。这种情况似乎可以从一些底层平台支持中受益,该API调用实际上会解释PAC文件并返回结果而不是URL。


0

这是目前的旧帖子,但是我来到这里寻找一种方法来做,却找到了不同的答案。我正在使用的答案位于一个名为“ whereami”的程序包中,它要求您在其detect.conf文件中定义工作的子网,然后在whereami.conf文件中定义代理服务器。应该可以,我将发布任何问题。

祝好运!


1
欢迎来到Ask Ubuntu!那么...某人将如何实际执行此操作?你能提供指示吗?现在,这还不能真正解决问题……
Eliah Kagan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.