it-swarm.cn

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

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

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

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

20
Little Jawa

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

基本上,您可以使用 PAC 文件

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

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

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

您的PAC文件可能看起来像这样(unested)。请参阅此处以了解更多 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 ,它支持设置多个代理配置文件,并且您可以轻松地在配置文件之间切换。

7
Zoredache

在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
5
Markus

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

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

3
Michel

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

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

2
user60158

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

祝好运!

0
Beex

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

我在家中以无线方式使用笔记本电脑:-始终为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都没有用。

0
Bill

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

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

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

0
Adrian