通过客户端通过SSH连接使服务器访问Internet


17

我可以使用我的家用计算机A通过SSH连接到服务器B,该服务器B阻止对外部网络的访问。换句话说,从B向Internet的所有请求都将引发错误:网络不可访问。我可以重定向所有这些请求,以通过对互联网无限制访问的计算机A吗?

服务器B是托管我网站之一的服务器。我想下载文件以安装一些软件。但是连接被阻止。我能够传输文件,但是这很复杂,因为AB上的软件版本不同,因此依赖关系不同,并且AB上需要的文件也不同。

我在互联网上搜索,似乎需要反向隧道。但是我只找到重定向端口的解决方案。但这不是我所需要的,因为我不希望B访问A而是访问Internet。


如果对此问题的反对者看到此评论,您可以告诉我们为什么吗?即使答案是“不可能”,我也看不出有什么问题。
strugee


ssh允许您执行本地或远程端口转发-即,当B上的应用程序尝试打开本地端口X时,它会转发到A,以尝试打开您指定的任何端口。因此,A可以自由地将该连接请求转发到Internet。您没有提到要使用的端口或协议,这将使详细答案的构建变得容易。
稳定狗2014年

我正在尝试使用composer,因此应该下载到github的HTTP和HTTPS请求才能下载软件包。
AL

Answers:


8

您可以在计算机B随后将连接到的计算机A上运行代理,以便通过计算机A访问Internet。

像这样

             +----------+            +-----------+
             |          |+----SSH+-->|           |
             |     A    |            |    B      |
             |+--------+|            |           |
  Internet <-++-+PROXY<++<SSH Tunnel--+          |
             |+--------+|            |           |
             +----------+            +-----------+

在侦听端口3128的A上安装像squid之类的代理,然后可以使用此命令SSH到服务器-
ssh -L 3128:127.0.0.1:3128 user@B

这将允许B通过A访问互联网


连接到B后,对Internet的请求将如何重定向到A?没有配置要更改吗?
AL

您需要将B上的代理服务器设置为127.0.0.1:3128
Lawrence

10

只需在@Lawrence和@SpiRail的答案中添加更多清晰的步骤即可。

进行如下设置:

在主机A上进行设置:

  1. 在主机A上安装代理服务器Squid。默认情况下,Squid侦听端口3128。
    yum install squid
  2. 注释http_access deny all然后http_access allow all在/etc/squid/squid.conf中添加
  3. 如果主机A本身使用某些代理,请说10.140.78.130:8080连接到Internet,然后将该代理添加/etc/squid/squid.conf如下:
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
cache_peer 10.140.78.130 parent 8080 0 no-query default
never_direct allow all

在主机B上进行设置:

  1. 将以下条目添加到/ etc / environment
export http_proxy=http://127.0.0.1:3129
export https_proxy=http://127.0.0.1:3129
  1. source /etc/environment

现在我们的设置完成。

使用远程端口转发创建SSH隧道

  1. 从主机A运行以下SSH命令
    ssh -R 3129:localhost:3128 user@HostB

    如果要建立持久的SSH隧道,则可以按以下方式使用autossh:
    autossh -M 20000 -f -NT -R 3129:localhost:3128 user@HostB
    为了使上述autossh命令起作用,您应该将Host A到HostB的SSH密钥设置为

  2. 这将允许主机B通过主机A访问互联网。

检查互联网:

  1. 从主机B运行以下命令
    wget https://google.com

交通流程图在此处输入图片说明


5

@Lawrence的回答足以让我全神贯注。但是,这是我使用的更详细的步骤。

我用它来使用我的笔记本电脑4g加密狗将互联网路由到具有固定连接到wifi路由器的树莓派的路由器。

如果您的主机是Mac:安装squidman http://squidman.net/squidman/

(不仅仅是普通的鱿鱼,我在构建它时遇到了很多麻烦)默认设置对我来说似乎足够好。

连接到4g连接到wifi-在wifi上配置一个静态ip并删除网关地址(除非您正在做高级操作),否则会得到两条默认路由,这非常烦人。-确保您的wifi路由器未使用相同的192.168.xy范围(在这种情况下,请配置其他“ x”)

ssh -R 8080:localhost:8080 pi@<ip address of the pi or target machine>

在PI上

export http_proxy=http://localhost:8080

用visudo添加文本:

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

现在wget将起作用,而sudo apt-get也将起作用,以便您可以安装软件包。

如果您还想在这里使用git:https : //stackoverflow.com/questions/128035/how-do-i-pull-from-a-git-repository-through-an-http-proxy


感谢您的回答。visudo这里的作用是什么?您在哪里添加文字?(我无法sudo在自己的网络托管上使用)
AL

我不太了解您的问题,但是如果您仅在终端中输入visudo(您可能需要一个“ sudo visudo”),则可以在底部添加一行文本。
SpiRail

我的虚拟主机上没有root访问权限。
AL

现在已经很久了。但是从内存visudo编辑sudoers文件,并且添加的行意味着在键入sudo时保留了这些用户环境变量。如果您不能执行sudo,则无论如何都不需要此步骤。
SpiRail
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.