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


22

我有一个虚拟专用服务器,我想在服务器连接到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切换My VPS到图片。

过去,在我的一个工作场所中,给我一个非常奇怪的顺序,使它SSH到一个极其安全的服务器中,该服务器中有三个@符号。因此,它在我的想象中从一个盒子跳到另一个盒子,但是由于跳转盒运行的是某些版本的Windows OS和专有应用程序,因此我看不到任何隐患。因此,我并没有引起太多关注。现在我开始意识到,我可能处于相同或相似的情况。

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

Answers:


10

由于VPN服务启动后,您的ssh数据包将通过VPN而不是VPS的公共IP 50.2.1.3进行路由,因此您无法进入VPS。

让我们假设您的服务器是:

  • 公用IP为50.1.2.3(根据您的示例设置)
  • 公用IP子网是50.1.2.0/24
  • 默认网关为xxx1
  • 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 x.x.x.1

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

然后,当服务器连接到vpn服务时,您将可以进入服务器。

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


效果很好。
Anthony Giorgio

3
它也对我有用。不过,我仍然无法理解这到底是做什么的。您介意解释此连接允许/禁止的类型吗?
编码僧侣

是的,我也想要更多解释。“使用iproute2执行以下操作”未明确说明iproute2是什么,或在什么计算机上执行此操作。
deanresin

如何获得我的公共IP子网?我已经在网上搜索了一段时间,但找不到它。究竟是什么?
托尼·弗里斯

2

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

问题是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

===

更新:

以上对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

原始的非VPN网关必须为“ 12.345.67.89”。


这也可以与ExpressVPN一起使用吗?他们有带有一个命令行工具“expressvpn”的安装程序,你可以称之为“连接”或“断开我想你已经张贴什么,也没有工作,难道一定是OpenVPN的。?
托尼FRIZ

我就是无法解决这个问题……让我发疯。@hcb上面的答案确实有效。但是我真的很好奇为什么你的答案对我不起作用!缺少某些内容,我认为这导致MANGLE规则无法执行
Motsel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.