2010-04-23 5 views
6

우리는 일부 중소기업에 제품을 배포하고 있습니다. 기본적으로 Tomcat을 사용하는 SSL을 통한 RESTful API입니다. 이것은 소기업의 서버에 설치되며 iPhone 또는 기타 장치 휴대용 장치를 통해 액세스됩니다. 따라서 서버에 연결하는 장치는 원하는 수의 IP 주소에서 올 수 있습니다.NAT 뒤에있는 웹 서비스에 액세스하는 방법은 무엇입니까?

문제는 설치와 함께 제공됩니다. 이 서비스를 설치할 때 포트 포워딩을 할 때 항상 문제가되어 외부 세계가 tomcat에 액세스 할 수 있습니다. 주인이 라우터 비밀번호 등을 모르는 경우가 대부분입니다.

나는 이것을 수행 할 수있는 다른 방법을 연구하려고합니다. 나는 다음을 생각해 내고 그 주제에 대한 다른 생각을 듣고 싶다.

  1. 각 클라이언트 사무실에서 중앙 서버로 SSH 터널을 설정하십시오. 기본적으로 원격 장치는 포트의 중앙 서버에 연결되며 해당 트래픽은 사무실의 Tomcat으로 다시 터널링됩니다. SSH와 SSL을 가지고있는 것처럼 보이지만 SSL을 필요로하는 엔드 투 엔드 이후로는 실제로 다른 방법으로는 얻을 수 없습니다. 성능에 영향을 미칠지는 모르겠지만 작동한다는 것을 알고 있습니다. 터널을 모니터링하고 완료되면 백업을 가져오고, SSH 키 교환 등을 처리해야합니다.

  2. 나를 위해 구멍을 설정하고 구성하려면 uPNP를 설정하십시오. 대부분의 경우 작동하지만 uPNP가 켜지는 것은 아닙니다. 다음 단계로 나아갈 수 있습니다.

  3. 일부 유형의 NAT 횡단 구성이 있습니다. 나는 이것들에 익숙하지 않고 정확하게 작동하는 방법에 대해 불확실하다. 우리는 인증에 필요한 중앙 집중화 된 서버에 액세스 할 수 있습니다.

이 작업을 수행하려면 어떻게해야합니까?

답변

8

고객이 아닌 귀하 또는 호스팅 제공 업체가이 서비스를 공개적으로 호스팅 할 수있는 방법이 있습니까?

키오스크를 개발할 때도 비슷한 상황이있었습니다. 나는 다음 설치시 어떤 유형의 네트워크 환경을 처리해야하는지 알지 못했습니다.

모든 키오스크가 공개적으로 호스팅 된 하나의 서버에 연결할 수 있도록 PPTP VPN을 만들었습니다. 그런 다음 VPN을 통해 모두 연결된 키오스크에 액세스 할 수 있도록 컨트롤러 웹 서비스를 만들었습니다. VPN에 얼마나 익숙한 지 잘 모르겠지만 VPN 연결을 통해 VPN 할당 IP를 통해 키오스크에 액세스하여 각 키오스크 앞의 방화벽을 완전히 우회 할 수있었습니다.

VPN 서버 설정이 완료되면 각 키오스크 노드를 설치하기가 매우 쉽습니다. 또한 원래 생각하지 못했던 관리 수익과 라이센스 수익을 가져 왔습니다. 이 인프라를 통해 저는 휴대폰을 통해 액세스 할 수있는 서비스를 쉽게 배포 할 수있었습니다.

행운을 빈다.

0

톰캣 앞에 Apache을 설정하십시오. 이 아파치는 Tomcat이 안되는 인터넷에서 볼 수 있어야한다.

모든 트래픽을 Tomcat에 전달하도록 Apache를 구성합니다. 이것은 mod_proxy (ProxyPass 및 ProxyPassReverse 지시어 확인)을 사용하여 쉽게 수행 할 수 있습니다.

SSL 인증서를 Apache에두고 모든 클라이언트가 HTTPS를 Apache 서버와 통신 할 수 있도록합니다. 그러면 Apache 서버와 Tomcat이 차례로 일반 HTTP를 말합니다.

터널링이나 기타 불쾌감이 없으면 + 이렇게하면 아파치를 쉽게 구성 할 수 있습니다.

+2

나는 당신이이 질문을 이해한다고 생각하지 않는다고 생각합니다. Tomcat은 NAT 뒤에있는 사설 IP 주소에 있습니다. 아파치를 앞에두고도 아무 것도 해결되지 않습니다. Nat 외부의 사람들은 여전히 ​​Tomcat 또는 Apache와 같은 서비스에 액세스해야합니다. 포트에서 SSL 응답을 실행중인 Tomcat이 이미 있습니다. 방화벽에 구멍을 뚫을 필요가 있으며 그 것을 피하려고합니다. –

