Ir para conteúdo
Propaganda

Posts Recomendados

  • Suporte

Solução

Kondrah Alpha Multi Proxy Este guia foi escrito por 

This is the hidden content, please
, com agradecimentos e crédito a 
This is the hidden content, please
 - atribuição total no final.
Nível de dificuldade: Difícil – Este guia pressupõe conhecimento de Linux, firewalls, C++ e Lua.
Tempo de leitura: Aprox. 10 minutos

Devido ao aumento da frequência de ataques DDoS com resgate contra nossa comunidade nos últimos meses, decidi escrever este guia na esperança de que ele ajude você a proteger seu jogo e fornecer a melhor experiência aos seus jogadores.

O que é isto?
Este guia explica como implementar o sistema proxy escrito pelo 
This is the hidden content, please
 para OTClientv8. (Observação: o recurso do lado do cliente também foi portado e lançado para OTClient Redemption por 
This is the hidden content, please
). Este guia pode ser usado para resgate OTCv8 e OTC.
O guia faz referência a um repositório externo que contém o aplicativo proxy de back-end criado pelo 
This is the hidden content, please
, com importantes correções de bugs do Alpha que abordam alguns problemas importantes que estavam presentes no software original.
Se você atualmente executa a versão e configuração desta solução instalada por 
This is the hidden content, please
, desde que entenda o que ele fez, este guia pode ser usado para simplificar sua infraestrutura.
De agora em diante, estarei me referindo a este sistema como Alpha Proxy.

O que isso faz?
O uso desse sistema proxy permite que o cliente do jogo estabeleça e mantenha conexões com vários servidores proxy de encaminhamento simultaneamente e envie e receba pacotes de jogos nos dois melhores. Com a configuração completa descrita neste guia, o servidor de jogo de back-end permanece desconhecido do público e, portanto, não pode ser atacado diretamente. Além disso, os jogadores se beneficiam da redundância de rotas ao serem conectados a vários servidores proxy de encaminhamento, reduzindo o risco de atrasos e desconexões. Em muitos casos, os jogadores também se beneficiarão do roteamento otimizado para latência para o servidor do jogo, graças ao uso de locais e provedores estratégicos de proxy avançado.

Pré-requisitos

  • Um servidor de jogos rodando no Linux (Este guia assumirá TFS1.4 e Ubuntu 24.04)
  • Um mínimo de dois outros servidores Linux para atuar como proxies de encaminhamento (tecnicamente, você poderia usar o Windows para isso, mas ... não)
  • Um IP desconhecido/secreto para o seu back-end (a máquina do servidor do jogo)
  • Seu servidor web deve ser proxy (por exemplo, pela cloudflare) e/ou em uma máquina separada (para que seu IP de back-end permaneça oculto o tempo todo)
  • Portas necessárias abertas nos firewalls de todos os servidores. Você pode usar o que quiser, mas para este guia usaremos o seguinte:
    • Servidor de jogo de back-end (IP secreto):
      • 7100 TCP (ouvinte HAProxy para login)
      • 7200 TCP (ouvinte HAProxy para status)
      • 7300 TCP (ouvinte de proxy alfa)
      • Para uma camada extra (provavelmente desnecessária) de segurança, restrinja as portas acima para permitir apenas cada um dos endereços IP do proxy de encaminhamento
    • Servidores proxy de encaminhamento:
      • 7100 TCP (ouvinte HAProxy para login)
      • 7200 TCP (ouvinte HAProxy para status)
      • 7300 TCP (ouvinte HAProxy para jogo)

Nota: Se o seu servidor já estiver ativo e/ou seu IP já for público, você tem duas opções:

  1. Prepare-se para migrar para um novo servidor com um novo IP (fácil, sem necessidade de novos conhecimentos), ou;
  2. Compre um endereço IP secundário para o seu servidor, se disponível (também é fácil, mas exigirá algum conhecimento novo para configurar sua máquina para usar os dois endereços IP. Seu provedor pode fornecer um guia ou usar o chatGPT para obter instruções).
    Se você seguir esse caminho, configurará o sistema proxy apenas para o novo endereço IP e, uma vez pronto, para habilitá-lo, desativará (negará todos os ipv4 ativados) o firewall de borda de rede de endereço IP original.

