Solicitação de Encaminhamento de Porta DDWRT do IP Dinâmico

0

Estou executando um roteador DDWRT com um NAS por trás dele. O NAS executa um serviço chamado Cloud Station . Eu gostaria de restringir o acesso ao Cloud Station para um punhado de hosts (membros da família). Cada membro da família tem um IP, mas eles são todos dinâmicos (Comcast ISP), então eu gostaria de usar o DynDns que eu já configurei.

Eu entendo que posso configurar o encaminhamento de porta restrito com o iptables (ou usando o gui DDWRT), mas como o IP de origem pode mudar, posso apenas usar um nome de host do dyndns? Se não, alguém sabe que um script que eu possa executar pode atualizar o IP permitido?

    
por arcdegree 14.07.2013 / 20:18

2 respostas

0

Acabei criando um script que essencialmente atualizaria o iptables automaticamente se o endereço IP fosse alterado. Aqui está o que eu criei (preencha XXXX com IP e porta)

#!/bin/sh

# setup variables
HOST=$1
HOSTFILE="/tmp/root/hosts/host-$HOST"
IPTABLES="/usr/sbin/iptables"

# check to make sure we have enough args passed (1).
if [ $# -eq 0 ]; then
    echo "$0 hostname"
    echo "You must supply a hostname to update in iptables."
    exit
fi

# lookup host name from dns tables using ping, if invalid hostname, dns server ip responds (67.215.65.132)
IP='ping -c 1 ${HOST} | egrep -m1 -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}''
if [ "${IP}" = "67.215.65.132" ]; then
    echo "Couldn't lookup hostname for $HOST, failed."
    exit
fi

# check if hostfile exists (-e) and if so, read the contents
OLDIP=""
if [ -e $HOSTFILE ]; then
    OLDIP='cat $HOSTFILE'
    echo "CAT returned: $?"
fi

# has address changed?
if [ "$OLDIP" == "$IP" ]; then
    echo "Old and new IP addresses match."
    exit
fi

# save new ip to host file.
echo $IP>$HOSTFILE

echo "Updating $HOST in iptables."
if [ "${#OLDIP}" != "0" ]; then
    echo "Removing old rule ($OLDIP)"
    '${IPTABLES}  -t nat -D PREROUTING -p tcp -s ${IP} -d $(nvram get wan_ipaddr) --dport XXXX -j DNAT --to 192.168.1.XXXX:XXXX'
    '${IPTABLES} -D FORWARD -p tcp -s ${IP} -d 192.168.1.XXXX --dport XXXX -j ACCEPT'
fi
echo "Inserting new rule ($IP)"
# route and forward all traffic from ip XXXX to port XXXX
'${IPTABLES}  -t nat -I PREROUTING -p tcp -s ${IP} -d $(nvram get wan_ipaddr) --dport XXXX -j DNAT --to 192.168.1.XXXX:XXXX'
'${IPTABLES} -I FORWARD -p tcp -s ${IP} -d 192.168.1.XXXX --dport XXXX -j ACCEPT'
    
por 20.07.2013 / 07:05
0

iptables , que o DD-WRT usa para firewall e encaminhamento de porta, só vê endereços IP. Não faz pesquisas de DNS quando um pacote é recebido. Esta é uma péssima ideia por razões de velocidade e segurança. Por isso, nunca se sabe que o IP xxx.xxx.xxx.xxx reverte para mydomain.invalid , por exemplo.

Provavelmente, a maneira mais elegante de resolver seu problema é usar uma VPN, seja OpenVPN ou PPTP. Agora eu realmente nunca tentei trabalhar com o DD-WRT (normalmente eu tenho o OpenVPN rodando em uma caixa separada) mas se seu roteador DD-WRT tiver flash suficiente para uma compilação completa (8MB ou mais) você pode tentar usar o OpenVPN nele, ou PPTP, se você quiser algo mais simples para sua família.

Então, basicamente, você está mudando de tentar fazer segurança com base no endereço IP / nome de domínio para a segurança baseada na senha da VPN, o que funcionará melhor para sua situação.

Leia mais: PPTP no DD-WRT, /www.dd-wrt.com/wiki/index.php/OpenVPN#OpenVPN_in_DD-WRT">OpenVPN on DD-WRT .

    
por 14.07.2013 / 20:45