+0

예, 위의 해결책은 Apache가 사설망 외부에 있고 Apache와 Tomcat이 방화벽의 구멍을 통해 서로 통신한다고 가정합니다. 죄송합니다. 이 설정을 사용하면 모든 요청이 Apache 서버를 통해 들어 오기 때문에 클라이언트는 사설 네트워크에 직접 액세스 할 필요가 없습니다. 내 눈에는 안전하고 관리하기 쉬운 설정이됩니다. 특히 방화벽의 구멍은 Apache 서버의 IP 주소에 대해서만 열려 있기 때문에 원하는대로 Apache를 보호 할 수 있습니다. –

+2

나는 여전히 방화벽에서 구멍을 뚫을 필요가 있는데, 이는 내가 피하려고하는 것입니다. –

2

NAT 뒤에있는 컴퓨터의 소프트웨어에 "동적으로"액세스하기위한 솔루션이 있지만 대개 대부분 UDP 통신용입니다.

UDP hole punching 기술 중 하나입니다. 그러나 이것은 마다 가능한 상황에서 일할 것을 보증하지 않습니다. 통신의 양측이 "Symmetric Cone NAT"뒤에있는 경우 그렇지 않습니다.

클라이언트는 UPnP를 백업 (또는 기본) 대안으로 사용하여 통신 할 수없는 가능성을 줄일 수 있습니다.

웹 서비스에 대해 충분히 알지 못하고 웹 서비스에 UDP를 사용하는 것이 옵션인지 (또는 가능할지라도)조차 알지 못합니다.

TCP와 똑같은 기술을 사용하면 실패 할 가능성이 있습니다 (TCP 연결은 상태 비 저장이 아니기 때문에 많은 문제가 발생합니다).

동일한 기술을 사용하는 대안은 UDP (예 : OpenVPN)를 기반으로하는 일부 VPN을 설정하는 것이지만, 명시된 바와 같이 키, 인증서 등을 관리해야합니다. 이것은 자동화 될 수 있지만 (여전히 해냈습니다.) 여전히 사소하지는 않습니다.

=== 편집 ===

