以前は、ルーターの設定で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
経由で到達した場合は通常どおりに動作します。
私の意見では、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を異なるホームサーバーで使用する場合は、ポート転送を使用する必要があります。
ISPに静的IPv6プレフィックスを要求します。すべてのインターネットアクセスでIPv6を取得します。
レガシーIPv4アクセスしかない場合のIPv6トンネルブローカー、VPN、またはその他の移行方法を構成します。
これはおそらく役に立たないかもしれませんが、PCP(ポート制御プロトコル)をこのユースケースに適合するものとして強調することは良いことだと思います。あなたのISPはこれをサポートする必要があります(PCPのISPサポートがどれだけ普及しているかはわかりませんが、悲観論者であるため、私はそうは思いません...)
PCPは、基本的にUPnP、NAT-PMPタイプのプロトコルのファミリの最新のものです。 PCPにはMAPおよびPEER機能があり、クライアントはISPレベル(CGNATで)でポート転送を要求できます。 ISPがこれを行っていることを知っている人(または実際には実際にそれを実際に使用したことがある人)なら、ぜひ聞いてみたいと思います。
https://tools.ietf.org/html/rfc6887