Quantos, com quem, quanto e onde
Para que valha a pena implementar essa configuração, você precisa de pelo menos 2 servidores proxy de encaminhamento, no entanto, a recomendação típica é de pelo menos 5.
Embora tecnicamente a configuração possa ser executada com apenas 1, se você puder pagar apenas 1, existe um método muito mais fácil do que este, confira este tópico: 

This is the hidden content, please


de IP do cliente Para manter as coisas simples, recomendo que você fique com grandes provedores de hospedagem que oferecem hospedagem VPS muito acessível, como OVH e Hetzner.
Para aqueles um pouco mais avançados, você também pode considerar AWS, GCP, etc.
Se você quiser levar as coisas ainda mais longe, sinta-se à vontade para me enviar uma mensagem.

Você não precisa gastar muito nesses servidores proxy avançados. Eles não usarão muita energia ou largura de banda, então normalmente você deseja obter o VPS mais barato que a empresa oferece. Isso pode parecer algo como 1vCore + 1 GB de RAM por US$ 5/m.

Para aproveitar ao máximo essa configuração, você deve distribuir geograficamente seus servidores proxy avançados com referência à sua base de jogadores. Mais importante, porém, você vai querer pelo menos 1 servidor proxy de encaminhamento o mais próximo possível do seu servidor de jogo de back-end.
Minhas recomendações rápidas para locais de proxy de encaminhamento seriam:

  • Vint Hill, EUA (OVH) e/ou Beauharnois, CA (OVH)
  • Londres, Reino Unido (OVH)
  • Varsóvia, PL (OVH)
  • Falkenstein, DE (Hetzner) e/ou Nuremberg, DE (Hetzner)
  • Miami, EUA (Gcore)

Vamos começar!
1. Alterações
de origem do TFS Existem muitas alterações de origem para direcionar cada edição individual nesta postagem, então, em vez disso, criei um arquivo de patch para o TFS1.4 (anexado).
As alterações não são particularmente complicadas, se você usar uma versão diferente do TFS (ou OTX, TVP, etc.), ainda poderá acompanhar e fazer essas alterações manualmente.

Com as alterações de origem compiladas com sucesso, você pode atualizar seu config.lua da seguinte maneira:

LUA:
ip = "127.0.0.1" -- important, do not change
statusIP = "123.456.78.9" -- set this to your closest forward proxy server IP
bindOnlyGlobalAddress = true -- important, do not change
loginProtocolPort = 7171
gameProtocolPort = 7172
statusProtocolPort = 7171

 


2. Configuração do
cliente Supondo que você ainda não tenha massacrado seu módulo para forçar diferentes IPs e portas, não há muito que você precise fazer para preparar o cliente.
Os jogadores se conectarão ao servidor de login normalmente e o servidor de login passará todas as informações necessárias para o cliente.
É possível 'codificar' os IPs do proxy de encaminhamento no cliente, e é isso que muitos optam por fazer porque é 'mais fácil', no entanto, essa não era a configuração pretendida e não é tão flexível quanto enviar a lista de proxy durante o login (que é o que faremos, supondo que você tenha seguido as alterações do TFS na seção 1).

3. Configuração
de proxy de encaminhamento Como o nome sugere, essa configuração é para cada um de seus servidores proxy de encaminhamento.
$
$
$
$
$ $ Importante
: substitua pelo seu IP de back-end real!

Dica: Pressionar -> enquanto estiver no vim o levará ao topo do arquivo e, em seguida, excluirá tudo no arquivo, permitindo que você cole imediatamente (normalmente no modo 'i'nput). Se a pasta estiver recuando automaticamente, pressione -> -> e tente novamente.client_entergamesudo apt updatesudo apt-get updatesudo apt upgradesudo apt install haproxysudo vim /etc/haproxy/haproxy.cfgBACKENDIPggwgright-clickesc:set: paste

Código:
global
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

defaults
        timeout connect 4s
        timeout client  50s
        timeout server  50s

# login connections
listen l1
        bind 0.0.0.0:7100
        mode tcp
        server srv1 BACKENDIP:7100 send-proxy-v2
# game connections
listen l2
        bind 0.0.0.0:7200
        mode tcp
        server srv2 BACKENDIP:7200 send-proxy-v2
# status connections
listen l3
        bind 0.0.0.0:7300
        mode tcp
        server srv3 BACK
ENDIP:7300 send-proxy-v2

$ sudo systemctl restart haproxy

