Aller au contenu
Top-Metin2.org - Vous êtes à la recherche d'un serveur Metin 2 ? ×
×
×
  • Créer...
  • 0

Déconnexion sélection personnages


BusyIzi

Question

Bonjour,

 

J'ai un peu traîné dans la création de mon serveur dédié donc j'ouvre un nouveau sujet, l'ancien ayant été fermé. Après avoir bieeeeen galéré pour installer le serveur Metin2 sur le dédié, j'ai enfin réussi à me connecter au serveur à partir de mon client. Simplement maintenant je me fait déco à la sélection des personnages. J'ai bien sûr lu les 5 pages de résultats de la recherche avec le mot clé "Déconnexion", tous les sujets abordent des solutions différentes, on parle aussi de laucher by danger et dans un autre sujet j'ai lu qu'il n'était plus compatible avec les files 2012. Enfin bref aucune info tangible. 

 

J'ai suivi ce tuto (https://fr.metin2.dev/topic/18028-thread/) pour configurer les attributs BIND_IP des fichiers Config et modifié mon config.cpp 

Aucune erreur lors du lancement du serveur, aucune trace dans les syserr (tous vierges), rien de croustillant dans les sysinfo, rien dans les logs du client.... Frustrant !

 

Version des files : 2014

Domaine (Base de données, Core, etc.) :Client

Votre niveau (débutant, intermédiaire, avancé) :intermédiaire

 

Description du problème : Déconnexion sélection des personnages

Comment reproduire le problème : A chaque fois que l'on tente de sélectionner un personnage

Recherches et tests effectué : Lecture de tous les sujets à ce propos, j'ai refais le tuto de Calypso 3 fois pour être sur de ne pas m'être planté quelque part

Résultat des recherches et tests : Que nenni !

 

 

C'est très frustrant de n'avoir aucune log, il n'y a pas de mode verbose pour faire parler un peu le serveur ?

Merci de m'avoir lu !

Lien vers le commentaire
Partager sur d’autres sites

6 réponses à cette question

Messages recommandés

  • 0
  • Retraité

Déjà le launcher by danger + mon tutoriel ne te concerne pas dans le sens où c'est une solution proposée que pour les membres qui possèdent un serveur Hamachi ou No-IP.

 

Tu utilises un le client et les files de la team FE ?

Ton metin2.exe est un lanceur compilé ?

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Non c'est un game mainline compilé sur mon serveur avec quelques ajouts des tutos de ce forum, idem pour les files 2014.

Le client est un compilé oui je n'ai pas les sources de celui-ci en revanche.

 

 

Mais je pense savoir d'où vient tout ce bazar en fait... Mon serveur (hardware) est dans le cloud, chez Amazon. Amazon utilise un VPC (Virtual Private Cloud), un réseau privé virtuel avec ses propres IP privées. Je dois mettre l'IP privée dans le BIND_IP pour que cela marche. Côté client dans le sysinfoserver j'ai l'IP publique. C'est pour cela que la connexion au compte fonctionne.

 

Sauf que après c'est le client qui récupère l'IP privée configurée dans le BIND_IP (pour se connecter aux sockets ouvertes par le game côté serveur) lors de la phase du choix des personnages (j'ai bon ?) et forcément c'est une IP privée donc impossible d'y accéder depuis le client, alors la connexion est fermée et retour à la page du choix de serveur. 

 

 

Du coup je regarde pour modifier le config.cpp pour prendre en compte ces deux IP différentes plutôt qu'une seule IP publique.

 

Je vous tiens au courant  :angel:

Lien vers le commentaire
Partager sur d’autres sites

  • 0

EUREKA !

 

C'était bien cela... Foutu maxi firewall d'Amazon. 

 

Bon ça m'étonnerait que ça arrive à quelqu'un d'autre mais on se sait jamais alors voici ma solution :

 

Le problème c'est que l'instance d'Amazon ne sait pas créer de socket tcp sur l'ip publique car elle n'y a pas accès directement. En effet quand on tape ifconfig on voit que les interfaces réseau configurées possèdent toutes des IP privées. Impossible d'y accéder de l'extérieur, c'est une sécurité. Sauf que si on met une IP privée dans le BIND_IP des Config des cores, le client ne pourra jamais s'y connecter (déco à la sélection des personnages).

 

Pour contourner cela, il faut que le serveur Metin2 créé des sockets sur l'IP privée mais transmette l'IP publique au client. Amazon se charge de la correspondance IP privée/publique, donc une socket ouverte sur une IP privée sera transmise sur l'IP publique et vice-versa.

 

Pour se faire il faut modifier les fichiers config.cpp et main.cpp des sources

 

Dans le fichier de config.cpp, on va récupérer les valeurs des IP publique/privée 

TOKEN("bind_private_ip")
	{
		strlcpy(g_szInternalIP, value_string, sizeof(g_szInternalIP));
		fprintf(stderr, "Reading private IP : %s\n", value_string);
		strlcpy(g_szIPInterne, value_string, sizeof(g_szIPInterne));
	}

TOKEN("bind_public_ip")
	{
		strlcpy(g_szPublicIP, value_string, sizeof(g_szPublicIP));
		fprintf(stderr, "Reading public IP : %s\n", value_string);
		strlcpy(g_szIPExterne, value_string, sizeof(g_szIPExterne));
	}

 

Il faut bien sur configurer vos IP publiques/privées dans les fichier CONFIG des cores de chaque channel 

BIND_PRIVATE_IP: XXX.XXX.XXX.XXX
BIND_PUBLIC_IP: XXX.XXX.XXX.XXX

 

Ici pour arrivez à récupérer les données des fichiers CONFIG. Le main.cpp va pouvoir y avoir accès quand il appelera le config_init. 

 

Dans le main.cpp il faut créer les socket tcp sur les IP privées (si elles existent)

 

Cherchez la ligne

if ((tcp_socket = socket_tcp_bind(g_szPublicIP, mother_port)) == INVALID_SOCKET)

 

Et remplacez l'intégralité de la condition comme suit 

if ((tcp_socket = socket_tcp_bind(*g_szInternalIP ? g_szInternalIP : g_szPublicIP, mother_port)) == INVALID_SOCKET)
{
	fprintf(stderr, "Invalid IP %s", *g_szInternalIP ? g_szInternalIP : g_szPublicIP, mother_port);
	perror("socket_tcp_bind: tcp_socket");
	return 0;
}

 

Même chose avec la ligne 

if ((p2p_socket = socket_tcp_bind(g_szPublicIP, p2p_port)) == INVALID_SOCKET)

 

Remplacez comme suit 

if ((p2p_socket = socket_tcp_bind(*g_szInternalIP ? g_szInternalIP : g_szPublicIP, p2p_port)) == INVALID_SOCKET)
{
	perror("socket_tcp_bind: p2p_socket");
	return 0;
}

 

Compilez, remplacez le game et on est bon !

  • Love 3
Lien vers le commentaire
Partager sur d’autres sites

Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.


  • brilliantdiscord_widget
  • Flux d'Activité

    1. 6

      problème de connexion à mon serveur local (je suis débutant dans ce genre d'entreprise )

    2. 2

      problème de lancement serveur

    3. 9
    4. 0

      [PVM/PVP] ATLAX2 - EASY PLAY

    5. 2

      problème de lancement serveur

Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.