【问题标题】:apt-get install via tunnel proxy but ssh only from client sideapt-get 通过隧道代理安装,但 ssh 仅来自客户端
【发布时间】:2016-07-21 02:52:58
【问题描述】:

所以...这是我的问题:

我可以从我的机器访问 VPN。我可以通过 SSH 访问 VPN 中的服务器,但由于防火墙阻止了反向 ssh 连接,这台机器无法从内向外访问。所以我不能通过隧道使用 Internet 来使用 apt-get。

我该如何模仿:

sudo ssh -D 9999 root@<machineoutsidevpn>

但来自 VPN 外部。 或者有什么方法可以使用 Internet 连接来安装包?

【问题讨论】:

标签: ubuntu proxy firewall vpn apt


【解决方案1】:

设置:

电脑A

  • 可以上网
  • 可以访问计算机 B
  • SSH 已安装

电脑B

  • 无法访问互联网
  • OpenSSH 服务器已安装

步骤:

  1. ssh 到计算机 B 计算机 A

    sudo ssh -R <selected port>:us.archive.ubuntu.com:80 user@computerb.host
    
  2. 编辑计算机 B 的 /etc/apt/apt.conf 以包含以下行:

    Acquire::http::Proxy "http://localhost:<selected port>";
    Acquire::https::Proxy "https://localhost:<selected port>";
    
  3. 在计算机 B 上运行 apt-get updateinstallupgrade,它应该可以工作。


几点说明:

  • 必须在使用计算机 B 访问 apt-get 存储库时保持从计算机 A 到计算机 B 的 ssh 原始会话处于活动状态。
  • 您不必使用相同的 ssh 连接来利用隧道(这意味着如果您有多个 ssh 连接到计算机 B,它们应该都可以工作)

使用腻子

这也可以使用 Putty 来实现(假设计算机 A 是 Windows 机器)。

  1. 启动会话时,选择 SSH --> Tunnels
  2. 源端口:&lt;selected port&gt;
  3. 目的地:us.archive.ubuntu.com:80
  4. 选择“远程”单选按钮
  5. 选择“添加”按钮
  6. 像往常一样配置会话。
  7. 按照上述步骤 2 和 3 进行操作

【讨论】:

  • 谢谢!你救了我的命。它适用于官方存储库,但是......如果我需要额外的包或使用 python pip 怎么办。
  • 我在计算机 A 中尝试过:ssh -R 8889:pypi.python.org:443 user@computerb.host 和计算机 B 中:sudo pip --proxy=localhost:8889 install 。但它不起作用
  • @rasputino python pip 提出了一个完全不同的问题。在我花在这方面的有限时间内,我无法让它发挥作用。我只是手动安装软件包。
  • debian 发行版使用:ftp.us.debian.org:80
  • 这只是部分有效:它对大多数 https 流量都失败了。即使您使 apt 忽略证书,它仍然不起作用。但如果你幸运的话,这已经足够了......有些东西可能会安装。
【解决方案2】:

一个选项是启用 SSH 隧道。这使您可以在另一个协议中运行 SSH 会话,此选项可以让您绕过防火墙,让防火墙误以为传入连接实际上是 http 端口 80 回复而不是端口 21。下面是一个示例,您可能需要微调随你喜欢。

ssh -L 9000:serverIpAddress:80 user@example.com

祝你好运!

【讨论】:

  • 我试过了,但它不起作用,我认为所有的连接都是被禁止的。我可以使用命令“ssh -L 9000:serverIpAddress:80 user@example.com”从外部连接,但是当我在 tsocks 内的服务器中连接时不起作用。 (我之前在127.0.0.1和9000端口上配置了tsocks)
  • 如果它是一个深度数据包检查防火墙,它会变得相当复杂。尝试找出您正在处理的防火墙类型。
【解决方案3】:

安装 proxychains 和 tmux:你可能会遇到这样的事情:

sudo ssh -R 8080:us.archive.ubuntu.com:80 user@computerb.host
echo 'Acquire::http::Proxy "http://localhost:8080";' | sudo tee /etc/apt/apt.conf.d/proxy.conf
apt-get update
apt-get install proxychains tmux
sudo rm /etc/apt/apt.conf.d/proxy.conf

注意到最后一行取消了 apt 代理配置吗?

拥有代理链和 tmux 后,您可以获得更可靠的操作,并且无需更改时髦的 apt 配置,并且 pip / curl 等也可以工作。

首先,启动 tmux。 (快速入门,使用CTRL-B 而不是另一个键,'c' 表示另一个新外壳,'n/p' 表示在外壳之间循环,'d' 分离并保持运行)。

tmux

接下来,我们将建立一个 ssh 连接,从隔离的计算机返回到任何可以通过 SSH 访问且可以访问互联网的计算机,我们称之为server

ssh -f -NT -M -S ~/.ssh/ssh_socket_for_proxychains -D 127.0.0.1:17471 server

这似乎什么也没做,因为它在后台运行。你可以用ps aux |grep ssh左右看到它。

现在,配置/etc/proxychains.conf

sudo nano /etc/proxychains.conf

将最后一行从 socks4 127.0.0.1 9050 更改为 socks5 127.0.0.1 17471

最后,您现在可以运行 sudo proxychains apt upgrade -yproxychains pip install ... 之类的东西而不会失败。

作为奖励,您可以分离 tmux 会话 (CTRL-b,d) 并稍后返回(ssh 重新进入,然后 tmux a)。

对于 raspberrypi,如果您将“us.archive.ubuntu.com”更改为“archive.raspberrypi.org”,它会起作用,而对于随机 debian,您可能会遇到“ftp.us.debian.org”的运气

对我来说,用例是隔离静态 ip 网络上的 raspi 之类的东西,我有另一台服务器,它有两个网络连接(一个可以访问互联网,另一个连接到隔离的局域网),它不路由:它正在运行 trueNAS ,并且局域网处于隔离状态。 但它确实有我可以 ssh 进入的 opensshd,然后 ssh 到 pi。

在这种情况下,它的独立局域网 IP 地址是 pi 连接回的“服务器”。它的 pi 获得了 proxychains 和 tmux,然后可以通过 apt 进行更新。

ssh -R 部分归功于 James Mertz,但它仅适用于 http 流量,任何具有 https URL 的东西都会失败;它不适用于 pip:从一堆不同的随机服务器中获取东西。不过,用它来获取代理链已经足够了。

proxychains howto 部分来自https://yuzhangbit.github.io/tools/use-apt-get-behind-socks5-proxy/

【讨论】:

    猜你喜欢
    • 2015-09-09
    • 2010-09-18
    • 2017-04-15
    • 1970-01-01
    • 2016-07-28
    • 2020-01-28
    • 2021-01-23
    • 2020-03-12
    • 1970-01-01
    相关资源
    最近更新 更多