4. Configuração
de proxy reverso Você também configurará uma instância do HAProxy em seu servidor de back-end para ouvir e lidar com conexões de servidor de login + status.
$ sudo apt install haproxy
$ sudo vim /etc/haproxy/haproxy.cfg

Código:
global
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

defaults
        timeout connect 4s
        timeout client  50s
        timeout server  50s

# login connections
listen l1
        bind 0.0.0.0:7100 accept-proxy
        mode tcp
        server srv1 127.0.0.1:7171 send-proxy-v2
# status connections
listen l2
        bind 0.0.0.0:7300 accept-proxy
        mode tcp
        server srv1 127.0.0.1:7171 send-proxy-v2

 

$ sudo systemctl restart haproxy

5. Alpha Proxy
Este é o aplicativo que irá ouvir e lidar com cada uma das conexões de jogo proxy proxy por seus servidores proxy avançados, é onde a maior parte da mágica acontece.

Compile o aplicativo proxy:
$
$
$
$ Crie

um arquivo de serviço para garantir que o Alpha Proxy esteja sempre em execução.
Certifique-se de atualizar o seguinte:git clone [email protected]:thatmichaelguy/alpha-proxy.gitmkdir build && cd buildcmake ..makesystemd

  • ExecStart caminho para corresponder ao do seu binário Alpha Proxy compilado
  • WorkingDirectory caminho para corresponder ao diretório binário do Alpha Proxy
  • User & Group campos, se necessário
  • O primeiro parâmetro do binário é a porta de escutaExecStart
  • O segundo parâmetro do binário é o máximo de conexões por IP (4 proxies = 4 conexões por IP por cliente aberto)ExecStart


$ sudo vim /usr/lib/systemd/system/alpha-proxy.service

 
Código:
[Unit]
Description=Alpha Proxy
After=network.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/path/to/the/proxy/build/alpha-proxy 7200 20
WorkingDirectory=/path/to/the/proxy/build/
Restart=always
User=ubuntu
Group=ubuntu
LimitCORE=104857600
LimitNOFILE=50000

[Install]
WantedBy=default.target
 

$ sudo systemctl daemon-reload
$ sudo systemctl start alpha-proxy
$ sudo systemctl enable alpha-proxy

6. Banco de dados
A etapa final é criar uma tabela em seu banco de dados para seus servidores proxy - é aqui que o servidor de login lerá. Ajuste a consulta abaixo para corresponder aos endereços IP de seus servidores proxy de encaminhamento.
- A coluna pode ser utilizada para desativar temporariamente um proxy, se desejado.
- A coluna pode ser usada para ajustar como o cliente escolherá servidores proxy, você pode querer usá-la se houver limitações de largura de banda em alguns de seus servidores proxy de encaminhamentoINSERTdisabledpriority

 
SQL:
CREATE TABLE `proxies` (
  `id` int(11) NOT NULL,
  `host` tinytext NOT NULL,
  `port` smallint(5) UNSIGNED NOT NULL DEFAULT 0,
  `priority` smallint(5) UNSIGNED NOT NULL DEFAULT 0,
  `disabled` tinyint(3) UNSIGNED NOT NULL DEFAULT 0
);

ALTER TABLE `proxies`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT
  ADD PRIMARY KEY (`id`) USING BTREE,
  ADD KEY `disabled` (`disabled`) USING BTREE;
 
INSERT INTO `proxies` (`id`, `host`, `port`, `priority`, `disabled`) VALUES
(1, '123.456.78.9', 7200, 0, 0),
(2, '123.456.78.8', 7200, 0, 0),
(3, '123.456.78.7', 7200, 0, 0),
(4, '123.456.78.6', 7200, 0, 0),
(5, '123.456.78.5', 7200, 0, 0);
 


Conformidade com
o Otservlist O Otservlist tem exigido que servidores populares forneçam informações adicionais para ajudar a manter a integridade das contagens de jogadores exibidas na lista de servidores. Isso não é realmente uma preocupação com a privacidade, pois nenhum dado pessoal está associado ao . Este não é o tópico para discutir como você se sente sobre isso de qualquer maneira, é apenas onde você aprende a cumpri-lo.

O Otservlist solicita uma saída do comando para ajudar a verificar se a quantidade de jogadores que você relata como online é congruente com a quantidade de conexões ativas e se você está respeitando o limite de 4 jogadores relatados como online por endereço IP.
Ao usar vários servidores proxy nessa configuração, você precisa fornecer a saída solicitada de cada servidor proxy, bem como do servidor de jogo de back-end.

