Вы здесь:

Цель: Комфортно работать из Linux с Windows 10. На разных местах работы различные инфраструктуры (системы безопасности, сетевое окружение и т.п.). Работодатель, обычно, предоставляет рабочий компьютер, но иногда требуется что-то проверить и нужна третья машина с Windows с какими-то особенными настройками. Здесь описано одно из решений.

Дано: Домашний сервер с Linux, подключенный к интернет, и рабочий ноутбук с Linux. Сервер и ноутбук связаны через wifi.

Схема решения:
С ноутбука с Linux через клиент уд.раб.стола Remmina подключаться к удаленному рабочему столу Windows10, запущенной в системе виртуальных машин Virtual Machine Manager(QUEMU/KVM) на сервере.

Virtual Machine Manager

В настройках материнской платы разрешить VMX: На пример так (https://hatchjs.com/ubuntu-vmx-disabled-by-bios/):

  • Boot your computer into the BIOS.
  • Find the “Virtualization” or “Virtual Machine” option.
  • Enable the option.
  • Save your changes and exit the BIOS.

Установить virt-manager (https://ubuntu.com/server/docs/virtual-machine-manager)

$ sudo apt install virt-manager

Установится несколько сервисов:

useradd warning: libvirt-qemu's uid 64055 is greater than SYS_UID_MAX 999
Not enabling default network as no free network was found
Created symlink /etc/systemd/system/multi-user.target.wants/libvirtd.service → /usr/lib/systemd/system/libvirtd.service.
Created symlink /etc/systemd/system/sockets.target.wants/virtlockd.socket → /usr/lib/systemd/system/virtlockd.socket.
Created symlink /etc/systemd/system/sockets.target.wants/virtlogd.socket → /usr/lib/systemd/system/virtlogd.socket.
Created symlink /etc/systemd/system/sockets.target.wants/libvirtd.socket → /usr/lib/systemd/system/libvirtd.socket.
Created symlink /etc/systemd/system/sockets.target.wants/libvirtd-ro.socket → /usr/lib/systemd/system/libvirtd-ro.socket.
Created symlink /etc/systemd/system/sockets.target.wants/libvirtd-admin.socket → /usr/lib/systemd/system/libvirtd-admin.socket.
Created symlink /etc/systemd/system/sockets.target.wants/virtlockd-admin.socket → /usr/lib/systemd/system/virtlockd-admin.socket.
Created symlink /etc/systemd/system/sockets.target.wants/virtlogd-admin.socket → /usr/lib/systemd/system/virtlogd-admin.socket.
Created symlink /etc/systemd/system/multi-user.target.wants/libvirt-guests.service → /usr/lib/systemd/system/libvirt-guests.service.
Created symlink /etc/systemd/system/multi-user.target.wants/virtlockd.service → /usr/lib/systemd/system/virtlockd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/virtlogd.service → /usr/lib/systemd/system/virtlogd.service.)

Запустить virt-manager.

$ sudo systemctl start libvirtd

Проверить статус:

$ sudo systemctl status libvirtd
libvirtd.service - libvirt legacy monolithic daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; preset: enabled)
Active: inactive (dead) since Wed 2024-10-02 10:32:33 +05; 13min ago
Duration: 2min 208ms
TriggeredBy: ● libvirtd-admin.socket
● libvirtd-ro.socket
● libvirtd.socket
Docs: man:libvirtd(8)
https://libvirt.org/
Process: 1143 ExecStart=/usr/sbin/libvirtd $LIBVIRTD_ARGS (code=exited, status=0/SUCCESS)
Main PID: 1143 (code=exited, status=0/SUCCESS)
CPU: 316ms

systemd[1]: Starting libvirtd.service - libvirt legacy monolithic daemon...
systemd[1]: Started libvirtd.service - libvirt legacy monolithic daemon.
systemd[1]: libvirtd.service: Deactivated successfully.

Установить пакет ssh-askpass:

$ sudo apt install ssh-askpass
$ sudo systemctl restart libvirtd.service

Проверить статус:

$ sudo systemctl status libvirtd.service
$ ssh-keygen -t rsa -C deploys -f ~/.ssh/deploys.pem
pass
Your identification has been saved in /home/vasi/.ssh/deploys.pem
Your public key has been saved in /home/vasi/.ssh/deploys.pem.pub
The key fingerprint is:
SHA256:dKY6OSaT9TJDGzFkDZk3RxgQiWEAMuaEtXRVyISE6xk deploys
The key's randomart image is:
+---[RSA 3072]----+
|==++=BO@o+.  |
|*o.+oo* = .  |
| ...  o..oo  |
|  E+ +   |
| . o  + S|
|  o  + * |
|+ @ .|
| + * |
| |
+----[SHA256]-----+