당신이 정말로 TCP를 사용하려는 경우, 당신이 릴레이로 봉사 할 것입니다 클라이언트 상자에 간단한 "프록시"소프트웨어를 만들 수 있습니다. 발신 (따라서 비 차단) TCP 연결을 설정, 같은 상자에 NAT

  • 은 "프록시"소프트웨어 뒤에, 클라이언트 상자에

    1. 웹 서비스 :

      는 다음과 같은 스키마를 할 것이다 회사 서버에 연결

    2. 회사 서버는 WebService도 호스트하며, 적절한 "TCP 연결"에 요청을 리디렉션하기 위해 "클라이언트 식별자"와 같은 것이 필요합니다.
    3. 프록시 프로그램은 로컬 WebService에 질의하고 응답을 원래 요청자에게 중계하는 회사 서버로 다시 보냅니다.

    대안 : 성능 향상을 위해 프록시 소프트웨어에 요청자와 직접 연결하도록 요청할 수도 있지만 피하려는 사용자와 동일한 NAT 문제가 발생할 수 있습니다.

  • +0

    감사합니다. 나는 HTTP에 기반한 것들을 유지하고 싶기 때문에 TCP를 고수 할 필요가있다. 정말 NAT 뒤에있는 서버가 아웃 바운드 TCP 연결을 시작하고 유지 관리하는 솔루션이 필요합니다. 인바운드 TCP 연결이이를 통해 전달되고 특정 포트로 지정 될 수 있습니다. –

    +0

    @jr 안녕하세요. TCP 용 UDP와 비슷한 솔루션이 있었으면 좋겠습니다. 유감스럽게도 라우터와 방화벽은 일반적으로 TCP 연결이 인바운드 또는 아웃 바운드 연결인지 파악할만큼 똑똑합니다. 따라서 설명 된 기술은 작동하지 않습니다. 그러나 ** 새로운 가능한 해결책 **을 제안하기 위해 내 대답을 업데이트했습니다. – ereOn

    +0

    +1 Hamachi와 Skype (언젠가 먼 미래의 Cryptolink)이 작동하는 방식입니다. –

    0

    이전에 비슷한 일을해야했고 제안한 첫 번째 옵션이 입니다.

    -R 옵션과 함께 ssh를 사용하고 게시 키 인증 및 몇 가지 스크립트를 사용하여 연결을 확인할 수 있습니다. 다양한 keep keep과 ssh의 기능 제한 시간을 잊지 마십시오.

    공연에 대해 걱정하지 마십시오. 가능한 경우 권한이없는 사용자와 포트 을 사용하십시오. CA를 설치하는 것을 괴롭히지 말고, 각 원격 서버의 공개 키는 수천 명이 아니면 않는 한 유지하기가 더 쉽습니다.

    모니터링이 매우 간단합니다. 각 서버는 중앙 서버에서 서비스를 테스트해야합니다. 실패하면 터널이 다운되거나 연결이 끊어집니다. 터널을 다시 시작해도 아무런 해가 없습니다.

    또는 IPsec (strongswan)을 사용하여 네트워크 수준에서 수행 할 수 있습니다. 설치가 까다로울 수 있으며 사용하는 옵션이지만 다음 번에 SSH를 사용하면 많은 시간을 절약 할 수 있습니다.

    0

    클라이언트 서버에 RESTful 통합을 원할 경우 프록시로 작동하는 중앙 서버로가는 터널이 가장 좋은 방법입니다.

    그러나이 하드 요구 사항이없는 경우, 당신은 중앙 서버가 RESTfull 물건을 처리하고 중앙 서버 및 기타 미들웨어 클라이언트 서버를 통합 할 수 있습니다. 좋은 후보자는 RMI 또는 JMS입니다. 예를 들어 클라이언트가 시작한 RMI 연결을 사용하면 서버가 클라이언트에 대한 RMI 호출을 수행 할 수 있습니다.

    +0

    요청이 서버에서 시작될 때 RMI가 스트레이트 HTTP를 통해 작동합니까? 나는 RMI를 수년 동안 보지 않았는데, 그 당시 RMI는 HTTP를 통해 서버로부터 푸시를 할 수 없었다. – mdma

    +0

    RMI http 터널이 아무 것도 해결하지 못할 것이라고 생각합니다. 문제는 '클라이언트 서버'가 NAT 방화벽 뒤에 있기 때문에 포트 포워딩을 수행하지 않는 경우 항상 '중앙 서버'에 대한 연결을 시작해야한다는 것입니다. RMI를 사용하면 '중앙 서버'에 대한 연결을 시작하여 '중앙 서버'가 콜백을 사용하여 '클라이언트 서버'(BTW RMI는 콜백을 지원하지 않음)에 연결할 수 있습니다. – Kdeveloper

    1

    +1 SSH 터널 사용. 널리 알려져 있으며 널리 사용 가능하며 구성하기가 어렵지 않습니다.

    그러나 지적했듯이 SSL을 이미 실행하고 있으므로 SSH 암호화가 중복됩니다. SSH 대신 암호화없이 터널링을 제공하는 일반 터널링 프록시를 사용할 수 있습니다. 과거에는 this one을 사용 했었지만 테스트를로드하지는 않았지만 제대로 작동했습니다. 단지 소수의 사용자 만 사용했습니다.

    Here's 터널 프록시를 사용하여 방화벽 외부에서 웹캠에 액세스 한 사람의 블로그입니다.

    2

    사람들이 http를 통해 모든 것을 터널링하는 이유와 특정 하드웨어 공급 업체가 레이어 7 패킷 필터링에 작은 비용을 부과하는 이유가 이와 같습니다.

    고객이 적어도 세 가지 문제가있을 때 한 가지 문제를 해결하는 것은 엄청난 양의 작업입니다. 식별 한 암호 외에도 자신의 암호를 모르면 누구입니까? 더 이상 일하지 않는 관리자? 그게 문제 야.

    둘째, 암호를 모르는 경우 방화벽에 대한 펌웨어 업데이트가 거의 확실합니다.

    저는 방화벽에서 PROM 재설정을하고 처음부터 다시 구성하고 펌웨어를 업그레이드하는 것을 진지하게 고려해야한다고 생각합니다.

    조류 3 마리.

    +0

    +1 - 빠른 일회성 테스트 나 데모를 위해 구멍 펀칭 기술을 자주 사용해 왔지만 장기적인 해결책으로는 이것이 진짜 대답입니다 ... – Stobor

    +2

    완벽한 세계에서 ...하지만 실제 세상에서 클라이언트는 듣지 않고, 진짜 * 문제가 아닌 그의 문제를 해결할 것을 요구합니다. : / – ereOn

    0

    hamachi (무료 VPN 소프트웨어)를 통해 PC/서버에 연결하고 모든 데이터를 터널링 할 수 있습니다.이 도구를 설치할 수 있고 역내 연결을 만들 수 있으므로 가능합니다. 그것에 연결하십시오

    사이트 : http://hamachi.cc/

    관련 문제