通过 VPN 连接进行 SSH

通过 VPN 连接进行 SSH

我们有一台 AWS EC2 服务器,我们已将其配置为只能从我们的办公网络内访问(通过 SSH)。显然,这对于远程安排并不理想,因为有人必须连接到 EC2 实例并在办公室外远程工作,例如在出差期间。

我已经设法通过 PPTP 设置 VPN,无论身在何处,都可以连接到办公室网络(我有两个本地 IP,一个来自 wlan0,一个来自 ppp0)。但是,当我通过 SSH 连接到 EC2 实例时,它仍然拒绝我,很可能是因为它发现我仍在尝试从网络外部进行 SSH。

我猜问题在于我无法路由 ssh 流量通过 VPN。有什么想法可以实现这一点吗?

我的另一个选择是 ssh 到办公网络内的一台机器,然后使用该机器 ssh 到 EC2 实例,但我一直犹豫不决,因为这似乎太多了。

答案1

假设您的 AWS 可通过 IP“your.ec2.ip.address”通过 SSH 访问。假设您的办公室网络通过应用某些 NAT 转换的路由器访问互联网,因此,您的办公室 PC 在互联网上可见的 IP 为“your.office.external.ip”。

我们还假设你位于外部您的办公室,您的笔记本电脑与世界各地连接,具有:

  • 由您的本地互联网提供商分配的主 IP 地址(假设为 192.168.0.33,网络掩码为 255.255.255.0,def-gw 为 192.168.0.1);
  • 远程 PPTP 服务器分配给您的笔记本电脑的 PPP0 地址(一旦您的 VPN 隧道成功建立)。假设 PPP0 是 .local.ppp0.ip,远程 P2P 是 .remote.pptp.address。换句话说,您的笔记本电脑知道是 .local.ppp0.ip,并且还知道在 VPN 隧道的另一侧,您的 PPTP 服务器可通过 VPN 在 .remote.pptp.address 处访问。

在这种情况下,如果你无法--从你的笔记本--到达你的AWS“your.ec2.ip.address”我敢打赌问题出在--正如你所猜测的--路由:你指向“your.ec2.ip.address”的SSH流量是不是您的上网本并没有留在 VPN 内,而是沿着通用的外部 VPN 路径离开(即:发送到您的本地网关:192.168.0.1)。

为了诊断此问题,可以进行非常简单的检查:

  • Linux:跟踪路径命令(例如:“tracepath -n your.ec2.ip.address”)
  • windows:“tracert”命令(例如:“tracert -d your.ec2.ip.address”)

从输出中您可以检查第二步是否报告 PPTP 地址。

如果您的流量沿着错误的路径传输,在 VPN 内路由它的简单解决方法是:

  • Linux:“route add -host your.ec2.ip.address gw the.remote.pptp.address”
  • Windows:“路由添加 your.ec2.ip.address 掩码 255.255.255.255 the.remote.pptp.address”

配置完上述路由后,可以用tracert/tracepath再次检查路由

一旦路由配置正确,您的办公室内出现问题的可能性很小:如果您的 PPTP 服务器不是进行 IP 转发和 NAT 转换时,很有可能会遇到“过滤”,以防您的笔记本和 your.ec2.ip.address 之间缺少 ip 转发或“非对称路由”(缺少 NAT 的情况下):

  • 从您到亚马逊的流量沿着 VPN 传输到您的办公室,然后从那里传输到亚马逊;
  • 从亚马逊返回您的流量,沿着常见的互联网路径路由,并且...很有可能被丢弃在某个地方。

再次:tracepath/tracert 可以帮助您检查问题。

在 Linux 机器上,另一个非常有用的朋友是“tcpdump”。一些有用的 tcpdump 命令是:

  • “tcpdump-n-i”界面icmp”检查传入/传出的 PING 请求/响应;
  • “tcpdump -n -i 主机一个 IP 地址“检查到达/发送到某个 IP 地址的流量;

相关内容