IP de roteamento para o domínio

0

Eu tenho um dispositivo remoto que envia dados para um endereço IP através de uma porta específica. O problema que quero resolver é que preciso que ele envie dados para um domínio, mas o dispositivo só permite definir endereços IP.

Eu quero saber, como posso configurar o Linux para fazer um roteamento IP para um determinado domínio.

Isso é possível?

Eu poderia configurar o dispositivo para endereçar o ip do domínio, mas esse endereço IP é dinâmico. O domínio que tenho é um domínio do noip.com.

    
por nashuald 09.12.2014 / 13:01

2 respostas

1

Solução de 2 partes:

  1. Usando IPTABLES, você pode fazer PREROUTING para capturar todo o tráfego para a.b.c.d (o servidor remoto), então mascarar esse tráfego e redirecioná-lo para e.f.g.h (seu IP noip.com)

  2. Usando um script cron, rodando a cada N minutos, se o IP mudou, purgar as regras do IPTABLES e reinseri-las com o novo IP.

Eu não testei, mas é assim que eu começaria:

iptables -t nat -I PREROUTING -s [localwanip] -d [remoteip] -p -m tcp --dport [port] --to-destination [newremoteip]

... e o script, novamente a prova necessária (os resultados podem variar dependendo das versões e do sabor do sistema):

#!/bin/bash

NOIPNAME=yourname.noip.com
# Your IP on your WAN interface
LOCALIP=1.2.3.4
# The IP the software is _mistakenly_ trying to talk to
REMOTEIP=4.3.2.1
# The TCP port the software is using to connect to the remote IP
PORT=1234
# Just a file to keep track of what the last IP was...
REMEMBERFILE=/var/run/oldip.txt

# and now the magic, if it works...

HOSTLINE=$(host $NOIPNAME ns1.no-ip.com | grep 'has address')
HOSTLEN=$(echo $HOSTLINE | wc -m)

# Make sure the return string is > 8 characters (1.2.3.4\n)
if [ $HOSTLEN -lt 8 ]; then
  # Host resolve failure
  echo "Bad host"
  exit 1
fi

# Extract the IP from the return string.
DYNIP=$(echo $HOSTLINE | sed -rn 's/^.* ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*//p')

OLDIP=$(cat $REMEMBERFILE)

if [ "x$DYNIP" = "x$OLDIP" ]; then
    # Nothing to do.
    exit 0
else
    echo $DYNIP > $REMEMBERFILE
fi

# Flush
iptables -t nat -F
# and re-write
iptables -t nat -I PREROUTING -s $LOCALIP -d $REMOTEIP -p -m tcp --dport $PORT --to-destination $DYNIP

exit 0

Por último, adicione-o ao cron; o abaixo é executado a cada 10 minutos (através desta parte: * / 10).

echo "*/10    *  *  *   *   root /your/path/to/script" >> /etc/crontab

Advertências: Agora o IPTABLES será complicado, se o comando que eu dei não funcionar (provavelmente não será - foi apenas um palpite) - tenha uma prévia no google, por exemplo:

link

Boa sorte.

    
por 09.12.2014 / 13:54
0

Você deve definir o endereço IP de um sistema Linux no dispositivo. Este Linux faria NAT ( iptables , veja DNAT ). Ele também verifica regularmente as atualizações de DNS e atualiza a configuração do DNAT de acordo. Claro, você pode perder alguns dados devido às mudanças de IP.

    
por 09.12.2014 / 13:39

Tags