vim /etc/libvirt/qemu.conf
security_driver = "none"
sudo systemctl restart libvirtd

Main window Virtual Machine Manager

Можно подключиться с удаленного компьютера:

$ virt-manager -c qemu+ssh://192.168.1.20/system

192.168.1.20 - host c virt-manager
Ввести пароль пользователя уд.машины (vasi/B..7) Создать виртуальную машину Основное окно программы Virtual Machine Manager (сервер ip=192.168.1.20, linux):

Main window Virtual Machine Manager

с Windows 10:

Main window Virtual Machine Manager

Основное окно программы клиента удаленного рабочего стола Remmina (ноутбук ip=192.168.1.57, linux):

Main window Remmina

В w10 используется встроенный сервис "Удаленных рабочих столов".

Итоговая схема:

Result KVM

Окно удаленного рабочего стола на клиентской машине с linux:

Result KVM

Маршруты на Server(Linux):

$ route -n
Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 0.0.0.0 0.0.0.0 U 0  00 ppp0
10.10.1.0   0.0.0.0 255.255.255.0   U 0  00 kuberbr42
192.168.1.0 0.0.0.0 255.255.255.0   U 0  00 enp4s0

Firewall
Используется пакет ufw. В компьютере 3 сетевых интерфейса:

  • enp3s0 - аппаратный интерфейс, используется для выхода интернет. Через этот интерфейс поднимается ppp0. IP адрес не назначен.
  • enp4s0 - аппаратный интерфейс, 192.168.1.20 интерфейс внутренней сети.
  • kuberbr42 - 10.10.1.1 виртуальный интерфейс для сети виртуальной машины.
  • ppp0 - интернет интерфейс.

Другие адреса:

  • 10.10.1.10 - адрес windows машины
  • 192.168.1.57 - адрес рабочего ноутбука, с него работаю.
  • 8.8.8.8 - DNS сервер.
$ ifconfig
enp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
ether 30:85:a9:96:31:b7  txqueuelen 1000  (Ethernet)

enp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.1.20  netmask 255.255.255.0  broadcast 192.168.1.255
ether 00:11:95:5b:fe:7d  txqueuelen 1000  (Ethernet)

ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1492
inet 46.146.232.50  netmask 255.255.255.255  destination 10.95.254.254
ppp  txqueuelen 3  (Протокол PPP (Point-to-Point Protocol))

kuberbr42: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 10.10.1.1  netmask 255.255.255.0  broadcast 10.10.1.255

Итоговая настройка:

$ route -n
Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags   Metr Ref Use  Iface
0.0.0.0 0.0.0.0 0.0.0.0 U 0  00 ppp0
10.10.1.0   0.0.0.0 255.255.255.0   U 0  00 kuberbr42
172.17.0.0  0.0.0.0 255.255.0.0 U 0  00 docker0
192.168.1.0 0.0.0.0 255.255.255.0   U 0  00 enp4s0
...
$ sudo ufw status numbered
Состояние: активен
 В  ДействиеИз
 -  ----------
[ 1] 443 on enp4s0  ALLOW INAnywhere
[ 2] 53 on enp4s0   ALLOW INAnywhere
[ 3] Anywhere   ALLOW IN10.10.1.10
[ 4] 5432/tcp   ALLOW IN10.10.1.10
[ 5] 53/tcp ALLOW IN10.10.1.10
[ 6] 53/udp ALLOW IN192.168.1.57
[ 7] 443/udpALLOW IN192.168.1.57
[ 8] 8.8.8.8 443/udpALLOW IN192.168.1.57
[ 9] 8.8.8.8 443/udpALLOW IN192.168.1.0/24
[10] 8.8.8.8 53/udp ALLOW IN192.168.1.0/24
[11] 8.8.8.8 53/tcp ALLOW IN192.168.1.0/24
[12] 3389 on enp4s0 ALLOW INAnywhere
[13] 4000 on enp4s0 ALLOW INAnywhere
[14] 22 on kuberbr42ALLOW INAnywhere
[15] 8888 on enp4s0 ALLOW INAnywhere
[16] 8082 on enp4s0 ALLOW INAnywhere
[17] 5432 on ppp0   DENY IN Anywhere
[18] 5432 on enp4s0 ALLOW INAnywhere
[19] 80 on ppp0 ALLOW INAnywhere
[20] 80 on enp4s0   ALLOW INAnywhere
[21] 22 on ppp0 DENY IN Anywhere
[22] 22 on enp4s0   ALLOW INAnywhere
[23] 21 on ppp0 DENY IN Anywhere
[24] 21 on enp4s0   ALLOW INAnywhere
[25] 3389 on ppp0   DENY IN Anywhere
[26] 1521 on ppp0   DENY IN Anywhere
[27] 8888 on ppp0   DENY IN Anywhere
[28] 8888 on enp3s0 DENY IN Anywhere
[29] Anywhere   ALLOW IN10.10.1.15
[30] Anywhere   ALLOW IN192.168.1.57
[31] 8.8.8.8 80/tcp ALLOW IN192.168.1.0/24
[32] 8.8.8.8 443/tcpALLOW IN192.168.1.0/24
[35] 443ALLOW INAnywhere

