Redirecionar portas com iptables para domínio em vez de ip

0

Seguindo o cenário; Eu tenho um homeserver que tem um domínio com DNS dinâmico anexado e quero proxy qualquer um usando meu homeserver através de um VPS barato usando o iptables. O comando que eu tentei foi:

iptables -t nat -A PREROUTING -p tcp --dport 30033 -j DNAT -d XXXXXXXXXXXX.myfritz.net:30033

mas eu recebo

iptables v1.6.0: Bad IP address "XXXXXXXXXXXX.myfritz.net"
    
por Bluscream 11.08.2018 / 22:32

2 respostas

1

iptables não pode fazer isso sozinho. Ele só entende IPs, não domínios. Veja duas maneiras de fazer o que você quer:

  1. Em vez de fazer -j DNAT para outra caixa, execute -j REDIRECT e execute um programa de espaço do usuário no host local que lide com o DDNS e os proxies para o host real.
  2. Adicione a regra por endereço IP e execute um cronjob que verifique a atualização do DNS e, quando encontrar uma, exclua e recrie a regra com o novo IP.
por 11.08.2018 / 22:58
0

Graças ao link acabei criando um script bash para essa tarefa (caso você esteja se perguntando por que loop; o crontab não o executaria por algum motivo):

#!/bin/bash
iptables -t nat -A POSTROUTING -j MASQUERADE
while true
do
LOGFILE=/path/to/ip.txt
Current_IP=$(dig +short @YOUR_NAMESERVER YOUR_DYNDNS_DOMAIN)
# Current_IP=$(host $HOSTNAME | head -n1 | cut -f4 -d ' ')
if [ $LOGFILE = "" ] ; then
  iptables -I INPUT -i eth1 -s $Current_IP -j ACCEPT
  echo $Current_IP > $LOGFILE
else
  Old_IP=$(cat $LOGFILE)
  if [ "$Current_IP" = "$Old_IP" ] ; then
    echo "IP address has not changed ($Old_IP -> $Current_IP)"
  else
    iptables -t nat -D PREROUTING -p udp --dport 9989:10050 -j DNAT --to-destination $Old_IP:9989-10050
    iptables -t nat -D PREROUTING -p tcp --dport 10011 -j DNAT --to-destination $Old_IP:10011
    iptables -t nat -D PREROUTING -p tcp --dport 30033 -j DNAT --to-destination $Old_IP:30033
    iptables -t nat -A PREROUTING -p udp --dport 9989:10050 -j DNAT --to-destination $Current_IP:9989-10050
    iptables -t nat -A PREROUTING -p tcp --dport 10011 -j DNAT --to-destination $Current_IP:10011
    iptables -t nat -A PREROUTING -p tcp --dport 30033 -j DNAT --to-destination $Current_IP:30033
    sysctl net.ipv4.ip_forward=1
    iptables-save
    echo $Current_IP > $LOGFILE
    echo "IP address has changed ($Old_IP -> $Current_IP)"
  fi
fi
sleep 30
done
    
por 12.08.2018 / 02:46

Tags