una trafico servidor redireccionar puerto otro otra dominio como networking dns minecraft

networking - servidor - redireccionar trafico de una ip a otra mikrotik



Cómo redirigir DNS a diferentes puertos (2)

Soy dueño del dominio "Arboristal.com". También soy propietario de todos los subdominios de forma privada en arboristal.com. Como lg.arboristal o ft.arboristal.com.

Bajo mi configuración de DNS, Arboristal.com está configurado para ir a nuestro proveedor de alojamiento web que actualmente aloja nuestro sitio web.

Tengo tres servidores ejecutándose en mi casa todos corriendo bajo una dirección IP pública. (71.82.237.27)

También tengo tres subdominios de Arboristal.com que apuntan a mi dirección de IP.

Cada uno de los tres servidores se ejecuta en sus propios puertos (25565, 25566, 25567)

Quiero que cada subdominio apunte a cada puerto abierto en mi dirección IP.

Lamentablemente, cuando intenta conectarse a uno de estos servidores utilizando uno de los subdominios, solo se conecta al servidor para el que escribe el puerto.

Mi situación:

Tres servidores, cada uno ejecutándose en un puerto diferente. (Todos portforwarded y trabajando como servidores)

Servidor Minecraft uno (25565)

Servidor Minecraft dos (25566)

Servidor Minecraft tres (25567)

Tengo tres subdominios ejecutándose en mi proveedor de DNS (webs.com)

mc.arboristal.com

tekkit.arboristal.com

pvp.artboristal.com

Cuando utilizas Minecraft para conectarte a uno de estos, lo haces automáticamente a través del puerto 25565, lo que significa que no importa a qué URL intentes conectarte siempre va a mi IP con el puerto 25565. Conectándote al servidor de Minecraft uno. PUEDE escribir el puerto manualmente, pero prefiero mantenerlo tan bueno y profesional como sea posible.

Entonces, ahora que conoce mi situación, ¿hay alguna manera posible de que mc.arboristal.com, tekkit.arboristal.com y pvp.arboristal.com puedan acceder a mi dirección IP en diferentes puertos sin tener que especificar cada puerto? en la URL proporcionada para conectarse en el extremo del usuario?

Puedo agregar MX, A (usando este para conectarme al servidor), CNAME y TXT a la configuración DNS

También puedo agregar Servidores de nombre a la configuración de DNS si necesito usar un tercero como mi proveedor de DNS. (Estoy dispuesto a hacer si es necesario)

También tengo acceso completo a mi enrutador en 192.168.0.1 si hay algo que deba configurarse allí.

Acabo de enterarme de cómo funciona realmente Internet en la última semana, por lo que no estoy seguro si algo aquí es realmente posible. También es posible que no tenga la información correcta sobre cómo funciona realmente Internet. Perdóneme por cualquier información falsa que pueda asumir sobre internet.


(Ha pasado un tiempo desde que hice esto. No asumas ciegamente que todos los detalles a continuación son correctos. Pero espero no estar demasiado vergonzosamente equivocado :))

Como se indicó en la respuesta anterior, el cliente de Minecraft (a partir de 1.3.1 ) admite la búsqueda de registros SRV utilizando el nombre de servicio _minecraft y el nombre de protocolo _tcp , lo que significa que si su archivo de zona se ve así ...

arboristal.com. 86400 IN A <your IP address> _minecraft._tcp.arboristal.com. 86400 IN SRV 10 20 25565 arboristal.com. _minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25566 arboristal.com. _minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25567 arboristal.com.

... entonces los clientes de Minecraft que realizan la búsqueda de registros SRV como se insinuó en el registro de cambios usarán los puertos 25566 y 25567 con preferencia (40% del tiempo cada uno) sobre el puerto 25565 (20% del tiempo). Podemos suponer que los clientes de Minecraft que no encuentren ni respeten estos registros SRV usarán el puerto 25565 como de costumbre.

Sin embargo, yo diría que en realidad sería más "limpio y profesional" hacerlo con un equilibrador de carga como Nginx . (Escojo Nginx solo porque lo he usado antes. No pretendo que sea especialmente adecuado para esta tarea. Incluso podría ser una mala elección por algún motivo). Entonces no tiene que meterse con su DNS, y puede usar el mismo enfoque para equilibrar la carga de cualquier servicio, no solo aquellos que, como Minecraft, han hecho el trabajo duro del lado del cliente para buscar y respetar los registros SRV. Para hacerlo de la manera Nginx, ejecutaría Nginx en la máquina arboristal.com con algo como lo siguiente en /etc/nginx/sites-enabled/arboristal.com :

upstream minecraft_servers { ip_hash; server 127.0.0.1:25566 weight=1; server 127.0.0.1:25567 weight=1; server 127.0.0.1:25568 weight=1; } server { listen 25565; proxy_pass minecraft_servers; }

Aquí estamos controlando el equilibrio de carga nosotros mismos en el lado del servidor (a través de Nginx), por lo que ya no es necesario preocuparse de que los clientes con mal comportamiento pueden preferir el puerto 25565 a los otros dos puertos. De hecho, ahora todos los clientes hablarán con arboristal.com:25565 . Pero el oyente en ese puerto ya no es un servidor de Minecraft; es Nginx, que transmite secretamente todo el tráfico a otros tres puertos en la misma máquina.

Equilibramos la carga en función de un hash de la dirección IP del cliente ( ip_hash ), de modo que si un cliente se desconecta y luego se vuelve a conectar más adelante, hay buenas posibilidades de que vuelva a conectarse al mismo servidor de Minecraft que tenía antes. (No sé cuánto le importa esto a Minecraft, o cómo los clientes habilitados para SRV están programados para tratar este aspecto).

