通过 SSH 连接的客户端,让服务器访问 Internet

A.L*_*A.L 33 ssh ssh-tunneling

我可以使用我的家用计算机A通过 SSH 连接到服务器B,在该服务器B上无法访问外部网络。换句话说,所有从B到 Internet 的请求都会抛出一个错误:Network is unreachable。我可以重定向所有这些请求以通过可以不受限制地访问 Internet的计算机A吗?

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

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

dhe*_*dra 31

只需为@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 来连接到互联网),则还要将该代理添加到/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
Run Code Online (Sandbox Code Playgroud)

在主机 B 上设置:

  1. 将以下条目添加到 /etc/environment
export http_proxy=http://127.0.0.1:3129
export https_proxy=http://127.0.0.1:3129
Run Code Online (Sandbox Code Playgroud)
  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 命令工作,你应该设置从 HostA 到 HostB 的 SSH 密钥

  2. 这将允许主机 B 通过主机 A 访问 Internet。

检查互联网:

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

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


Law*_*nce 16

您可以在计算机 A 上运行代理,然后计算机 B 将连接到该代理,以便通过计算机 A 访问互联网。

像这样的东西

             +----------+            +-----------+
             |          |+----SSH+-->|           |
             |     A    |            |    B      |
             |+--------+|            |           |
  Internet <-++-+PROXY<++<SSH Tunnel--+          |
             |+--------+|            |           |
             +----------+            +-----------+
Run Code Online (Sandbox Code Playgroud)

在 A 上安装一个像 squid 这样的代理,它侦听端口 3128,然后你可以用这个 ssh 到服务器 -
ssh -L 3128:127.0.0.1:3128 user@B

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


小智 7

@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>
Run Code Online (Sandbox Code Playgroud)

在 PI

export http_proxy=http://localhost:8080
Run Code Online (Sandbox Code Playgroud)

使用 visudo 添加文本:

Defaults env_keep = "http_proxy https_proxy ftp_proxy"
Run Code Online (Sandbox Code Playgroud)

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

如果你也想要 git,它在这里:https : //stackoverflow.com/questions/128035/how-do-i-pull-from-a-git-repository-through-an-http-proxy