ssh 到连接到 VPN 服务的服务器

ssh 到连接到 VPN 服务的服务器

我有一个虚拟专用服务器,我想在我的服务器连接到 VPN 服务时运行 Web 服务器

当与我的提供商的 VPN 连接未建立时,我可以使用此服务器执行任何操作:ssh、scp、http 等。

一旦 openvpn 运行并连接到提供商的 VPN 服务,服务器就无法以任何方式访问,当然这是有充分理由的

图片是这样的:

           My VPS                             ------------
         +----------------+                  /            \
         |                |                 /   Internet  /       101.11.12.13
         |        50.1.2.3|-----------------\   cloud    /----<--- me@myhome
         |                |                  /           \
         |     10.80.70.60|                 /             \
         +----------------+                 \              \
                        :                    \_____________/
                        :                           :
                        :                           :
                        :                           :
                        :                           :
                  +------------------+              :
                  |     10.80.70.61  |              :
                  |               \  |              :
                  |                \ |              :
                  | 175.41.42.43:1197|..............:
                  |   175.41.42.43:yy|   
                  |       .....      |
                  |   175.41.42.43:xx|
                  +------------------+



Legend                  
------ Line No VPN connection present
...... Line VPN connection established

需要澄清的事情:

  • 上面和下面的所有IP地址和端口号都是虚构的
  • 带有端口号 xx、yy 以及介于两者之间的任何内容的行是我的假设,而不是我所知道的事实。
  • 我设置了一个 cron 作业,每分钟运行一次 ping 我的另一个 VPS,运行 apache2 在 apache2 日志中,我可以看到当 VPN 处于活动状态时,原始 IP 地址从 50.1.2.3 更改为 175.41.42.43,因此 VPN 工作正常

OpenVPN 日志显示这些:

UDPv4 link remote: [AF_INET]175.41.42.43:1197
[ProviderName] Peer Connection Initiated with [AF_INET]175.41.42.43:1197
TUN/TAP device tun0 opened
do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
sbin/ip link set dev tun0 up mtu 1500
/sbin/ip addr add dev tun0 local 10.80.70.60 peer 10.80.70.61

此时,我希望能够在 VPN 已启动并使用 PuTTY 的情况下从图片中myhome的ssh 到 。My VPS

过去,在我的一个工作场所,我收到了一个非常奇怪的序列,用于 ssh 进入一台极其安全的服务器,该服务器的@字符串中有三个标志。因此,正如我想象的那样,它从一个盒子跳到另一个盒子,但由于跳盒运行的是某些版本的 Windows 操作系统以及其上的专有应用程序,因此我无法看到幕后发生的情况。所以我没有太注意。现在我开始意识到,我可能也处于同样或相似的情况。

使用图表和/或日志片段中的 IP 地址和端口,有人可以告诉我如何穿越此隧道并访问我的服务器吗?

答案1

您会被锁定在 VPS 之外,因为一旦 VPN 服务启动,您的 ssh 数据包将通过 VPN 而不是 VPS 的公共 IP 50.2.1.3 进行路由。

让我们假设您的服务器:

  • 公共IP是50.1.2.3(根据您的示例设置)
  • 公共IP子网是50.1.2.0/24
  • 默认网关可能是 50.1.2.1
  • eth0 是设备到网关

使用 iproute2 执行以下操作:

ip rule add table 128 from 50.1.2.3
ip route add table 128 to 50.1.2.0/24 dev eth0
ip route add table 128 default via 50.1.2.1

然后运行您的 OpenVPN 客户端配置:openvpn --config youropenvpn-configfile.ovpn &

然后,当您的服务器连接到 VPN 服务时,您将能够通过 ssh 登录到您的服务器。

您需要添加适当的 iptable 过滤器来限制非 ssh:22 会话对您的公共 IP 的访问。

要详细了解这些命令,请参阅相关答案

答案2

这可能有点晚了,但是......

问题是默认网关会被 OpenVPN 更改,这会中断您当前的 SSH 连接,除非您在启动 OpenVPN 之前设置适当的路由。

以下内容对我有用。它使用 iptables 和 ip (iproute2)。下面假设OpenVPN启动前的默认网关接口为“eth0”。这个想法是确保当建立到 eth0 的连接时,即使 eth0 不再是默认网关接口,该连接的响应数据包也会再次返回到 eth0 上。

您可以对连接标记、防火墙标记和路由表使用相同的编号。我使用不同的数字来使它们之间的差异更加明显。

# set "connection" mark of connection from eth0 when first packet of connection arrives
sudo iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234

# set "firewall" mark for response packets in connection with our connection mark
sudo iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 table 3412

# route packets with our firewall mark using our routing table
sudo ip rule add fwmark 4321 table 3412

===

更新:

上面的内容对我来说在 Debian Jessie 上工作得很好。但在较旧的 Wheezy 系统上,我刚刚发现需要将“via”添加到路由表条目中:

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 via 12.345.67.89 table 3412

其中“12.345.67.89”一定是原非VPN网关。

答案3

此外六氯代苯回答,如果您想让这些更改在重新启动后永久生效,您可以使用以下网络管理器命令:

nmcli connection modify ens192 +ipv4.routing-rules "priority 100 from 50.1.2.3 table 128"
nmcli connection modify ens192 +ipv4.routes "0.0.0.0/0 50.1.2.1 table=128, 50.1.2.0/24 onlink=true table=128"

第一行是创建rule,第二行创建两者routes。请注意,这0.0.0.0/0相当于default原始答案中的

答案4

假设您有一台连接到 OpenVPN 主机的客户端 PC。

对于通过 VPN 隧道的 SSH:https://askubuntu.com/questions/1069846/connected-to-openvpn-server-but-cant-ssh

在 OpenVPN 主机上:

$ sudo ufw启用
$ sudo ufw允许1194/udp注释“允许OpenVPN连接”
$ sudo ufw允许从10.8.0.1/24到任何端口22 proto tcp注释“允许VPN客户端使用SSH”

在客户端:

确保 OpenSSH 已安装并正在运行,并且端口 22 在防火墙上打开。

然后: $ ssh[电子邮件受保护] (将“用户”更改为您在服务器/主机上的登录名)。

相关内容