포트를 통해 서버 A에서 서버 B로 요청 전달

포트를 통해 서버 A에서 서버 B로 요청 전달

정확한 용어는 잘 모르겠지만 서버 A에서 서버 B로 트래픽을 리디렉션하려고 합니다. 다음과 같은 리소스가 있습니다.

  • 유형 A의 DNS 레코드는 다음을 가리킵니다.서버 AIP 주소(예:abc.com
  • 서버 A우분투변화 없는예: IP 00.00.00.01, 수신 대기 중인 포트가 없습니다.
  • 서버 B데비안,동적다음과 같이 가정해 보겠습니다. 의 IP 00.00.00.02, 수신 대기 포트123
  • 인터넷에서 들어오는 요청abc.com:123

서버 A처리 능력은 별로 없지만 고정 IP를 사용하는 서버입니다.서버 B강력한 서버이지만 동적 IP를 사용합니다. 둘 다 서로 다른 네트워크에서 실행됩니다.

내 계획은서버 B자주 말하다서버 A현재 IP 주소이며 다음 위치에 저장됩니다.서버 A파일로 이동합니다.

요청한 경우서버 APort에서는 123이전에 저장된 IP 주소를 사용하고 트래픽을 해당 주소로 리디렉션해야 합니다.

이전에 시도한 것은 IP 테이블을 사용하고 트래픽을 리디렉션하는 것입니다. 저는 iptables에 대해 잘 알지 못하지만 인터넷에서 다음 명령을 찾았습니다.

sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf # enable forwarding
sudo sysctl net.ipv4.ip_forward # apply changes
sudo iptables -t nat -A PREROUTING -p tcp --dport 123 -j DNAT --to-destination 00.00.00.02:123
sudo iptables -t nat -A POSTROUTING -p tcp -d 00.00.00.02 --dport 123 -j SNAT --to-source 00.00.00.01

그 후 iptables 서비스를 다시 시작했습니다. 오류가 발생하지 않았기 때문에 도메인에 대한 요청이 서버 B로 가는지 확인하기 위해 Traceroute를 사용해 보았지만 그렇지 않았습니다.

traceroute abc.com 123

나는 서버 A의 포트 123에서 아무것도 수신하지 않는다는 것을 알고 있지만 어쨌든 iptables가 트래픽을 서버 B로 리디렉션하므로 괜찮다고 가정합니다.

누군가 아이디어가 있을 수도 있습니다.

답변1

@roaima가 지적했듯이:

DDNS(동적 DNS)를 접해본 적이 있나요? 이는 상황을 처리하는 일반적인 방법입니다.

귀하의 DNS 제공업체에 REST API가 완벽하다고 말씀하셨습니다.

B의 공인 IP가 10초 정도마다 변경되었는지 간단히 확인하고 필요한 경우에만 업데이트하면 됩니다.

이렇게 하면 아무 일도 일어나지 않을 때 업데이트가 발생하지 않으며 공용 IP 주소를 업데이트할 때 대기 시간이 단축됩니다.

다음과 같은 스크립트가 작동합니다.

#!/bin/bash

lastip=""

while true
do
  currip=$(dig +short myip.opendns.com resolver1.opendns.com)
  if [ "${lastip}" = "${currip}" ]
  then
    sleep 10
  else
    curl WHATEVERNEEDSTOBEDONE_TO_UPDATE_DNS
    lastip="${currip}"
    sleep 300
  fi
done

물론 roaima가 지적했듯이 DNS 공급자는 DNS TTL이 충분히 낮아야 합니다(즉, 제공하는 응답이 곧 만료되는 것으로 표시해야 함). 그러나 내 경험에 따르면 공급자가 5~20분과 같은 최소 TTL을 제공하는 것은 드문 일이 아니며 구성 가능합니다. 그래서 시도해 보는 것이 좋습니다.

openDNS의 myip 서비스를 사용하여 자신의 IP 주소를 조회하는 것이 매우 "저렴"하기 때문에 절전 간격은 매우 짧으며, 업데이트가 네트워크에 전파되는 데 시간이 얼마나 걸리더라도 항상 가능한 한 빨리 업데이트하는 것이 좋습니다. 고객.

관련 정보