使用 iptables 脚本对特定(动态)IP 进行端口重定向

使用 iptables 脚本对特定(动态)IP 进行端口重定向

我想要的是:

来自 myip.dyndns.org(动态 IP)解析 IP 地址的端口 900 上的传入 TCP 和 UDP 连接应重定向到本地计算机上的端口 5050。所有其他 IP 地址应“保留”在端口 900 上。

我读到 iptables 仅在添加规则后解析 IP 地址,然后即使 IP 地址发生变化也会使用该 IP 地址,并且我找到了一个可以使用 crontab 运行的脚本来解决这个问题:

#!/bin/bash

HOSTNAME=myip.dyndns.org
LOGFILE=iptables_update.log

Current_IP=$(host $HOSTNAME | cut -f4 -d' ')

if [ $LOGFILE = "" ] ; then
  iptables -t nat -I PREROUTING -p tcp --src $Current_IP --dport 900 -j REDIRECT --to-port 5050
  iptables -t nat -I PREROUTING -p udp --src $Current_IP --dport 900 -j REDIRECT --to-port 5050
  echo $Current_IP > $LOGFILE
else

  Old_IP=$(cat $LOGFILE)

  if [ "$Current_IP" = "$Old_IP" ] ; then
    echo "Update not required."
  else
    iptables -t nat -D PREROUTING -p tcp --src $Old_IP --dport 900 -j REDIRECT --to-port 5050
    iptables -t nat -D PREROUTING -p udp --src $Old_IP --dport 900 -j REDIRECT --to-port 5050
    iptables -t nat -I PREROUTING -p tcp --src $Current_IP --dport 900 -j REDIRECT --to-port 5050
    iptables -t nat -I PREROUTING -p udp --src $Current_IP --dport 900 -j REDIRECT --to-port 5050
    echo $Current_IP > $LOGFILE
    echo "Updating iptables with IP:" $CurreIP
  fi
fi

所以我唯一的问题是这是否是实现这一目标的可行/正确的方法?

提前致谢!

相关内容