
У меня есть 2 компьютера. На компьютере A запущена виртуальная машина, которая находится за NAT. Компьютер B просто хочет выполнить PING этой виртуальной машины. Я знаю, что виртуальная машина за NAT должна быть недоступна извне, поэтому NAT там и есть. Мой эксперимент — просто узнать, как все это работает.
IP компьютера A: 192.168.1.105
IP виртуальной машины на компьютере A: 172.16.66.132
IP компьютера B: 192.168.1.107
Насколько я понимаю, компьютер B не может выполнить команду PING виртуальной машины, поскольку не знает, как туда попасть, и пытается сделать это через маршрутизатор (192.168.1.1), что не удаётся, поскольку маршрутизатор затем подключается к Интернету (что я проверил с помощью tracert
).
Я подумал, что могу изменить это, добавив пользовательскую запись в таблицу маршрутизации на компьютере B. Итак, я это сделал:
route add 172.16.66.0 MASK 255.255.255.0 192.168.1.105
Правило выше сообщит компьютеру B, что сеть 172.16.66.0 доступна через 192.168.1.105 (который является IP-адресом компьютера A).
Результат? Никаких изменений. Я даже увидел, что при пинге виртуальной машины моя пользовательская запись была удалена из таблицы.
Почему мое решение не работает?
решение1
Команда route add
неэффективна, и маршрут, вероятно, удален, поскольку он был протестирован и оказался недействительным.
Причина в том, что у вас ситуация двойного NAT: программное обеспечение виртуальной машины, которое вы используете, имеет свой собственный виртуальный маршрутизатор, который выполняет DHCP и NAT для виртуальных машин. У хост-компьютера нет маршрута к этому виртуальному маршрутизатору, поэтому он не может ничего пересылать.
Я предлагаю в этом случае определить виртуальную сеть как Bridged вместо NAT.