한 IP 및 포트에서 다른 IP 및 포트로 트래픽 리디렉션

서버를 관리 할 때 매우 일반적인 것은 트래픽을 리디렉션하는 것입니다.

특정 서비스가 실행중인 서버가 있지만 어떤 이유로 든 해당 서비스 중 하나를 변경한다고 가정합니다 (잘 모르겠습니다. 예를 들어 포트 3 인 pop110)를 다른 서버로 전송합니다. 일반적이고 가장 빈번한 것은 DNS 레코드의 IP를 변경하는 것입니다. 그러나 누군가가 하위 도메인 대신 IP를 사용하는 경우 영향을받습니다.

무엇을해야합니까? ... 간단하게, 서버가 해당 포트를 통해 수신하는 트래픽을 동일한 포트를 가진 다른 서버로 리디렉션합니다.

서버 노드 LAN 이더넷

트래픽 리디렉션을 어떻게 시작합니까?

첫 번째는 우리가 전송 이를 위해 서버에 다음을 넣습니다.

echo "1" > /proc/sys/net/ipv4/ip_forward

이 자습서에 표시된 모든 명령은 관리자 권한으로 실행해야합니다. 루트 사용자로 직접 실행하는 것이 좋습니다.

이전 명령이 작동하지 않는 경우이 다른 명령을 사용할 수도 있습니다 (CentOS에서 이런 일이 나에게 일어났습니다.):
sysctl net.ipv4.ip_forward=1
그런 다음 네트워크를 다시 시작합니다.

service networking restart

CentOS 및 기타와 같은 RPM 배포판에서는 다음과 같습니다.

service nertwork restart

이제 중요한 부분으로 넘어 가서 서버에 iptables에 리디렉션 할 항목 :

iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>

즉, 앞서 언급 한 예에 따라 서버가 110 번 포트를 통해 수신하는 모든 트래픽을 다른 서버로 리디렉션한다고 가정합니다 (예 : 10.10.0.2), 110 (동일한 서비스입니다):

iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110

10.10.0.2 서버는 모든 패킷 또는 요청이 클라이언트의 IP에서 오는 것을 볼 수 있습니다. 즉, 요청을 처리하려는 경우 즉, 두 번째 서버는 요청이 첫 번째 서버의 IP와 함께 도착하는 것을 확인합니다. 리디렉션을 적용합니다), 다음 두 번째 줄도 입력합니다.

iptables -t nat -A POSTROUTING -j MASQUERADE

몇 가지 질문과 답변

이 예에서는 동일한 포트를 두 번 (110) 사용했지만 문제없이 한 포트에서 다른 포트로 트래픽을 리디렉션 할 수 있습니다. 예를 들어 다른 서버의 포트 80에서 443으로 트래픽을 리디렉션한다고 가정합니다.이 경우 다음과 같습니다.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443

이것은 iptables에, 그들은 우리가 알고있는 다른 모든 매개 변수를 사용할 수 있습니다. 예를 들어, 특정 IP의 트래픽 만 리디렉션하려는 경우 -s를 추가합니다. … 예를 들어 10.10.0.51에서 오는 트래픽 만 리디렉션합니다.

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.51 --dport 80 -j DNAT --to-destination 10.10.0.2:443

또는 전체 네트워크 (/ 24) :

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.0/24 --dport 80 -j DNAT --to-destination 10.10.0.2:443

-i로 네트워크 인터페이스를 지정할 수도 있습니다. :

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443

끝!

내가 이미 말했듯이 이것은 iptables입니다. 이미 알려진 것을 적용하여 서버가 원하는 것을 정확히 수행하도록 할 수 있습니다 😉

안녕하십니까!

전용 서버_하위 이미지


기사의 내용은 우리의 원칙을 준수합니다. 편집 윤리. 오류를보고하려면 여기에.

19 코멘트, 당신의 것을 남겨주세요

