我正在具有以下网络适配器设置的虚拟机上运行 CentOS 6.6 VM。
用于托管可由主机访问的 Web 服务器的桥接适配器
具有从主机到来宾虚拟机的 ssh 端口转发的 NAT
我想从这个虚拟机中 ssh 到 VPN 上的远程计算机(该主机已连接到)。下图描述了设置。
MyCentosVM =======SSH======= TargetMachine
MyCentosVM == Host == VPN == TargetMachine
如果我禁用桥接适配器,我可以毫无问题地访问目标,因为 NAT 允许虚拟机透明并成为 VPN 的“一部分”。但是,如果我启用桥接适配器,现在 Target 的 sshd 会拒绝连接,甚至在身份验证过程之前也是如此。
所以我的问题是,是否可以指定虚拟机使用 NAT 接口 ssh 到目标?
答案1
直接说,不,没有。但是,您可以使用 SSH 的配置文件(通常位于~/.ssh/config
.或者,您需要在访客上配置路由表,以便当流量流向目标计算机时通过 VPN。 SSH 将简单地使用您通过 SSH 进行连接的计算机所指向的任何网络路径。
答案2
由于我已经用完了红色药丸,以下是不是提供强制将 SSH 流量的特定接口发送到特定主机的解决方案。这看起来也像一个XY问题,因为您不希望强制使用接口,所以您正在尝试使本地虚拟机与位于远程网络中的主机进行交互。我仍然认为我可以帮助你一点。
TL;DR:向 CentOS VM 添加一条路由,使其在与 Target 交互时应使用可通过 NAT 接口访问的路由器。ip route add <Target>/32 via <router_ip_address>
总的来说,你的设置似乎被破坏了。如果确实是目标计算机拒绝了您的 SSH 连接,那么它肯定已损坏。
- VPN 只能让您的主机进入网络,
- 或者它旨在连接您的网络。
在第一种情况下,您的 SSH 流量永远不会到达目标计算机。因此,它无法拒绝它。
在第二种情况下,VPN/设置无法正确连接您的两个网络。
根据您的描述,我了解到 VPN 仅用于将您的主机连接到某个网络。如果是这种情况,那么整个问题就是路由问题,并且您的虚拟机与 VPN 上的计算机(主机除外)交互的唯一可行方式是通过主机的 NAT。因此你总是必须选择 NAT 接口,而不仅仅是 SSH。
如果您不激活桥接适配器,您的 VM 将使用通过 NAT 接口的路由与 Target 进行交互。 (用于ip route show
显示配置的路由。)一旦激活桥接适配器,它就会通过桥接适配器使用路由。这也表明您的设置已损坏。例如,您的虚拟机上可能存在重叠的 IP 子网和/或多个默认路由。
您当前的问题似乎是,一旦您激活桥接适配器,您的 CentOS VM 就会学习一些默认路由,它比使用 NAT 接口更喜欢使用这些默认路由。
为了解决你的问题,你必须添加一条到你的 CentOS VM 的路由,它告诉系统在与 Target 交互时使用可通过 NAT 接口访问的路由器,甚至是 VPN 网络上的每个主机。如果您的设置没有任何问题,则此路由将始终优先于默认路由。
最后是一个:
ip route add \
<network_id_of_vpn_network>/<prefix_length_of_vpn_network> \
via <your_hosts_ip_on_the_NAT_network>`