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

Sco*_*ott 37 ssh ssh-tunneling openvpn tunneling

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

当与我的提供商的 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
Run Code Online (Sandbox Code Playgroud)

需要澄清的事项:

  • 上面和下面的所有IP地址和端口号都是虚构的
  • 端口号为 xx、yy 以及介于两者之间的行是我的假设,而不是我所知道的事实。
  • 我设置了一个 cron 作业,它每分钟运行一次我的另一个 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
Run Code Online (Sandbox Code Playgroud)

在这一点上,我希望能够从ssh登录myhomeMy VPS的图片,而VPN是和使用腻子。

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

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

小智 18

您被锁定在您的 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
Run Code Online (Sandbox Code Playgroud)

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

然后,当您的服务器连接到 vpn 服务时,您将能够通过 ssh 进入您的服务器。

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

  • 它也对我有用。尽管如此,我还是无法理解这到底是做什么的;你介意解释一下这允许/禁止什么样的连接吗? (6认同)

Joh*_*Doe 5

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

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

以下内容对我有用。它使用 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
Run Code Online (Sandbox Code Playgroud)

===

更新:

以上在 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
Run Code Online (Sandbox Code Playgroud)

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