问题描述
我想将 SOCKS 代理设置添加到 /etc/apt/apt.conf。它的语法是什么?它与 http 和 ftp 语法相同吗?
谢谢。
最佳方案
Acquire::http::proxy "socks5h://server:port";
这对我适用于 Ubuntu 18.04。\n正如手册页所述,apt 支持 socks5h,而不是 socks5,这意味着具有 DNS 解析能力的 socks5 代理。
次佳方案
一种可能的解决方案是使用 tsocks
,这是一个可以通过 socks 代理重定向网络流量的应用程序。\n安装 tsocks
包,修改 /etc/tsocks.conf
以设置 socks 代理的地址和端口号,然后运行:
$ sudo -s
# tsocks apt-get update
# tsocks apt-get dist-upgrade
# exit
$
或者
$ sudo -s
# . tsocks -on
# apt-get update
# apt-get dist-upgrade
# . tsocks -off # not really necessary, given the exit
# exit
$
您可以考虑多种选择,以简化和自动化其使用。\n不要忘记前导点,Manpage 有更多详细信息。
编辑:一种更简短的使用方法:
$ sudo tsocks apt-get update
$ sudo tsocks apt-get dist-upgrade
第三种方案
使用下一个配置行对我来说有效:
Acquire::socks::proxy "socks5://server:port";
为了保持 apt.conf
清洁并避免在 Linux 升级时出现问题,我创建了一个新文件(/etc/apt/apt.conf.d/12proxy
)并将配置文件添加到其中。
第四种方案
我在 Ubuntu Xenial 的 apt.conf 手册中找不到有关 Acquire::socks::proxy 的任何信息。您可以通过运行支持上游 socks 代理的本地 http 代理(例如 Polipo)来解决这个问题。您需要按如下方式配置 Polipo:
proxyAddress = "::1"
proxyPort = 8118
socksParentProxy = "sockshost:socksport"
socksProxyType = socks5
然后在 apt.conf 文件中设置 http 代理:
Acquire::http::proxy "http://127.0.0.1:8118/";
Acquire::https::proxy "https://127.0.0.1:8118/";
第五种方案
或者您也可以在 /etc/apt/apt.conf 中输入如下内容:
Acquire::socks::proxy "socks://user:pass@host:port/";
第六种方案
在 Debian 中,您可以阅读手册页 apt-transport-http(1)
并查找支持的 URI 方案。如前所述,输入
Acquire::http::proxy "socks5h://server:port";
在
/etc/apt/apt.conf.d/12proxy
您可以在 apt.conf(5)
中阅读有关 APT-config 的更多常规信息,并阅读手册页末尾提到的 /usr/share/doc/apt/examples/configure-index.gz
中的示例。
这可以与 ssh -D <LOCAL PORT> <USER>@<HOST>
结合使用,以创建到不同系统的 SOCKS 代理,以便 apt 可以使用代理,就好像一切都源自 <HOST>
一样。
如果您使用 ssh -D 0.0.0.0:<LOCAL PORT> <USER>@<HOST>
或 ssh -D [::]:<LOCAL PORT> <USER>@<HOST>
(用于 IPv6)来允许其他系统在所有接口上使用 SOCKS 代理。这可能存在安全风险或违反(公司)政策。确保您知道自己在做什么。