将所有流量从服务器 A(Linux)重定向到另一个服务器 B(Linux),而不拦截到服务器 A 的 ssh

将所有流量从服务器 A(Linux)重定向到另一个服务器 B(Linux),而不拦截到服务器 A 的 ssh

我想将所有流量从一台服务器 (Linux) 转发到另一台服务器 (Linux),而不会丢失对第一台服务器的 ssh 访问权限。当局 (政府) 一直在关闭互联网,我们很难访问国外的互联网。

我已经配置了服务器 BOpenConnect 服务器我可以从本地成功连接到服务器 B

Local Machine === (via vpn) ===> Server B

但有时无法从本地访问服务器 B,我只能从服务器 A 访问它(仅认为 A 到 B)

Local Machine === (ssh) ===> Server A === (ssh) ===> Server B

以下是我尝试正确执行的工作流程,以便将所有流量从服务器 A 重定向(或转发)到服务器 B

Local Machine === (via vpn) ===> Server A === (via vpn) ===> Server B

因此我可以从本地连接到服务器 B,而服务器 A 是一个辅助服务器,

  • 它是一个 OpenConnect 服务器(所以我可以从本地连接到它)
  • 所有流量都转发到服务器 B(通过 opencoonect 客户端)
  • 我可以通过 SSH 连接到服务器 A 来管理它(它连接到服务器 B)

我尝试使用 OpenConnect 客户端从服务器 A 建立到服务器 B 的连接。
我知道此操作会切断我的 SSH 连接和服务器 B 的传入流量。

问题 1是否可以使用 OpenConnect 来解决这个问题,或者不,另一种解决方案是使用微特克更好,或者将服务器A变成路由器......

问题2.如果使用OpenCoonect可以完成,如何配置服务器A?

我在服务器 A 上尝试了一些ip命令iptables,但没有作用。


服务器 A(虚拟机,Debian 11)

  • 有公共 IP 地址(在我的国家内)
  • 只有一个接口(eth0)

服务器 B(虚拟机,Ubuntu 20)

  • 有公共 IP 地址(在我国外)
  • 只有一个接口(eth0)
  • 是一个 OpenCooenct 服务器

问候。

答案1

您能详细说明一下期望的结果与感知到的问题吗?比如具体目标是什么。路由器将所有 WAN 流量以加密方式隧道传输到其他地方,例如 TOR。它仅用于网页浏览(HTTP 代理)还是其他应用程序(SoCKS 代理)等?

如果是这种情况,我会在家里这样做,以绕过我的手机提供商的带宽控制。我使用 ATT 认为是家庭互联网电话的蜂窝调制解调器。他们对允许全速访问哪些网站以及他们喜欢保姆的网站非常挑剔。我有一个非常基本的 Linux 路由器,它代理另一个网络上的 SSH 服务器,该服务器由我在其他地方控制,而不是 ATT。然后我通过设置 SOCAT 作为服务并将其用于整个 LAN,并通过监听 127.0.0.1 的 SSH 代理进行中继。

我的 LAN 客户端将防火墙设置为其代理,并且当它们到达世界时,互联网认为所有客户端都在另一个网络上。

因此,对于您来说,您需要有人在非限制区域,并且需要一个能够通过他们过滤的端口/协议。从那里,您的所有流量都将通过该隧道,并且不受检查。

这是你想要的吗?如果是的话我可以提供如何做的指导......

SSH 隧道 https://www.baeldung.com/linux/ssh-tunneling-and-proxying

SOCAT 套接字转发(从 127.0.0.1 的代理中继到 LAN 可访问接口 IP) https://www.redhat.com/sysadmin/getting-started-socat

将其包装到非常基本的 Linux 路由器中。 https://gridscale.io/en/community/tutorials/debian-router-gateway/

如果您进行最小安装“专家安装”,您的路由器/防火墙将非常小。可以对远程端点执行相同操作,实际上它只是一个允许动态转发的 SSH 服务器,同样,需要最低限度的 Linux 安装和非常少的资源。'易于预配置并运送到国外的某人以在 KVM 或 virtualbox 之类的东西中运行。

如果您计划上网,至少使用公钥进行 SSH 身份验证。建议使用公钥 + 密码,这样更安全,如果您愿意,也可以使用 MFA,例如谷歌身份验证器。 https://kb.iu.edu/d/aews https://goteleport.com/blog/ssh-2fa-tutorial/

然后您要做的就是信任运行远程端的人。

答案2

经过更多搜索,我发现有两种方法可以解决这个问题

  1. 站点到站点 VPN(例如使用 MikroTik RouterOS)
  2. 客户端到服务器 VPN(例如使用 OpenConnect 或 SoftEther)

在站点到站点 VPN 中,隧道是​​从一个网络网关(到另一个网络网关)创建的,因此我们可以通过 SSH 连接到我们的 VM,没有任何问题。

但在客户端到客户端/站点 VPN 中,由于我们在通过 SSH 进入的虚拟机中运行 VPN 客户端,因此 SSH 会话的流量被阻止,因为整个虚拟机流量都通过 VPN 客户端接口(例如 tun0)路由。
为了解决这个问题,我们只需添加一个静态路由在运行 VPN 客户端之前,请先检查 SSH 会话。查看答案

现在我可以通过 SSH 连接到 VM,从那里运行 VPN 客户端,绕过所有网络限制(在我的国家/地区),同时我的 SSH 会话处于活动状态并正常运行。


最后我终于解决了这个问题。
使用以下协议之一从我的本地计算机到 ServerA(VPN 服务器):

  • OpenVPN
  • WireGuard
  • 顺时针
  • OpenConnect

并从那里(服务器 A)使用 SoftEther SSTP 到服务器 B(第二个 VPN 服务器)。

所以我可以这样做:

Local Machine === (via vpn) ===> Server A === (via vpn) ===> Server B
# and finally 
# local machine IP = Server B IP

相关内容