Eu escrevi um script simples que você pode executar em um intervalo com cron para buscar cada saída do comando e despejá-la em um diretório especificado em seu servidor web. O script também edita seu IP de back-end do .
Opcionalmente, você pode restringir o acesso a este diretório por IP ou por senha para que apenas otservlist possa acessá-lo - o chatGPT provavelmente pode ajudá-lo a conseguir isso.lsoflsoflsoflsoflsof

  1. Para gerar a saída lsof.log em um intervalo em seus servidores proxy de encaminhamento, configure um cronjob como o seguinte:
    * * * * * sudo lsof -nP -i :7300 > /tmp/lsof.log && md5sum /tmp/lsof.log > /tmp/lsof.md5
  2. Para gerar a saída lsof.log em um intervalo no servidor de back-end, configure um cronjob como o seguinte (observe que esse comando edita o IP do back-end, desde que você o atualize conforme necessário):
    * * * * * sudo lsof -nP -i :7300 | sed 's/123.456.78.9/BACKEND_IP/g' > /tmp/lsof.log && md5sum /tmp/lsof.log > /tmp/lsof.md5
  3. Para puxar todos os arquivos para o seu servidor web, você pode usar um script como abaixo
    Observe que se você escolheu diferentes portas de escuta de proxy de encaminhamento ou proxy alfa, não se esqueça de atualizar essas portas nos cronjobs acima para que a saída lsof esteja correta:
 
Bash:
#!/bin/bash

PASSWORD="password123" # to simplify things, we are using the same password for each forward proxy server. If you use SSH keys, you could modify this script to not require the sshpass utility

# Array of remote file (lsof.log) and local destination directory pairs
# Format: "user@host:/remote/path/to/file /local/path/to/destination"
FILES_TO_RETRIEVE=(
    "[email protected]:/tmp/lsof.log /var/www/lsof.comain.com/lsof-ovh01.log"
    "[email protected]:/tmp/lsof.md5 /var/www/lsof.comain.com/lsof-ovh01.md5"
)

for entry in "${FILES_TO_RETRIEVE[@]}"; do
    REMOTE_FILE=$(echo "$entry" | awk '{print $1}')
    LOCAL_PATH=$(echo "$entry" | awk '{print $2}')
    sshpass -p "$PASSWORD" scp "$REMOTE_FILE" "$LOCAL_PATH"
    if [[ $? -ne 0 ]]; then
        echo "Failed to retrieve $REMOTE_FILE"
    else
        echo "Successfully retrieved $REMOTE_FILE"
    fi
done
 


Site
Se o seu site depende do protocolo de status para status e/ou contagem online, você precisará atualizar o IP/PORTA que ele está usando para se adequar à sua nova configuração (observe que alguns sites extraem isso diretamente de um config.lua)

Créditos

  • This is the hidden content, please
    : Desenvolvedor do aplicativo proxy de back-end, do recurso de proxy otclient e das alterações necessárias do TFS para reunir tudo
  • This is the hidden content, please
    : Correções de bugs no aplicativo proxy de back-end e me ensinaram como implementar o sistema (da maneira certa)
  • This is the hidden content, please
    : Portando o recurso de proxy do cliente para OTClient Redemption (e colocando em seus próprios esforços para ajudar as pessoas a implementar este sistema)
  • This is the hidden content, please
    : Escrevendo este guia

Doações
Se você achou este guia útil e se sente inclinado, pode direcionar quaisquer doações para 

This is the hidden content, please
 e/ou 
This is the hidden content, please


Footnotes

  • Aparentemente, este sistema de proxy também pode ser usado com clientes reais do Tibia, no entanto, não estou familiarizado com isso. Ref: 
    This is the hidden content, please
  • Há uma solicitação de pull de rascunho para implementar as alterações do servidor de jogos no TFS. Eu não o revisei, e as alterações que instruo aqui podem diferir desse PR. Ref: 
    This is the hidden content, please

proxy1.4.patch

  • Like 25
  • Thanks 3
  • Confused 1
Link para o comentário
https://tibiadevs.com/forums/topic/1026-guia-de-proxy-alfa-proxy-multi-caminho-kondrahotclient/
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
  • Criar Novo...