Вы можете использовать правило iptables:
iptables -t nat -I PREROUTING -p tcp --dport 80 -d xxx.xxx.xxx.xxx -j DNAT --to-destination yyy.yyy.yyy.yyy
Где xxx.xxx.xxx.xxx — адрес, который вы хотите подделать, а yyy.yyy.yyy.yyy — адрес сервера, на который вы хотите направить трафик. Вы можете добавить это в пользовательские правила.
Значимой частью сообщения об ошибке была cannot find a device for /
, потому что команда mount
не выводит запись устройства для /
.
Чего я не сказал в вопросе, так это того, что пытался напрямую установить rootfs в подтом BTRFS. Судя по всему, chroot
не может обнаружить устройство /
в этом сценарии.
Вот что я сейчас делал:(X
это корневой раздел (устройство ), Y
это загрузочный раздел)
host:# mount /dev/X /mnt/mydiskroot
host:# btrfs sub create /mnt/mydiskroot/rootfs
host:# mkdir /mnt/mydiskroot/rootfs/boot
host:# mount /dev/Y /mnt/mydiskroot/rootfs/boot
host:# rsync -avP debian-stretch-rootfs/ /mnt/mydiskroot/rootfs
host:# do-chroot.sh /mnt/mydiskroot/rootfs
root@guest:/# mount | awk '$3 == "/" {print}' # nothing shows up, so update-grub throws the mentioned error
Вот как я решил:
root@guest:/# exit
host:# mkdir /mnt/actual-rootfs
host:# mount -t btrfs -o subvol=rootfs,defaults /dev/X /mnt/actual-rootfs/
host:# umount /dev/Y
host:# mount /dev/Y /mnt/actual-rootfs/boot
host:# do-chroot.sh /mnt/actual-rootfs
root@guest:/# mount | awk '$3 == "/" {print}'
/dev/X on / type btrfs (rw,relatime,space_cache,subvolid=257,subvol=/rootfs)
root@guest:/# update-grub
Generating grub configuration file...
Found linux image: /boot/vmlinuz-4.9.0-11-amd64
Found initrd image: /boot/initrd.img-4.9.0-11-amd64
done