我有以下设置:
┌────────────────────────────────────────────────────────┐
│ Internet │
│ │
│ ┌────────────────────┐ │
│ │ │ │
│ │ │ │
│ │ client │ │
│ │ │ │
│ │ │ │
│ └─────────┬──────────┘ │
│ │ │
│ ┌─────────────────┼──────────────────┐ │
│ │ │ │ │
│ │ ┌─────────┴──────────┐ │ │
│ │ │ │ │ │
│ │ │ public │ │ │
│ │ │ server │ │ │
│ │ │ pub.ip:123.11.22.33│ │ │
│ │ │ pri.ip:10.0.0.2 │ │ │
│ │ └─────────┬──────────┘ │ │
│ │ │ │ │
└─────────┼─────────────────┼──────────────────┼─────────┘
│ │ │
│ ┌─────────┴──────────┐ │
│ │ │ │
│ │ private │ │
│ │ server │ │
│ │ 10.0.0.3 │ │
│ │ │ │
│ └────────────────────┘ │
│ │
│ Intranet │
│ 10.0.0.0/24 │
└────────────────────────────────────┘
客户端通过 ssh 连接到公共服务器,以便在私有网络上执行维护。除了公共服务器以及一个额外的面向公众的 http(s) 代理服务器(该代理服务器具有单独的公共 IP 用于网络流量,未显示)外,私有网络不连接到互联网,并且公共服务器仅监听来自互联网的 SSH、RDP 和 VPN 端口,因为它的唯一目的是充当访问私有网络上的机器的登陆服务器。
从公共服务器,我可以进一步通过 ssh 连接到私有网络上的任何计算机。目前,为了更新私有服务器上的计算机,我必须为每台计算机打开一个互联网连接,这很麻烦。我想与私有网络上的计算机共享公共服务器的互联网连接,但只有当我使用公共服务器通过 ssh 连接到私有网络上的计算机时,这样只有当我在私有计算机上工作时,它才可以访问互联网。我还想在不必通过单独的连接打开然后关闭隧道的情况下执行此操作,这样互联网连接就可以在与交互式远程 shell 相同的会话中共享。本质上是一个反向隧道。
请注意,ssh 访问是单向的,IE私有服务器上的机器无法通过 ssh 访问公共服务器(或彼此)(因此也无法访问sshuttle
),因为公共服务器配置为仅接受来自互联网的 ssh 连接,而不接受来自私有网络的连接。