Tenga en cuenta que solíamos ejecutar un servidor de Minecraft en el puerto 25565; Lo he movido al puerto 25568 para que podamos usar el puerto 25565 para el equilibrador de carga.

Una posible desventaja del método Nginx es que convierte a Nginx en un cuello de botella en su sistema. Si Nginx se cae, entonces los tres servidores se vuelven inalcanzables. Si alguna parte de su sistema no puede mantener el volumen del tráfico en ese único puerto, 25565, los tres servidores se vuelven inestables. Y sin mencionar, Nginx es una gran nueva dependencia en su ecosistema. Quizás no quieras presentar otra pieza masiva de software con un complicado lenguaje de configuración y una enorme superficie de ataque. Puedo respetar eso.

Una posible ventaja del método Nginx es ... que convierte a Nginx en un cuello de botella en su sistema. Puede aplicar políticas globales a través de Nginx, como rechazar paquetes de un cierto tamaño o responder con una página web estática a las conexiones HTTP en el puerto 80. También puede hacer cortafuegos desde 25566, 25567 y 25568 desde Internet, ya que ahora debería ser hablado solo por Nginx a través de la interfaz loopback. Esto reduce un poco la superficie de ataque.

Nginx también hace que sea más fácil agregar nuevos servidores de Minecraft a tu backend; ahora puedes simplemente agregar una línea de server a tu configuración y service nginx reload . Usando el viejo enfoque basado en el puerto, tendría que agregar un nuevo registro SRV con su proveedor de DNS (y podría tomar hasta 86400 segundos para que los clientes noten el cambio) y luego también recuerde editar su firewall (p /etc/iptables.rules Ej. /etc/iptables.rules ) para permitir el tráfico externo sobre ese nuevo puerto.

Nginx también te libera de tener que pensar en los TTL de DNS cuando realizas cambios de operaciones. Supongamos que decide dividir sus tres servidores de Minecraft en tres máquinas físicas diferentes con diferentes direcciones IP. Con Nginx, puede hacerlo completamente a través de cambios de configuración en sus líneas de server , y puede mantener esas nuevas máquinas dentro de su firewall (conectado solo a Nginx a través de una interfaz privada), y los cambios tendrán efecto inmediatamente, por definición. Mientras que, usando registros SRV, tendrás que reescribir tu archivo de zona a algo como esto ...

arboristal.com. 86400 IN CNAME mc1.arboristal.com. mc1.arboristal.com. 86400 IN A <a new machine''s IP address> mc2.arboristal.com. 86400 IN A <a new machine''s IP address> mc3.arboristal.com. 86400 IN A <a new machine''s IP address> _minecraft._tcp.arboristal.com. 86400 IN SRV 10 20 25565 mc1.arboristal.com. _minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25565 mc2.arboristal.com. _minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25565 mc3.arboristal.com.

... y tendrá que dejar las tres nuevas máquinas fuera del firewall para que puedan recibir conexiones de Internet. Y tendrá que esperar hasta 86400 segundos para que sus clientes noten el cambio, lo que podría afectar la complejidad de su plan de implementación. Y si estaba ejecutando otros servicios (como un servidor HTTP) en arboristal.com , ahora tiene que moverlos a la máquina mc1.arboristal.com debido a cómo hice ese CNAME. Lo hice solo para el beneficio de aquellos hipotéticos clientes de Minecraft que no respetan los registros de SRV y que aún intentarán conectarse a arboristal.com:25565 .

Por lo tanto, creo que ambas formas (registros de SRV y equilibrio de carga de Nginx) son razonables, y su elección dependerá de sus preferencias personales. Caricaturizo las opciones como:

  • SRV registra: "Solo necesito que funcione. No quiero complejidad. Y sé y confío en mi proveedor de DNS".
  • Nginx: "Preveo que arboristal.com tomará el control del mundo, o al menos se mudará a una máquina más grande algún día. No tengo miedo de aprender una nueva herramienta. ¿Qué es un archivo de zona?"

Puede usar registros SRV :

_service._proto.name. TTL class SRV priority weight port target.

Servicio: el nombre simbólico del servicio deseado.

Proto: el protocolo de transporte del servicio deseado; esto suele ser TCP o UDP.

Nombre: el nombre de dominio para el cual este registro es válido, terminando en un punto.

TTL: campo estándar de DNS de tiempo de vida.

Clase: campo de clase DNS estándar (esto siempre es IN).

Prioridad: la prioridad del host objetivo, valor más bajo significa más preferido.

Peso: un peso relativo para registros con la misma prioridad.

Puerto: el puerto TCP o UDP en el que se encuentra el servicio.

Objetivo: el nombre de host canónico de la máquina que proporciona el servicio, que termina en un punto.

Ejemplo:

_sip._tcp.example.com. 86400 IN SRV 0 5 5060 sipserver.example.com.

Entonces, lo que creo que estás buscando es agregar algo como esto a tu archivo de hosts DNS :

_sip._tcp.arboristal.com. 86400 IN SRV 10 40 25565 mc.arboristal.com. _sip._tcp.arboristal.com. 86400 IN SRV 10 30 25566 tekkit.arboristal.com. _sip._tcp.arboristal.com. 86400 IN SRV 10 30 25567 pvp.arboristal.com.

En una nota lateral, le recomiendo que vaya con una empresa de alojamiento en lugar de alojar los servidores usted mismo. Es solo pedir problemas con la conexión de su hogar (DDoS y ancho de banda / velocidad de conexión), pero depende de usted.