Используемые порты:

  • 21 - ftp
  • 22 - ssh
  • 53 - DNS
  • 80 - web сервер
  • 5432 - PostgreSQL
  • 3389 - Удаленный рабочий стол Windows
  • 4000 - Удаленный рабочий Nomachine сервиса
  • 8082, 8888 - для демо проектов

В Windows:

$ ipconfig
Настройка протокола IP для Windows
Адаптер Ethernet Ethernet:
DNS-суффикс подключения . . . . . :
Локальный IPv6-адрес канала . . . : fe80::cf41:2634:a793:aae1%5
IPv4-адрес. . . . . . . . . . . . : 10.10.1.10
Маска подсети . . . . . . . . . . : 255.255.255.0
Основной шлюз. . . . . . . . . : 10.10.1.1

Пример управления правилами:

$ ufw insert 1 deny in on ppp0 to any port 22 // запретить ssh из Интернета
$ ufw insert 2 allow in on enp4s0 to any port 22 // разрешить ssh из внутренней сети

Примечания:
1. В версии Windows Home удаленного рабочего стола НЕТ(!), только удаленный помощник. В Стандартной версии есть.
2. Памяти нужно много! В Server(Linux) установлено 12Gb. Для w10 отдал 4Gb. Удивительно, но win10 живет с 4Gb. Приходится некоторые особо жадные сервисы(jenkins, nexus) в хостовой машине (ServerLinux) выгружать.
3. Бонус! Образ виртуальной машины можно клонировать средствами Virtual Machine Manager(QUEMU/KVM)

Result KVM

Было бы место)
4. Win10 запускается долго. Минут 10 надо подождать после перезагрузки, после этого удаленный раб.стол откроется.
5. Кривые шрифты в удаленном рабочем столе. Одно из решений: "Попробуй включить ClaerType run - cttune, поставь галку Turn on ClearType." Совет отсюда: https://qna.habr.com/q/922231?ysclid=lpwct5erac497186423. Вроде помогло немного.


В итоге.
Подключение с удаленной машины(note) к сервису QUEMU/KVM, запущенному на сервере 192.168.1.20:

vasi@note:~$ virt-manager -c 'qemu+ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.:22/system?keyfile=id_rsa'

Появится окно менеджера виртуальных машин на сервере 192.168.1.20:

Result KVM

Еще раз: с ноутбука подключаюсь к виртуальной машине, запущенной на сервере(192.168.1.20). При этом на сервере экран виртуальной машины будет выключен и перенаправлен на ноутбук.


23.10
Если проблемы с запуском сервиса libvirtd, то запустил вручную из консоли:

vasi@v:~$ sudo libvirtd

Дальше из Virtual machine Manager на сервере запустил образ w10. Подключаться не сразу подождать когда лампа активности hdd погаснет (2-3 мин). НЕ подключился с ноутбука из клиента уд.раб.стола Remmina.
Из терминала ноута:

note$ virt-manager -c 'qemu+ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.:22/system?keyfile=id_rsa'

пароль B..7
Открылось окно менеджера вирт. машин. Дальше можно управлять виртуальыми машинами на сервере (старт W10). Remmina НЕ используется, только Virtual Machine Manager. Через его окно работать с виртуальной машиной. При этом и сервис удаленных рабочих столов Windows тоже не нужен, можно обойтись Windows Домашняя. Для работы с необходимымми windows сервисами (вспомни аппаратный ключ безопасности с драйверами ТОЛЬКО для windows). Оперативной памяти использовано 4.2 Gb. Графика - говно (полосы во время обновления экрана).


TODO:

  • Не описаны настройки общих папок windows(samba) на Server(linux)
  • Установка windows из терминала https://std.rocks/virtualization_kvm.html
    $ qemu-system-x86_64  -vga cirrus -m 2048 -enable-kvm -cdrom win10.iso
    -boot order=d -drive file=/home/vasi/vdisk/win10_hdd0,index=0,media=disk,if=virtio,format=raw
    -drive file=/home/vasi/po/iso/win10.iso,media=cdrom,index=3

Ссылки:

https://fabianlee.org/2019/02/16/kvm-virt-manager-to-connect-to-a-remote-console-using-qemussh/

https://ubuntu.com/server/docs/virtual-machine-manager/