特定のポートを介してIPアドレスにデータを送信するリモートデバイスがあります。私が解決しようとしている問題は、ドメインにデータを転送するために必要ですが、デバイスはIPアドレスのみを設定できるようにすることです。
特定のドメインへのIPルーティング用にLinuxを設定する方法を知りたいです。
それは可能ですか?
ドメインのIPアドレスを指定するようにデバイスを設定できますが、IPアドレスは動的です。私が所有しているドメイン名はnoip.comというドメイン名です。
答え1
2つの部分からなるソリューション:
IPTABLESを使用すると、プリセットを実行してabcd(リモートサーバー)へのすべてのトラフィックをキャプチャし、そのトラフィックをマスクしてefgh(noip.com IP)にリダイレクトできます。
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/
頑張ってください。
答え2
デバイスでLinuxシステムのIPアドレスを設定する必要があります。このLinuxはNATを実行します(iptables
参照DNAT
)。また、定期的にDNSアップデートを確認し、それに応じてDNAT構成を更新します。もちろん、IPの変更によって一部のデータが失われる可能性があります。