Следующий сценарий; У меня есть домашний сервер, к которому подключен домен с динамическим DNS, и я хочу прокси-сервер любому, кто использует мой домашний сервер, через дешевый VPS, используя iptables. Команда, которую я попробовал, была:

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

но я получаю

iptables v1.6.0: Bad IP address "XXXXXXXXXXXX.myfritz.net"

2 ответа2

1

iptables не может сделать это сам по себе. Он понимает только IP-адреса, а не домены. Вот два способа сделать то, что вы хотите:

  1. Вместо того, чтобы выполнять -j DNAT для другого блока, выполните -j REDIRECT и запустите пользовательскую программу на локальном хосте, которая обрабатывает DDNS и передает прокси дальше на реальный хост.
  2. Добавьте правило по IP-адресу и запустите cronjob, который проверяет DNS на наличие обновлений, а когда находит, удаляет и заново создает правило с новым IP-адресом.
0

Благодаря https://unix.stackexchange.com/a/91711 я закончил создание сценария bash для этой задачи (на случай, если вам интересно, почему цикл while; crontab по какой-то причине не выполнил бы его):

#!/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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .