我们有一台 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 地址的流量;