Обычно виртуальный ящик и VMware настраивают сетевое подключение к vm через хост, который будет основан на NAT, в подсети, изолированной от тестовой локальной сети. Это имеет преимущества и недостатки реализации NAT на домашних маршрутизаторах большинства людей. Вы не "видимы" для сети / Интернета, пока не инициируете трафик или не настроите переадресацию портов. В случае серверного приложения вам необходимо, чтобы хост пересылал пакеты на порт, в данном случае 21/22, на ваш IP-адрес гостевой системы.
Я почти всегда настраиваю свою виртуальную машину для работы в мостовом режиме вместо NAT отчасти, чтобы избежать этого. Я не могу сказать вам, как именно это сделать, потому что вы не сказали нам, какое программное обеспечение vm вы используете. Но сделать это очень просто.
В мостовом режиме гость получит IP-адрес от LAN DHCP-сервера и будет находиться в той же локальной сети, что и все другие клиенты, что делает то, что вы пытаетесь сделать, тривиальным.
В итоге я использовал комбинацию ложных факторов и итеративный подход (как отказоустойчивый). Это не должно быть так сложно, как я изначально предполагал. Оказывается, на данный момент для FAT требовалось немного подделки, но для ext требовалось огромное количество отрицательных подделок; с нулевым коэффициентом выдумки для ext4 у меня было много свободного места (более 21M). Я перешел на ext2 (кому нужен вонючий журнал ?!), увеличил размер блока и тщательно подсчитал нужные мне inode, и получил еще больше мегабайт свободного места. Полагаю, я мог бы получить «реальный размер» от du и продолжить работу оттуда, но я решил, что подсчет накладных расходов, даже если это разные файловые системы, будет более точным приближением.
# Estimated filesystem overhead, in 512-byte blocks
FS_ESP_FUDGE=256
FS_ISO_FUDGE=-80000 # Wow!
FS_FUDGE_INCR=1024
...
read ESP_RSIZE d < <(du --summarize --block-size=512 $ESP)
read ISO_RSIZE d < <(du --summarize --block-size=512 $ISO)
success=false
until $success; do
let ESP_SIZE=ESP_RSIZE+FS_ESP_FUDGE
let ISO_SIZE=ISO_RSIZE+FS_ISO_FUDGE
let ESP_START=2048
let IMG_SIZE=ESP_SIZE+ISO_SIZE+ESP_START
let ESP_END=ESP_START+ESP_SIZE-1
let ISO_START=ESP_END+1
success=true
...
sudo /sbin/mkfs.vfat /dev/mapper/$p1 -F 16 \
|| error_exit "mkfs.vfat failed" 5
# -N: Count the inodes (all files, plus . and .. for each directory,
# which I can't get "find" to include).
sudo /sbin/mke2fs -b 4096 -N $(( $(find $ISO | wc -l ) + 2 * $(find $ISO -type d | wc -l))) -m 0 -q /dev/mapper/$p2 \
|| error_exit "mke2fs failed" 6
...
if ! tar -C $ESP -c --exclude-vcs --exclude-backups . | \
sudo tar -C mnt/esp -x; then
{
read
read fs onek used avail use rest
} < <(df mnt/esp)
# Are we out of disk space? If not, bail, else increase margin, retry
[[ $onek -ne $used || $avail -ne 0 || $use != "100%" ]] && \
error_exit "esp tar failed" 9
let FS_ESP_FUDGE=FS_ESP_FUDGE+FS_FUDGE_INCR
success=false
fi
if ! tar -C $ISO -c --exclude-vcs --exclude-backups . | \
sudo tar -C mnt/iso --owner=root --group=root -x ; then
{
read
read fs onek used avail use rest
} < <(df mnt/iso)
# Are we out of disk space? If not, bail, else increase margin, retry
[[ $onek -ne $used || $avail -ne 0 || $use != "100%" ]] && \
error_exit "iso tar failed" 10
let FS_ISO_FUDGE=FS_ISO_FUDGE+FS_FUDGE_INCR
success=false
fi
$success || echo "Whoops, I guessed too small; please adjust fudge factor. Retrying ..."
...
done