web-dev-qa-db-ja.com

ドメイン、静的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(これはWebサイトではありません)にローカルデバイスがあります。

サブドメイン(たとえば、device1.example.comdevice2.example.comなど)を使用してこれらのデバイスにアクセスするにはどうすればよいですか?

現在、私はexample.com:80example.com:47を指す192.168.0.4:80192.168.0.4:47のみを機能させることができました。

DNSサーバーにポートを設定できないことを知っています。

どうすれば問題を克服できますか?

32

サブドメインに基づいてトラフィックを正しいサーバーにリダイレクトするnginxリバースプロキシを実行している1つのパブリックサーバーを使用できます。

「メイン」サーバーの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;
  }
}
68
Daniel

そのうちの1つを除いて、すべてに代替ポートを使用する必要があります。たとえば、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アドレスがパブリックインターネットに公開されます。外部から直接アクセスできるようにします。ご想像のとおり、これにはいくつかのリスクがあります。そのリスクを許容できるかどうかは、あなた次第です。

6
Charles Burge

これらのサービスをインターネットに直接公開しないでください。これらのデバイスを監査して、それらが安全であることを確認することはできません。それらを公開するだけで、内部ネットワークの状態に関する情報が漏洩します。

正しい解決策は、内部ネットワークへのリモートアクセスを許可するVPNサーバーをセットアップすることです。理想的には、内部ネットワークをメインのネットワークから分離し、これらの公開されたデバイスにのみ使用する必要があります。それらがハッキングされた場合のダメージを制限します。

オープンソースVPNソフトウェアは成熟し、監査されており、セキュリティの問題はよく理解されています。自分をはるかに小さな攻撃範囲に制限します。

4
user11567957

まず、すべての人がインターネットからこれらのサービスにアクセスする必要があることを確認します(つまり、本当に公開されることを意図しています)。それ以外の場合は、VPNサーバーをセットアップして、ネットワーク内のサービスにアクセスすることを検討できます。

ポート80にあるサービスは、一般的なWebサービスを提供するWebサーバーであると思います。そのような場合、他の回答で提案されているリバースプロキシソリューションが適用されます。

DNSのSRVエントリで実行するように準備/意図されているサービスである可能性があります。これは、サービスの既知のレコードを解決し、接続するname:portを提供するという考え方です。 Minecraftを例にとると:

  • minecraft.example.comに接続するようにクライアントを設定した
  • クライアントは、実際のIPとポートを取得して接続するために_minecraft._tcp.minecraft.example.com.をクエリできることを知っています。

これは非常に便利な機能ですが、アクセスしているサービスのclientに実装する必要があります

2
WoJ

外部IPアドレスが1つしかない場合は、次のようにします。

最初に私のポートを区別することです、あなたはこれをしたようです。

次に、すべてのポート80について、nginxをリバースプロキシとして使用して、トラフィックをさまざまな場所にルーティングできます。あなたが要求したことを正確に伝えることができます。 http://device1.example.com192.0.0.1:80にルーティングします。別の方法は、http://example.com/device1192.0.0.1:80にルーティングすることです。

最初の方法を実行するには、nginxマニュアルの仮想ホストを参照してください。

また、仮想ホスト方式を使用する場合は、すべての名前を外部IPアドレスにポイントする必要があります。または、ディレクトリ方式を使用している場合は、基本ドメインのみ。

2
ctrl-alt-delor

あなたが説明したとおりにしたい場合は、ダニエルの answer が正しいです。別のサーバーをセットアップし、すべての:80トラフィックを受信して​​、ドメインに応じて正しいサーバーにプロキシする必要があります。

ただし、別のIPアドレスを取得することをお勧めします。あなたのコメントから判断すると、いくつかのローカルISPを使用していて、近所で複数のISPを選択しているようです。競争の激しい小規模のISPは、何にでも同意する可能性が非常に高いです。あなたが合法的なことをしている限り、彼らのほとんどはあなたに月に数ユーロの追加のIPアドレスを与えることに同意します。

別のオプションは、1つのサーバーを使用することです。 :80サーバーが同じホスト上の仮想マシンである場合、リソースを節約し、複数の仮想ホストですべてを処理する単一のWebサーバーを作成することで複雑さを軽減します。

0
Džuris