apt-get 通过隧道代理安装,但只能从客户端使用 ssh

apt-get install via tunnel proxy but ssh only from client side

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

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

如何模拟:

sudo ssh -D 9999 root@<machineoutsidevpn>

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

一个选项是启用 SSH 隧道。这可以让你 运行 另一个协议中的 SSH 会话,这个选项可以让你绕过防火墙,让它认为传入连接实际上是一个 http 端口 80 回复而不是端口 21。下面是一个例子,你可以需要根据自己的喜好进行微调。

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

祝你好运!

设置:

计算机 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. 运行 您的 apt-get updateinstallupgrade 在计算机 B 上它应该可以工作。


一些注意事项:

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

使用腻子

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

  1. 启动会话时,select SSH --> 隧道
  2. 源端口:<selected port>
  3. 目的地:us.archive.ubuntu.com:80
  4. Select "Remote" 单选按钮
  5. Select "Add" 按钮
  6. 像往常一样配置您的会话。
  7. 按照上面的步骤 2 和 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' 用于另一个新的 shell,'n/p' 用于在 shell 之间循环,'d' 分离留下东西 运行ning).

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'

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

在这种情况下,它的独立局域网 IP 地址是 pi 连接回的 'server'。它是获取代理链和 tmux 的 pi,然后可以通过 apt 进行更新。

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

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