{"id":1360,"date":"2026-05-15T10:57:59","date_gmt":"2026-05-15T10:57:59","guid":{"rendered":"https:\/\/jjmarquez.es\/?p=1360"},"modified":"2026-05-30T07:39:44","modified_gmt":"2026-05-30T07:39:44","slug":"pci-passthrough-en-vm","status":"publish","type":"post","link":"https:\/\/jjmarquez.es\/index.php\/2026\/05\/15\/pci-passthrough-en-vm\/","title":{"rendered":"PCI Passthrough Debian 12 y Proxmox"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"> PCI Passthrough en Proxmox (Debian 12): Gu\u00eda para Silver Juniors<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">En mi camino de reconversi\u00f3n IT, una de las paradas obligatorias ha sido optimizar mi <strong>Home Lab<\/strong>. No siempre queremos que nuestras m\u00e1quinas virtuales (VMs) funcionen sobre hardware emulado; a veces, necesitamos que tengan acceso directo al \u00abhierro\u00bb para exprimir cada ciclo de potencia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hoy os traigo la gu\u00eda t\u00e9cnica para configurar <strong>PCI Passthrough<\/strong> sobre <strong>Proxmox<\/strong> (basado en Debian 12), un proceso vital si quieres usar una GPU para IA, transcodificaci\u00f3n de v\u00eddeo o simplemente rendimiento nativo en red.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1. El Cimiento: Configuraci\u00f3n de la BIOS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de tocar una sola l\u00ednea de c\u00f3digo, el hardware debe estar preparado. Debes entrar en la BIOS\/UEFI de tu servidor y activar las tecnolog\u00edas de virtualizaci\u00f3n dirigida:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Intel:<\/strong> Activa <code>Intel VT-d<\/code>.<\/li>\n\n\n\n<li><strong>AMD:<\/strong> Activa <code>AMD-Vi<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sin esto, el sistema no podr\u00e1 aislar los dispositivos de forma segura.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. Preparando el Host (Debian 12)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El primer paso es decirle al Kernel de Linux que habilite el <strong>IOMMU<\/strong>. Para ello, editamos el cargador de arranque:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/default\/grub\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Busca la l\u00ednea <code>GRUB_CMDLINE_LINUX_DEFAULT<\/code> y a\u00f1ade los par\u00e1metros necesarios seg\u00fan tu procesador:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Para Intel:<\/strong> <code>intel_iommu=on iommu=pt<\/code><\/li>\n\n\n\n<li><strong>Para AMD:<\/strong> <code>amd_iommu=on iommu=pt<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Actualiza el GRUB y reinicia:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo update-grub\nsudo reboot\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3. Carga de los M\u00f3dulos VFIO<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para que el sistema gestione correctamente el hardware \u00abpuenteado\u00bb, necesitamos cargar cuatro m\u00f3dulos espec\u00edficos del kernel. Editamos el archivo de m\u00f3dulos:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/modules\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A\u00f1ade estas l\u00edneas al final:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>vfio<\/code><\/li>\n\n\n\n<li><code>vfio_iommu_type1<\/code><\/li>\n\n\n\n<li><code>vfio_pci<\/code><\/li>\n\n\n\n<li><code>vfio_virqfd<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4. El \u00abCartel de Reservado\u00bb: La Blacklist<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Este es el paso donde muchos fallan. Debemos prohibir que el sistema anfitri\u00f3n (Debian) intente usar el hardware que queremos pasar a la VM. Si el host carga el driver de la tarjeta, la VM no podr\u00e1 inicializarla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crea o edita el archivo de lista negra:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/modprobe.d\/pve-blacklist.conf\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A\u00f1ade los drivers que correspondan a tu hardware (ejemplos comunes):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Plaintext<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>blacklist nvidia\nblacklist nouveau\nblacklist radeon\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5. Verificaci\u00f3n Final: \u00bfQui\u00e9n tiene el mando?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tras reiniciar, es fundamental comprobar que el driver en uso para tu dispositivo es efectivamente <code>vfio-pci<\/code>. Ejecuta:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>lspci -nnk\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si en la l\u00ednea <strong>\u00abKernel driver in use\u00bb<\/strong> aparece <code>vfio-pci<\/code>, \u00a1enhorabuena! Tu hardware est\u00e1 aislado y listo para ser asignado en la interfaz de Proxmox.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusi\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Como siempre digo en <strong>Junior a los cuarenta y muchos<\/strong>, no importa la edad, sino las ganas de entender c\u00f3mo funciona la tecnolog\u00eda por dentro. Configurar el PCI Passthrough es un paso m\u00e1s hacia un laboratorio profesional y eficiente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfTe has quedado con alguna duda o te has atascado en alg\u00fan paso? \u00a1D\u00e9jamelo en los comentarios!<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Recursos adicionales:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ud83d\udcc1 <strong>C\u00f3digo y Configs:<\/strong> <a href=\"https:\/\/github.com\/jjmarquez-es\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub jjmarquez-es<\/a><\/li>\n\n\n\n<li>\ud83c\udfa5 <strong>Tutorial en v\u00eddeo:<\/strong> <a href=\"https:\/\/www.youtube.com\/@jjmarquez-es\" target=\"_blank\" rel=\"noreferrer noopener\">Canal de YouTube @jjmarquez-es<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>PCI Passthrough en Proxmox (Debian 12): Gu\u00eda para Silver Juniors En mi camino [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"saved_in_kubio":false,"footnotes":""},"categories":[15],"tags":[],"class_list":["post-1360","post","type-post","status-publish","format-standard","hentry","category-junior-a-los-cuarenta-y-muchos"],"_links":{"self":[{"href":"https:\/\/jjmarquez.es\/index.php\/wp-json\/wp\/v2\/posts\/1360","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jjmarquez.es\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jjmarquez.es\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jjmarquez.es\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jjmarquez.es\/index.php\/wp-json\/wp\/v2\/comments?post=1360"}],"version-history":[{"count":3,"href":"https:\/\/jjmarquez.es\/index.php\/wp-json\/wp\/v2\/posts\/1360\/revisions"}],"predecessor-version":[{"id":1400,"href":"https:\/\/jjmarquez.es\/index.php\/wp-json\/wp\/v2\/posts\/1360\/revisions\/1400"}],"wp:attachment":[{"href":"https:\/\/jjmarquez.es\/index.php\/wp-json\/wp\/v2\/media?parent=1360"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jjmarquez.es\/index.php\/wp-json\/wp\/v2\/categories?post=1360"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jjmarquez.es\/index.php\/wp-json\/wp\/v2\/tags?post=1360"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}