有一台服务器通过 VPN 与其连接(使用 GRE 协议)。我无法从家庭网络连接到此 VPN,因为提供商不允许使用 GRE。但我在其他网络中有另一台工作服务器(从家里通过 SSH 连接到它),我可以从该服务器通过 VPN 连接到服务器。有没有办法通过工作服务器建立隧道从家里连接到 VPN 服务器?SSH 连接对我来说是另一种选择。家用电脑和工作服务器都使用 ubuntu 操作系统,vpn 服务器使用 centos。
答案1
这绝对是可能的。正如您所说,您只需要 SSH,最简单的方法可能是从您的“另一台工作服务器”(我们称之为Server B
)到您的第一台接受 GRE 的服务器(称之为Server A
)建立 GRE 连接。一旦您完成此操作并且它可以通过 SSH 从Server B
到 ,Server A
您就可以从家里链接它。即首先连接到Server B
SSH,然后Server A
从那里通过 SSH 到 。
如果您希望在没有该链的情况下建立 SSH 连接,则必须在 上设置某种路由和/或端口转发 (NAT) Server B
。确切的配置在很大程度上取决于您的配置,并且超出了本问题的讨论范围。
答案2
一旦您可以访问工作服务器,您就可以轻松地做到这一点。
示例假设
- 源系统(在家):10.0.0.1
- 工作系统(跳转服务器):10.0.0.2(ssh 在标准端口 22/TCP 上运行)
- 目标服务器:10.0.0.3(ssh 在标准端口 22/TCP 上运行)
- 通过服务器B进行端口转发
通过打开 ssh 隧道,您可以设置本地端口转发(-L [<本地地址>:]<本地端口>:<要转发到的远程地址>:<要转发到的远程端口>)然后你可以打开另一个指向 <local_addr> 的 ssh 连接,但使用参数-p <本地端口>或第一个隧道。使用以下配置:
- 第一条隧道必须通车,其余的才能通车
- 您可以通过第一个隧道建立更多连接(更多 ssh 连接、scp 连接……)
(1) ssh -L 10022:10.0.0.3:22 10.0.0.2
(2) ssh -p 10022 127.0.0.1
(3) scp -P 10022 <local_file> 127.0.0.1:<destination_file>
+-----+ +-----+ +-----+
| A |=== 1 ==| B | | C |
| | -- 2 - | -2- | - 2 -> | |
| | -- 3 - | -3- | - 3 -> | |
| |========| | | |
+-----+ +-----+ +-----+
10.0.0.1 10.0.0.2 10.0.0.3
- 本国的使用“本机”跳转主机进行 ssh 连接
ssh 为这种连接提供“原生”支持,使用-J <目的地>参数。对于目的地建议使用配置(~./ssh/config)文件。
代码示例如下(外部连接是“透明的”)
(1) ssh -J 10.0.0.2 10.0.0.3
+-----+ +-----+ +-----+
| A |========| B | | C |
| | -- 1 - | -1- | - 1 -> | |
| |========| | | |
+-----+ +-----+ +-----+
10.0.0.1 10.0.0.2 10.0.0.3