Necesito configurar múltiples wg-quick
interfaces 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-quick
me 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-quick
intentos...
¿Hay alguna manera de llamar wg-quick
y 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. wg0
en este caso está haciendo lo normal wg-quick
de robar todo el tráfico de forma transparente, donde wg1
hay una interfaz disponible donde puedo configurar aplicaciones para hablar específicamente con él.
No me importa si su solución se ve wg0
obligada 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 eno1
permitirle conectarse a VPN1 a través de eno1 independientemente de si existe wg0. Tiene pleno permiso para tener múltiples ::0
interfaces 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-quick
varias veces con las rutas en su lugar (esto mata todo e intentawg-quick down
romper 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 con
eno1
escondido detrás de unnamespace
(Ni siquiera pude hacer que esto funcionara para el tráfico saliente...) - girando múltiples concada uno
wg
en 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 disable
utilicen 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-quick
estaba 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-quick
toma 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).