Ip

IP 路由到域

  • December 9, 2014

我有一個通過特定埠將數據發送到 IP 地址的遠端設備。我要解決的問題是我需要它將數據發送到域,但設備只允許設置 IP 地址。

我想知道,如何配置 Linux 以便對給定域進行 IP 路由。

那可能嗎?

我可以設置設備來定址域的 ip,但這個 IP 地址是動態的。我擁有的域是 noip.com 的域。

兩部分解決方案:

  1. 使用 IPTABLES,您可以執行一些 PREROUTING 以擷取到 abcd(遠端伺服器)的所有流量,然後屏蔽該流量並將其重定向到 efgh(您的 noip.com IP)
  2. 使用 cron 腳本,每 N 分鐘執行一次,如果 IP 已更改,清除 IPTABLES 規則並使用新 IP 重新插入它們。

我還沒有測試過,但這就是我開始的方式:

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

…和腳本,再次需要校對(結果可能因版本和系統風格而異):

#!/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}).*/\1/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

最後,將其添加到 cron;以下每 10 分鐘執行一次(通過此部分:*/10)。

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

警告:現在 IPTABLES 將很棘手,如果我給出的命令不起作用(可能不會 - 這只是一個猜測) - 在Google中進行探勘,例如:

http://ribbalicious.com/rewrite-destination-ip-address-using-iptables/

祝你好運。

引用自:https://unix.stackexchange.com/questions/172293