Цель: Комфортно работать из Linux с Windows 10. На разных местах работы различные инфраструктуры (системы безопасности, сетевое окружение и т.п.). Работодатель, обычно, предоставляет рабочий компьютер, но иногда требуется что-то проверить и нужна третья машина с Windows с какими-то особенными настройками. Здесь описано одно из решений.
Дано: Домашний сервер с Linux, подключенный к интернет, и рабочий ноутбук с Linux. Сервер и ноутбук связаны через wifi.
Схема решения:
С ноутбука с Linux через клиент уд.раб.стола Remmina подключаться к удаленному рабочему столу Windows10, запущенной в системе виртуальных машин Virtual Machine Manager(QUEMU/KVM) на сервере.
В настройках материнской платы разрешить 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
Можно подключиться с удаленного компьютера:
$ 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):
с Windows 10:
Основное окно программы клиента удаленного рабочего стола Remmina (ноутбук ip=192.168.1.57, linux):
В w10 используется встроенный сервис "Удаленных рабочих столов".
Итоговая схема:
Окно удаленного рабочего стола на клиентской машине с linux:
Маршруты на 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)
Было бы место)
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:
Еще раз: с ноутбука подключаюсь к виртуальной машине, запущенной на сервере(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/