web-dev-qa-db-ja.com

VPSを使用してCG-NATの背後にある自宅のPCを公開する方法

以前は、ルーターの設定でDMZ PCとして設定するだけで、自宅のワークステーションPCをインターネットに直接公開し、そこで実行しているすべてのサービス(SSH、Webサーバー、リモートデスクトップ)にアクセスできました。など、私はDynDNSを構成し、ドメインも所有しています。サブドメインDNSエントリがルーターの外部IPを指しているため、home.mydomain.comのように、固定名を使用して世界中のどこからでも、任意のポートにリモートアクセスできます。またはmyuser.dyndns.com。人生は良かった。

今、私は引っ越し、私の新しいISPはCGNATの背後に私を置きます、すなわち、私のルーターの「外部」アドレスは100.64.0.0/10の範囲にあるので、外部から到達できなくなります(そしてDynDNSもデッドですが、それは無関係です) )。残念ながらISPはIPv6を提供しておらず、私の領域ではISPの切り替えはオプションではありません。

そうは言っても、私の会社は最近、Ubuntu 18.04を実行する私のチームのVPSプランをサブスクライブしました。私はそれを完全に制御できます。 SSHで接続し、ソフトウェアをインストールして、好みに合わせて設定できます。現在、非標準ポートでSSHを実行し、カスタムポートで小さなAPIサービスを実行しています。他のすべてのポート(80を含む)が使用可能です。私はすでにhome.mydomain.comをそれを指すCNAME DNSエントリとして設定しています。

では、この新しいアセットを使用して、ホームワークステーションPCを以前と同じようにインターネットに公開するための最善の戦略は何でしょうか。

CGNATを回避するためにグーグルしながら、SSHリバーストンネル/プロキシ、SOCKS、VPNサーバーについて多くを読みましたが、このシナリオの目標を達成するための最適なツールと設定が何であるかはまだわかりません。

私の要件:

  • オープンソース、フリーソフトウェアのみ:確かに、私はVPSを完全に制御できますが、追加のソフトウェアフィンガープリントを最小限に抑えたいです。私は公式リポジトリのapt installを何でも問題なく使っています。おそらくgithubリポジトリです。 Ubuntuを実行している自分のワークステーションに、もっとあいまいなものをインストールできます。

  • セルフホストソリューション:Serveo、LocalTunnel、OpenVPNなど、外部サービス(有料または無料)を通常必要とするものすべて、サーバーバージョンをVPSにインストールしたい。トラフィックを信頼できる別の会社にルーティングしたくありません。

  • クライアントインストールなし(できれば):ラップトップ、友人のPC、大学、職場、通常のブラウザー、SSHクライアント、リモートデスクトップ(RDPまたはRDP)を使用して、どこからでもワークステーションにアクセスしたいVNC)クライアントなど、通常はすでにインストールされているか、一般に入手可能なソフトウェア。

  • 個々のポートの穴を開けないこと(できれば):ワークステーションhome.mydomain.comで、インターネットに直接公開されているかのようにする必要があります。リモートポート=ローカルポート+ 10000などのルールを使用してポートを「再マッピング」する必要がある場合は問題ありません(したがって、Webサーバーはポート10080でアクセス可能です)、それ以外の場合はDMZ可能な限り。

最も近いのは、ワークステーションのssh [-R xx:localhost:yy]... home.mydomain.comで、一連の事前定義されたポートを使用し、VPSのGatewayPorts yes/etc/ssh/sshd_configを設定します。それは良いですが、もっと良い解決策があるかもしれないと感じています。ソリューションがVPSへのアクセスに使用されるドメインに基づいている場合、それはawesomeになります。たとえば、home.mydomain.com経由でアクセスされた場合のみ(すべての)リクエストを転送し、vps.mycompany.com経由で到達した場合は通常どおりに動作します。

3
MestreLion

私の意見では、SSHトンネルはこの目的には適していません。もちろん動作しますが、転送するポートと同じ数のトンネルを実行する必要があります。

これを実現するには、おそらくVPNが最良の選択肢です。 VPSでVPNサーバーを構成し、ホームサーバーをVPNクライアントとして接続し、家にいないときは、ラップトップまたはリモートコンピューターをこのVPNにクライアントとして接続します。同じローカルネットワークにいるかのようにホームサーバーに到達できるので、「パブリックIP」を割り当てる必要もありません。

パブリックIPをホームサーバーの1つに割り当てる場合は、VPSに2番目のパブリックIPを構成し(プライマリIPから引き続き利用できるようにする)、1:1をセットアップする必要がありますNAT VPSのファイアウォール(iptables)。また、このホームサーバーはVPNをゲートウェイとして使用するように構成されているため、発信パケットはホームISPのIPではなくVPSのセカンダリIPを通過します。

多くのホームサーバーがある場合、VPSに3つ以上のIPを割り当てることができれば、1:1 NATを実行できます。それ以外の場合、単一のIPを異なるホームサーバーで使用する場合は、ポート転送を使用する必要があります。

3
Dylan

ISPに静的IPv6プレフィックスを要求します。すべてのインターネットアクセスでIPv6を取得します。

レガシーIPv4アクセスしかない場合のIPv6トンネルブローカー、VPN、またはその他の移行方法を構成します。

1
John Mahowald

これはおそらく役に立たないかもしれませんが、PCP(ポート制御プロトコル)をこのユースケースに適合するものとして強調することは良いことだと思います。あなたのISPはこれをサポートする必要があります(PCPのISPサポートがどれだけ普及しているかはわかりませんが、悲観論者であるため、私はそうは思いません...)

PCPは、基本的にUPnP、NAT-PMPタイプのプロトコルのファミリの最新のものです。 PCPにはMAPおよびPEER機能があり、クライアントはISPレベル(CGNATで)でポート転送を要求できます。 ISPがこれを行っていることを知っている人(または実際には実際にそれを実際に使用したことがある人)なら、ぜひ聞いてみたいと思います。

https://tools.ietf.org/html/rfc6887

https://en.wikipedia.org/wiki/Port_Control_Protocol

実際にPCP(ポート制御プロトコル)を使用していますか?

1