Múltiples interfaces de protección de cables, cada una de las cuales utiliza la interfaz "real" directamente y, a través de cualquiera de ellas, puede llegar a cualquier IP.

Múltiples interfaces de protección de cables, cada una de las cuales utiliza la interfaz "real" directamente y, a través de cualquiera de ellas, puede llegar a cualquier IP.

Necesito configurar múltiples wg-quickinterfaces en una sola máquina, ambas usando la NIC de Ethernet real directamente, de forma independiente.
El problema que parece estar enfrentando es que a través de cada uno de estos quiero acceder a todo Internet, lo que supongo significa AllowedIPs = ::0, pero wg-quickme gusta agregar rutas localmente de modo que todo el tráfico que vaya a cualquier parte pase por esta nueva interfaz; incluyendo los siguientes wg-quickintentos...

¿Hay alguna manera de llamar wg-quicky decirle "oye, no, me gustaría que uses específicamente eno1, no la 'puerta de enlace predeterminada'"? ¿Quizás usando crudo wg?

He intentado leer un montón en línea pero sigo confundiéndome con lo que otros preguntan cuandopareceMe gusta una pregunta similar, pero resulta albergar múltiples servicios de protección de cables o algo así.

A continuación se muestra la esencia básica, con dos interfaces wg. wg0en este caso está haciendo lo normal wg-quickde robar todo el tráfico de forma transparente, donde wg1hay una interfaz disponible donde puedo configurar aplicaciones para hablar específicamente con él.
No me importa si su solución se ve wg0obligada a funcionar de esta manera, puedo configurar un proxy SOCKS y HTTP para software que no admite indicadores de "usar esta interfaz/IP para el tráfico" para obtener el mismo efecto.

                                                             
      Home                ║      ISP       ║       Internet  
                          ║                ║                 
                          ║                ║                 
  ┌─────────────┐         ║                ║                 
  │             │         ║                ║                 
  │             │         ║                ║        ┌───┐    
  │             │         ║                ║     ╔══╪        
  │         eno1│         ║                ║     ║  └───┘    
  │   wg0      ┐│         ╙────────────────╜     ║  VPN0     
  │     ┐      └─────────────┘                   ║           
  │     ╞════════════════════════════════════════╝           
  │     ┘   ╔════════════════════════════════════╗           
  │   wg1   ║  ┌─────────────┐                   ║           
  │     ╓   ║  ┘│  router                        ║  ┌───┐    
  │     ╠═══╝   │         ╓────────────────╖     ╚══╪        
  │     ╙       │         ║                ║        └───┘    
  │             │         ║                ║        VPN1     
  │             │         ║                ║                 
  └─────────────┘         ║                ║                 
        PC                                                   
                                                             

"¿Por qué?". Al usar openVPN, mi proveedor permitía puertos abiertos, básicamente si el firewall local lo permitía, podía enrutarme públicamente y podía alojar servicios en cualquier número de puertos que quisiera. Se pasaron a Wireguard, lo cual es fantástico, pero solo admiten un puerto abierto por conexión Wireguard. Entonces, básicamente, para cada aplicación a la que se le reenvió un puerto, quiero activar una interfaz VPN para ella.

¿Es esto posible usando solo Wireguard, sin iptables ni nada (lo cual no entiendo en absoluto)?

Respuesta1

SÍ. Bueno. Entonces, la solución a primera vista es realmente tan simple como sudo ip route add $VPN1 via eno1permitirle conectarse a VPN1 a través de eno1 independientemente de si existe wg0. Tiene pleno permiso para tener múltiples ::0interfaces wg en elmismo espacio de nombrescon uno de ellos como predeterminado (wg0) siempre que sus aplicaciones admitan la vinculación a una interfaz para conexiones (como netcat -s). La advertencia es que sólo uno de esos túneles puede generarse con wg-quick's' Table=auto.


SIN EMBARGO, lo que he pasado la última semana luchando es el propósito de querer hacer esto en primer lugar; ¡tener esas interfaces wg transmite tráfico entrante!

Probé varias cosas;

  • Ingenuamente simplemente ejecuta wg-quickvarias veces con las rutas en su lugar (esto mata todo e intenta wg-quick downromper la pila de red por completo)
  • como arriba, girando múltiples hacia arriba, uno con Table=auto, los otros conTable=off
  • como arriba, girando múltiples hacia arriba, uno con wg-quick, los otros conwg
  • girando múltiples coneno1escondido detrás de unnamespace(Ni siquiera pude hacer que esto funcionara para el tráfico saliente...)
  • girando múltiples concada uno wgen lo suyonamespace

Pero a pesar de que funcionan [para el tráfico saliente a través de sus respectivos túneles] (a menos que se indique lo contrario), todos rechazaron las conexiones entrantes (probando con netcat -l -p $assignedPort), independientemente de que ufw disableutilicen el mismo o diferentes servidores para "VPN{0,1}".


La solución aquí es algo que yofinalmente me encontré ayer. La salsa mágica wg-quickestaba haciendo con Table=auto; FwMark.

Lo que estaba tratando de evitar es aprender a hacerlo yo mismo: "¿Es esto posible usando solo Wireguard?". Bueno, necesitas que los paquetes estén marcados y asociados con una tabla, PERO no necesitas entender/imitar/reimplementar lo quewg-quick hace... aparentemente puedes simplementeusarél.

Entonces, después de configurar el túnel predeterminado para VPN0 usando, wg-quicktoma ese FwMark y después de configurar elip route VPN1reutilizar ese FwMarkpara wg. Esta última conexión ahora pasa por eno1 (según la ruta) pero permite que los paquetes entrantes se reenvíen desde VPN1 (gracias a la tabla configurada por el túnel de VPN0).

información relacionada