AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1083937
Accepted
AAron
AAron
Asked: 2021-11-19 06:47:06 +0800 CST2021-11-19 06:47:06 +0800 CST 2021-11-19 06:47:06 +0800 CST

Iptables Port-forwarding enquanto preserva o IP do cliente

  • 772

TL;DR: Como posso obter o IP do cliente conectado a um VPS hospedado remotamente para ser o IP que é encaminhado/natted, via iptables, para um servidor de jogos rodando em minha casa?

Eu tenho um servidor de jogos Rust que estou hospedando em minha casa. Eu quero que isso seja público, mas não quero necessariamente dar meu endereço IP para todos. Então estou alugando um pequeno VPS que pretendo usar basicamente como proxy reverso. Atualmente, estou usando o nginx para encaminhar o tráfego por uma VPN de servidor clinet, que funciona bem. No entanto, no servidor do jogo, o IP de cada jogador é o endereço do túnel do VPS, não o IP do cliente real. Eu tentei usar proxy_pass $remote_addr:28015 transparancy; proxy_responses 0na minha configuração do nginx, nenhuma alteração. Então eu mudei para fazê-lo via iptables.

Eu posso fazer funcionar 99% do jeito que eu quero, fazendo exatamente isso:

sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport 28015 -j NAT --to-destination my_ip:28015
iptables -t nat -A PREROUTING -p udp --dport 28015 -j NAT --to-destination my_ip:28015
iptables -t nat -A PREROUTING -p tcp --dport 28016 -j NAT --to-destination my_ip:28016
iptables -t nat -A PREROUTING -p udp --dport 28016 -j NAT --to-destination my_ip:28016
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -p tcp -d my_ip --dport 28015 -m state --state NOVO, ESTABELECIDO, RELACIONADO -j ACEITAR
iptables -A FORWARD -p ucp -d my_ip --dport 28015 -m state --state NOVO, ESTABELECIDO, RELACIONADO -j ACEITAR
ufw desativar
ufw ativar
vps reboot \

O que isso faz é basicamente o mesmo que o nginx, onde funciona bem, mas todos têm apenas o ip público do VPS (observe que a LAN e o endereço IP público do VPS são os mesmos). Se eu omitir a máscara, não funciona.

Algumas informações sobre a configuração:
VPS tem uma única interface: eth0
VPS está rodando Ubuntu 20.04
Na minha casa, o modem está em modo passthru para pfsesne. No pfsense, tenho regras de encaminhamento de porta para passar 28015/28016 tcp/udp para gameserver.

Nota lateral: não sei por que o nginx não funcionou para isso. Era quase como se o nginx não estivesse fazendo nada com a proxy_pass $remote_addrdiretiva.

nat port-forwarding iptables nginx
  • 1 1 respostas
  • 467 Views

1 respostas

  • Voted
  1. Best Answer
    Tero Kilkanen
    2021-11-19T07:13:28+08:002021-11-19T07:13:28+08:00

    Você não pode fazer isso com IPTables. Para que o encaminhamento de pacotes bidirecional funcione corretamente, o endereço IP de origem dos pacotes enviados de seu VPS deve conter o endereço VPS. Caso contrário, os pacotes de resposta não seriam enviados ao VPS, que os encaminha aos clientes.

    Você precisa de suporte ao protocolo de camada 7 para retransmitir o endereço IP original para seu aplicativo. Em HTTP/HTTPS, isso é feito da seguinte forma:

    1. O proxy reverso nginx funciona em seu VPS.
    2. O proxy reverso adiciona cabeçalho X-Forwarded-For: <clientip>à solicitação que envia ao servidor de origem.
    3. O servidor de origem lê o cabeçalho e o usa como endereço IP do cliente em vez de usar o endereço IP associado ao soquete TCP.

    Outra possibilidade é usar o proxy SOCKS entre o VPS e o servidor de origem. O proxy SOCKS encapsula o tráfego do cliente e adiciona metadados adicionais, como o endereço IP do cliente.

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve