如何在 Ubuntu 桌面上设置代理自动配置如何在 Ubuntu 桌面上设置代理自动配置如何在 Ubuntu 桌面上设置代理自动配置如何在 Ubuntu 桌面上设置代理自动配置
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 桌面上设置代理自动配置

假设您在家中和工作场所使用 Ubuntu 桌面笔记本电脑。当您在工作场所时,您的笔记本电脑连接到的公司网络位于代理后面。然后,您必须根据您所在的位置打开/关闭代理。当然,你可以在每次网络变化时手动更新 Ubuntu Desktop 的代理设置,但这会很麻烦。这就是代理自动配置可以提供帮助的时候。

代理自动配置 (PAC) 是一种强大的机制,允许有条件地定义 Web 浏览器的代理设置。使用 PAC,您可以根据目标 URL、本地主机的 IP 地址、一天中的时间等自动切换代理设置。正如您可以想象的,PAC 对于设置代理例外、代理负载平衡、网络感知条件代理等非常有用。

下面我将向您展示如何在 Ubuntu Desktop 上设置 PAC,以便您可以根据本地主机的 IP 地址自动在无代理和代理之间切换。

创建用于自动代理切换的 PAC 文件并不复杂。在 PAC 文件中,您本质上定义了 FindProxyForURL(url, host) JavaScript 函数,该函数应该返回在获取给定 URL 时使用的代理。按如下方式创建 PAC 文件。

$ sudo vi /etc/proxy.pac
function FindProxyForURL(url, host)
{
  if (isInNet(myIpAddress(), "1.2.3.0", "255.255.255.0")) {
    if (isInNet(host, "192.168.0.0", "255.255.0.0"))
      return "DIRECT";
    if (shExpMatch(url, "http:*"))
      return "PROXY my.proxy.com:8000" ;
    if (shExpMatch(url, "https:*"))
      return "PROXY my.proxy.com:8000" ;
    if (shExpMatch(url, "ftp:*"))
      return "PROXY my.proxy.com:8000" ;
    return "DIRECT";
  } else {
    return "DIRECT";
  }
}

在此 PAC 文件中,如果您连接到 1.2.3.0/24 网络(假设是公司网络),则您可以对 192.168.0.0/24 之外的所有目标使用代理 (my.proxy.com:8000)。否则,您根本不使用代理。

创建此 PAC 文件后,转到系统设置→网络→代理设置,然后在网络代理中选择自动方法。然后在配置 url 字段中输入 file:///etc/proxy.pac。

或者,您还可以使用 gsettings 工具从命令行启用 PAC。

配置localhost的IP地址

在完成 PAC 配置之前,还有最后一件重要的事情要做。在您创建的 PAC 文件中,myIpAddress() 应该正确返回 localhost 的 IP 地址。最后一步,您应该使用 hostname 命令验证情况是否如此。

$ hostname -i

如果 hostname 命令返回 127.0.0.1,而不是分配给您的笔记本电脑的实际 IP 地址,则 myIpAddress() 也将返回 127.0.0.1,并且上述代理自动配置将失败。为了解决这个问题,你需要在某处设置本地主机的真实IP地址。

在Linux中,您可以将本地主机的IP地址硬编码到/etc/hosts中。但是,由于localhost的IP地址可能会根据您所在的位置而不断变化,因此您可以编写一个启动脚本,在启动时自动生成/etc/hosts。

为此,首先将原始 /etc/hosts 重命名为其他名称,然后使用该名称生成实际的 /etc/hosts 供使用。

$ sudo mv /etc/hosts /etc/hosts.custom

现在,创建以下脚本,从 /etc/hosts.custom 生成 /etc/hosts。

$ vi hostname.sh
#!/bin/bash

WIRED_IP=`ifconfig eth0 | sed -ne 's/.*inet addr:([^ ]*).*/1/p'`
WIRELESS_IP=`ifconfig wlan0 | sed -ne 's/.*inet addr:([^ ]*).*/1/p'`
HOST_IP=${WIRED_IP:-$WIRELESS_IP}
HOST_NAME="your_host_name"

cat /etc/hosts.custom > /etc/hosts

cat >> /etc/hosts << EOF
# This file is automatically generated by /sbin/hostname.sh
$HOST_IP  $HOST_NAME
EOF

exit 0

脚本 hostname.sh 获取 eth0(有线)或 wlan0(无线)的 IP 地址,并将其放入 /etc/hosts 中。

下一步是在网络接口激活时调用 hostname.sh 脚本。假设您在 Ubuntu 桌面上使用网络管理器,则可以通过运行以下命令来实现。


$ sudo chmod 755 hostname.sh
$ sudo cp hostname.sh /etc/NetworkManager/dispatcher.d

现在,每当任何有线或无线网络接口启动时,都会执行hostname.sh脚本来自动更新/etc/hosts。

运行 hostname.sh 脚本的另一种方法是配置您的 Ubuntu 桌面,以便在您登录桌面时自动执行该脚本。

使用以上两种方法后,请验证登录后您的主机名是否可以成功解析为IP地址。

$ hostname -i
1.2.3.100

代理自动配置现已在 Ubuntu 桌面上设置。您的 Ubuntu 桌面将根据您在家中或工作场所的位置自动打开或关闭代理。

在 Firefox 上使用代理自动配置

如果您想在 Firefox 上使用 /etc/proxy.pac,请按照此处的说明进行操作。

首先在 Firefox 偏好设置中打开连接设置菜单。然后输入 resources:///proxy.pac 作为自动代理配置 URL。

然后在 Firefox 可执行文件所在的目录(例如 /usr/bin)内创建一个指向 /etc/proxy.pac 的符号链接。


$ sudo ln -s /etc/proxy.pac /usr/bin/proxy.pac

重新启动 Firefox 后,它将开始使用代理自动配置。

©2015-2025 艾丽卡 support@alaica.com