도메인, 고정 IP 주소 및 집 밖에서 액세스하고 싶은 장치가 많이 있습니다. 어떻게 라우팅하나요?

도메인, 고정 IP 주소 및 집 밖에서 액세스하고 싶은 장치가 많이 있습니다. 어떻게 라우팅하나요?

, , , 에 도메인(예: example.com), 고정 IP 주소(예: ) 212.5.5.5및 로컬 장치가 있습니다 (이것은 웹사이트가 아닙니다).192.168.0.1:80192.168.0.2:80192.168.0.3:80192.168.0.4:80192.168.0.4:47

device1.example.com하위 도메인(예: , 등) 을 사용하여 이러한 장치에 어떻게 액세스합니까 device2.example.com?

example.com:80현재 나는 get 및 일만 할 수 있었고 이는 및 를 example.com:47가리킵니다 .192.168.0.4:80192.168.0.4:47

DNS 서버에서는 포트를 설정할 수 없는 것으로 알고 있습니다.

내 문제를 어떻게 극복해야 할까요?

답변1

하위 도메인을 기반으로 트래픽을 올바른 서버로 리디렉션하는 nginx 역방향 프록시를 실행하는 하나의 공용 서버를 가질 수 있습니다.

"기본" 서버의 nginx 구성:

server {
  server_name device1.example.com;
  location / {
    proxy_pass http://192.168.0.1:80;
  }
}
server {
  server_name device2.example.com;
  location / {
    proxy_pass http://192.168.0.2:80;
  }
}
server {
  server_name device3.example.com;
  location / {
    proxy_pass http://192.168.0.3:80;
  }
}

답변2

그 중 하나를 제외한 모든 포트에는 대체 포트를 사용해야 합니다. 예를 들어 212.5.5.5:80은 192.168.0.1:80으로 전달되지만 212.5.5.5:81은 192.168.0.2:80으로 전달되고 212.5.5.5:82는 192.168.0.3:80으로 전달됩니다. 에. 이는 대부분의 최신 NAT 장치에서 구성 가능해야 합니다.

또 다른 방법은 IPv6를 사용하려는 경우 NAT 장치 또는 라우터에서 IPv6 패스스루를 활성화하는 것입니다. 이는 기본적으로 LAN의 모든 IPv6 주소를 공용 인터넷에 노출시켜 외부에서 직접 액세스할 수 있게 해줍니다. 상상할 수 있듯이 이와 관련된 위험이 있습니다. 그 위험이 허용 가능한지 여부를 결정하는 것은 귀하에게 달려 있습니다.

답변3

이러한 서비스를 인터넷에 직접 노출해서는 안 됩니다. 이러한 장치가 안전한지 감사할 수 없으며 장치를 노출하는 것만으로도 내부 네트워크 상태에 대한 정보가 유출됩니다.

올바른 해결책은 내부 네트워크에 대한 원격 액세스를 허용하는 VPN 서버를 설정하는 것입니다. 이상적으로는 내부 네트워크를 기본 네트워크와 분리하고 노출된 장치에만 사용해야 합니다. 해킹당할 경우 피해가 제한됩니다.

오픈 소스 VPN 소프트웨어는 성숙하고 감사되었으며 보안 문제가 잘 알려져 있습니다. 훨씬 더 작은 공격 표면으로 제한됩니다.

답변4

먼저 모든 사람이 인터넷에서 이러한 서비스에 액세스해야 하는지 확인할 수 있습니다(= 해당 서비스가 실제로 공개되도록 의도되었는지). 그렇지 않으면 VPN 서버 설정을 고려하고 네트워크 내부 서비스에 액세스할 수 있습니다.

포트에 있는 서비스는 80일반적인 웹 서비스를 제공하는 웹 서버라고 가정합니다. 이러한 경우 다른 답변에서 제안된 역방향 프록시 솔루션이 적용됩니다.

SRVDNS의 항목 으로 실행되도록 준비/의도된 서비스일 수 있습니다 . 아이디어는 서비스에 대해 잘 알려진 레코드를 확인하여 연결할 이름:포트를 제공한다는 것입니다. Minecraft를 예로 들면 다음과 같습니다.

  • 연결할 클라이언트를 설정했습니다.minecraft.example.com
  • 클라이언트는 _minecraft._tcp.minecraft.example.com.연결할 실제 IP와 포트를 얻기 위해 쿼리할 수 있다는 것을 알고 있습니다.

이는 매우 유용한 기능이지만 다음 환경에서 구현되어야 합니다.고객귀하가 액세스하고 있는 서비스에 대해

관련 정보