![도메인으로의 IP 라우팅](https://linux55.com/image/60153/%EB%8F%84%EB%A9%94%EC%9D%B8%EC%9C%BC%EB%A1%9C%EC%9D%98%20IP%20%EB%9D%BC%EC%9A%B0%ED%8C%85.png)
특정 포트를 통해 IP 주소로 데이터를 보내는 원격 장치가 있습니다. 제가 해결하려는 문제는 도메인에 데이터를 전송하는 데 필요한데 장치에서는 IP 주소만 설정하도록 허용한다는 것입니다.
특정 도메인에 대한 IP 라우팅을 위해 Linux를 구성하는 방법을 알고 싶습니다.
그게 가능합니까?
도메인의 IP 주소를 지정하도록 장치를 설정할 수 있지만 IP 주소는 동적입니다. 제가 소유한 도메인 이름은 noip.com이라는 도메인 이름입니다.
답변1
두 부분으로 구성된 솔루션:
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 변경으로 인해 일부 데이터가 손실될 수 있습니다.