코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   하기까지

    포트 포워딩을 허용하는 방화벽에서도이 작업을 수행 할 수 있습니다. (해당 규칙 적용).

    1.    KZKG ^ 가아라

      물론, 결국 Pfsense 또는 다른 방화벽과 같은 방화벽은 뒤에서 iptables를 사용합니다.

      1.    사냥꾼

        정확히 말하면 pfsense는 iptables를 사용하지 않지만 pf는 내부 bsd임을 기억하십시오.

        1.    KZKG ^ 가아라

          아 맞다!

  2.   니콜라스

    팁 주셔서 감사합니다 🙂

    몇 가지 의심이 있습니다.
    1-변경 사항이 영구적입니까? 아니면 서버를 다시 시작할 때 손실됩니까?
    2-동일한 서브넷에 여러 인스턴스 (예 : A, B, C)가 있습니다. 인스턴스 A에서는 트래픽을 외부 IP로 라우팅하는 규칙을 적용하고 인스턴스 B와 C의 컬로 테스트하면 모든 것이 훌륭하게 작동합니다. 문제는 인스턴스 A에서 작동하지 않는다는 것입니다. IP와 루프백 인터페이스를 모두 사용해 보았지만 둘 다 작동하지 않습니다.
    $ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –to-destination xxxx : 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT –to-destination xxxx : 8080

    $ curl ip-yyyy : 8080 / hello_world
    curl : (7) ip-yyyy 포트 8080에 연결하지 못했습니다. 연결이 거부되었습니다.
    $ curl localhost : 8080 / hello_world
    curl : (7) 로컬 호스트 포트 8080에 연결하지 못했습니다. 연결이 거부되었습니다.

    문제가 무엇인지 아십니까?

    1.    KZKG ^ 가아라

      예, 재부팅시 변경 사항이 손실됩니다.이를 방지하려면 iptables-save & iptables-restore 또는 이와 유사한 것을 사용해야합니다.
      나는 당신이 무엇을하고 싶은지 이해하지 못했습니다. 인스턴스 A?

      1.    니콜라스

        특정 IP (서버 A)의 연결 만 지원하는 서버가 있으며, 확장 성 문제의 경우 화이트리스트에 IP를 더 추가 할 수 없거나 추가하고 싶지 않으므로 외부 서버로의 모든 트래픽이 통과하기를 원합니다. 서버 (A).
        실용성을 위해 각 서비스에 사용할 IP를 정의하는 글로벌 구성이 있으므로이 경우에는 "외부 서비스를 사용하려는 모든 사람은 IP A를 사용해야합니다."
        이 기사의 방법을 사용하여 성공적으로이 작업을 수행했지만 적용 할 때 서버 A가 자체 IP를 사용하여 서비스에 액세스 할 수 없다는 문제가 발생합니다 (그러나 다른 모든 서버는 수행합니다).
        지금까지 내가 찾은 최선의 방법은 서버 A의 / etc / hosts 파일에 매핑을 추가하여 외부 IP를 가리키고 전역 설정을 재정의하는 것입니다.

  3.   Braybaut

    아주 좋습니다. 다른 메일 서버가 있다면 포트 143에서 server1에서 server2로 트래픽을 전달할 수 있고 이메일은 server2에서 저에게 도달 할 것입니다.

    안부

    1.    KZKG ^ 가아라

      이론적으로는 그렇습니다. 물론, server2에 메일 서버가 제대로 설치되어 있어야합니다 🙂

  4.   MSX

    우리가 읽고 싶은 종류의 게시물, 감사합니다!

  5.   아브라함이 바라

    훌륭한 기사, 작업중인 프로젝트가 있습니다. 질문을하고 싶습니다. NAT 기능이있는 산업용 스위치 (아래 IPTables를 사용한다고 가정합니다), 장비를 변경하지 않고 IP 주소를 변환 할 수 있습니다. 예, 서버가 있습니다. 10.10.2.1.X 컴퓨터와 통신하고 스위치를 통해 통신하는 10.10.2은 주소가 192.168.2.4 인 컴퓨터가 실제로 서버에서 10.10.2.5로 표시되도록 프로그래밍되어 해당 IP 주소가 표시되도록 변환했습니다. 해당 주소를 가진 다른 컴퓨터에서 Ubuntu 또는 다른 배포가있는 서버에서 수행하고 싶습니다. iptables 규칙은 무엇입니까?

  6.  

    아주 좋은 정보 감사합니다 ^ _ ^

  7.   이수 스

    안녕하세요.
    리디렉션을 시도하는 데 문제가 있습니다. 내가 설명한다:
    Ubuntu에 2 개의 네트워크 카드가있는 프록시 서버가 있습니다.
    eth0 = 192.168.1.1은 나머지 로컬 네트워크에 연결됩니다.
    eth1 = 192.168.2.2가 라우터에 연결됩니다.
    eth0을 통해 들어오는 모든 것이 eth1을 통과하고 프록시를 통과해야합니다 (기본 포트가 3128 인 Squid를 사용함). IPTABLES 구성에서 키를 찾을 수 없습니다.
    나는 어떤 종류의 제한도 필요하지 않으며 방문한 웹 주소의 로그에 기록이 남아 있다는 것입니다.

    며칠 동안 저를 걱정했던 꽤 성가신 일이기 때문에 당신이 저를 도울 수 있기를 바랍니다.

    그라시아.

  8.   가브리엘

    친구, 나는 다른 서버에 매우 익숙하지 않지만 주제를 이해하고 빨리 배웁니다. 제 질문은 다음과 같습니다. 동일한 인트라넷에 연결된 두 개의 서버 serv_2 및 serv_1가 있습니다.이 서버에는 자체 클라우드가 설정되어 있습니다. 다음을 수행하고 싶습니다.

    자신의 클라우드 (ipowncloud)에 액세스 IP를 배치 할 때 특정 범위의 ip (예 : rangeip_1)는 serv_1을 향하고 다른 rangeip_2가 배치 된 경우 동일한 ipowncloud가 serv_2로 전달됩니다. 두 개의 다른 도시에서 IP 범위는 다르지만 모두 동일한 네트워크에 있습니다. 즉, 첫 번째 부분이 될 것입니다. 두 번째는이 두 서버를 동기화하여 미러가되도록하거나 너비를 최적화하기 위해이를 권장하는 것입니다. 밴드, 제발, 슈퍼 프로그래머 모드 = (

  9.   안토니오 카리 조사

    안녕하세요, 실례합니다. 네트워크를 구성하는 모든 장치의 통신을 담당하는 스위치가 있습니다.이 후 방화벽이 종료되고 인터넷이 종료됩니다. 요청 된 서비스가 인터넷이 아닌 경우 방화벽에 연결할 필요가 없습니다.

  10.   요한 복음

    이 방법을 사용하면 HTTPS를 HTTP로 리디렉션 할 수 있습니까?

  11.   마티

    안녕하세요, 조금 늦었을지도 모르지만, 같은 네트워크의 웹 서버에 연결하고 싶을 때 squid가 클라이언트의 IP를 수정하지 않도록 어떻게해야합니까?

  12.   라 파트 32

    나를 나쁘게 대하지 마십시오. Windows에서이 작업을 수행 할 수 있습니까?

  13.   마틴

    이 정보는 나에게 유용했습니다. 언제나 그렇듯이 여러분은 믿을 수 있습니다. 영어로 된 것을 찾을 수 없을 때 저는 보통 스페인어로 검색하게되며, 그럴 때 거의 항상이 사이트를 방문합니다. 감사합니다.