Durante a semana passada, tentei proteger um servidor de ataques DOS, utilizando um túnel GRE de um VPS para uma máquina dedicada sem muito sucesso.
Visual:
User --> VPS --> Dedicated Server
Eu segui vários guias BUYVM e Minecraft DDOS Protection e modificou-o conforme necessário.
O que eu fiz até agora:
Em ambos os computadores, os seguintes módulos do kernel são carregados
ip_gre
ip_nat_pptp
ip_conntrack_pptp
Além disso, o encaminhamento de porta ipv4 está ativado em ambas as máquinas.
Configurando o GRE na máquina dedicada:
ip tunnel add veridian mode gre remote VPS_EXTERN_IP local DEDICATED_EXTERN_IP ttl 255
ip link set veridian up
ip addr add 10.10.10.1/24 dev veridian
Isso produz a interface:
veridian Link encap:UNSPEC HWaddr 3F-8D-F2-FA-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.10.10.1 P-t-P:10.10.10.1 Mask:255.255.255.0
inet6 addr: fe80::200:5efe:3f8d:f2fa/64 Scope:Link
UP POINTOPOINT RUNNING NOARP MTU:1476 Metric:1
RX packets:4016 errors:0 dropped:0 overruns:0 frame:0
TX packets:3970 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:338404 (338.4 KB) TX bytes:359357 (359.3 KB)
Configurando o GRE no VPS
ip tunnel add gre1 mode gre remote DEDICATED_EXTERN_IP local VPS_EXTERN_IP ttl 255
ip link set gre1 up
ip addr add 10.10.10.2/24 dev gre1
Isso produz a interface:
gre1 Link encap:UNSPEC HWaddr 68-83-98-C8-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.10.10.2 P-t-P:10.10.10.2 Mask:255.255.255.0
inet6 addr: fe80::200:5efe:6883:98c8/64 Scope:Link
UP POINTOPOINT RUNNING NOARP MTU:1476 Metric:1
RX packets:3743 errors:0 dropped:0 overruns:0 frame:0
TX packets:3811 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:314188 (314.1 KB) TX bytes:335587 (335.5 KB)
Adicionando o IP da interface VPS à tabela de rotas de origem no servidor dedicado:
echo '100 VERIDIAN' >> /etc/iproute2/rt_tables
ip rule add from 10.10.10.0/24 table VERIDIAN
ip route add default via 10.10.10.2 table VERIDIAN
O que funciona
A partir daqui, posso executar ping no Servidor Dedicado do VPS com êxito
ping 10.10.10.1
e vice-versa
ping 10.10.10.2
Além disso, quando configuro a entrada NAT no VPS
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -j SNAT --to-source VPS_EXTERN_IP
Eu posso recuperar com sucesso o IP externo do VPS do Servidor Dedicado executando:
curl http://www.cpanel.net/showip.cgi --interface 10.10.10.1
O que não funciona - Port Forwarding
No VPS eu agora corro:
iptables -t nat -A PREROUTING -p tcp -d VPS_EXTERN_IP --dport 25565 -j DNAT --to-destination 10.10.10.1:25565
iptables -A FORWARD -p tcp -d 10.10.10.1 --dport 25565 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Eu agora tentarei me conectar ao servidor de jogos através do endereço IP externo do VPS sem sucesso.
Eu tenho lutado com isso por mais de uma semana qualquer ajuda seria muito apreciada.
Atualizar
Tudo acima está correto.
Um pouco mais de depuração e descobri que o daemon do wrapper (Multicraft) para o servidor do jogo bloqueia as conexões do host local quando o ip externo é definido para a instância do jogo.
A solução é definir o IP como 0.0.0.0 e o encaminhamento de porta funciona perfeitamente.